)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"3fdce19bd65e774a69d75e27b21e1049ac722619","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"6edaf24e_ddd93f9f","updated":"2025-12-09 12:50:15.000000000","message":"Thanks Sean, I agree with most of your points here, and answered some comments inline. The idea is to adapt the proposal based on these feedbacks to reach a better solution.","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b94486bdaf2a550169115c9f089ddd84ed9d0b7b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"18474073_394bc580","updated":"2025-12-08 21:27:10.000000000","message":"i dont think this approch work as presented.\n\nto me this is not a new stragy unles the exction of it resutl in an action plan.","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"185a230377ecebf916e8b877e0173329839cc16a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"283c9559_67938f7e","updated":"2025-12-15 19:41:37.000000000","message":"Thank you Joan and Alfredo for all comments and considerations. After these discussions I see that a generic pipeline that would work for multiple strategies is almost impossible, we would need to define very specific combinations and build the Audit Pipeline Handler smart enough to operate the CDM. There is still the problem with Host Metrics and Updated CDM, which are conflicting at this point. Since metrics would not represent the CDM in use. \nAll of this make me believe that build 2 new strategies (zone_migration + workload_stabilization and node_consolidation + workload_stabilization) and reuse existing methods in a shared class seems more feasible other than all of this here. We can discuss more in the channel or in the weekly meeting. Thanks!","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"d60ec3c328b41e4113923199cea0cd38eb8a96c4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"88a57334_b9196be5","updated":"2025-12-16 12:57:12.000000000","message":"Thanks for the inputs from all. The scope and complexity is increasing as we discuss different aspects of this feature. I will propose an update to include all concerns raise here.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"35e8feb932e5d9aa3082199b895b43186e77f841","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"7af6a264_b9ae96f5","updated":"2025-12-22 18:58:20.000000000","message":"Note for reviewers: I think that we could make a PoC in this cycle, and finish the implementation in 2026.2, that would allow to better understand how it is going to behave.","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"4d3800a974931ac1c0a3c7cbf7e0e20bcebafe38","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"4d95d986_bf520c5b","updated":"2026-01-09 17:30:38.000000000","message":"I think this is becoming a good state to start producing an initial PoC. I only have some doubt about the path to follow wih relationship between AuditPipelines and AuditTriggers and if we need a new API element if we want to support other than 1:1 relationship.","commit_id":"3cfcd4136a342b2d982b1d5fbbc2cf3dc9b16d34"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"7c13e49e25b00f2224e7a86e7e9d39085ee4e1ca","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"84da6a20_87a4d08f","updated":"2026-01-13 07:51:08.000000000","message":"looks good overall!","commit_id":"3cfcd4136a342b2d982b1d5fbbc2cf3dc9b16d34"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"386d09523a1ad0faa4af63528cb74043d7c77abd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"5deb8c9a_82891ced","updated":"2026-02-25 19:58:05.000000000","message":"i need to make time to sitdown and read this end to end which i wont have time to do tonight but just resove a couple fo the bot comemns and pused som old ones","commit_id":"70a06027f951986cd0a6aed4424380227190822c"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"063a8141addbd74b508a1a72cfe78dc0502c450b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"8c59bd4f_687acd05","updated":"2026-02-24 13:20:13.000000000","message":"recheck\n\nto get docs outputs again","commit_id":"70a06027f951986cd0a6aed4424380227190822c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8aea9eef5fed07c1f9dab55a11e3eed138406fdd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"2ae172d5_900c0a8c","updated":"2026-03-27 17:10:25.000000000","message":"+0 as i really only skimmed this i have not really had time to read the proposl yet but ill see if i can make some in the next week or so.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"d93224824909361db1e16976c704d95a90637325","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"04f7756d_6469c847","updated":"2026-03-27 12:14:45.000000000","message":"I think it\u0027s good go to. Just a minor doubt about the accepted PATCH calls for the Audit Pipeline. Other than that, I think this is good to start working on.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b8b0956fdc786ecf53dd8b2527e6239a9cb5a218","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"e61fd77e_78edc489","updated":"2026-04-29 14:27:07.000000000","message":"In the API section, it may be good to specify from which states an Auditi Pipeline can be deleted, although it\u0027s mentioned that it will have same states as Audits, so it can be understood from comparison. That\u0027s the reason for my +1 instead of +2. I can promote if we agree that this is fine as-is.\n\nOther than, LGTM","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e3e604769f00c2f555f51a5708cd925e6b4b7136","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"e3c4c43c_9aa96efe","updated":"2026-04-29 19:17:31.000000000","message":"Thanks, I will address the comments in a new PS soon","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"7ce70c6b72edff52749649a3e0ca40cc4f036e3a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"35e9f442_15332495","updated":"2026-05-06 15:59:06.000000000","message":"I think this is good to go, great work Doug! I\u0027m not +W yet to give @smooney@redhat.com a chance to review, but I think we can aim to merge the spec this week/early next week","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"62a0992d7c0960f2788e717f506db0d76896b18d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"24a61e9d_c9e1a991","updated":"2026-05-06 15:08:38.000000000","message":"Thanks for the work on this spec!","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ca823e677bc57595702fc7d251298639d565e278","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"137c59e5_c316ad1f","updated":"2026-05-25 17:46:28.000000000","message":"i have used ai tre update your spec locally based on the comment i left and \ncreated https://paste.opendev.org/show/833690/ for refence.\n\nim not expeting you to adopt it wholesale\n\nin addtion to the comment i have previously left as i was doing this i realied the spec does not adres the RPC,  notificaion or object changes required, it also a littel light on the exact type sof teh db objects. although i gave that feedback im my previous review.\n\nsome of the decison i mad in my local draft definly need wider dicussion such as using PUT not PATCH for full update isntead of partial.\n\ni think that woudl be a good api chagne to make eventually but i can be confiec that that shoudl be it own change before or after this feature.\n\nim not a huge fan of adding new usage of PATH however i can be convece that it maek sense for consitency.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ec884312b209d711a4a4ed334d955f1a555d328d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"0b386854_edad3c42","in_reply_to":"137c59e5_c316ad1f","updated":"2026-05-25 17:48:30.000000000","message":"oh i also moved compiste and continue audit and event based audit to future work\n\nComposite is actually easiser to implement the cacade as it doe not need any simulation but its less useful for the primary usecase fo the spec.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"1713bac6_77b53a86","updated":"2026-05-27 20:00:26.000000000","message":"Thanks for your review Sean. Not that some of my replies may be outdated.","commit_id":"73c2c59b7eeb965919c649d0b73edb9410ce3a91"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"bdac0fd25bc266064285a54b1257b76a9b5457ec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"7a1b4667_3cb730f1","updated":"2026-06-03 13:43:05.000000000","message":"Thanks for the changes! The spec is really descriptive of the feature and high level implementation design and plan.","commit_id":"abc4191ebab4ee4299af861abde1bafd00244d1e"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"255a7489d094b09a77d64c2850ef66efb449c7a2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"b41b072a_e58729b3","updated":"2026-06-02 15:58:38.000000000","message":"lgtm, thanks for the updates Doug","commit_id":"abc4191ebab4ee4299af861abde1bafd00244d1e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"b9fd3181_c9100fb1","updated":"2026-05-30 09:50:24.000000000","message":"thanks doug\ni do not have any outstandign issues worth holding this for so im happy to proceed with this","commit_id":"abc4191ebab4ee4299af861abde1bafd00244d1e"}],"specs/2026.1/approved/audit-pipeline.rst":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"eb841e7b68cbf01ac620879a6899856dbfecdcc6","unresolved":true,"context_lines":[{"line_number":25,"context_line":"sequence, where each subsequent strategy operates on the expected state of the"},{"line_number":26,"context_line":"cluster after the previous strategy\u0027s actions are applied."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Cloud operators may need to combine optimization strategies to achieve their"},{"line_number":29,"context_line":"operational goals. For example, during maintenance windows, an operator"},{"line_number":30,"context_line":"may need to evacuate hosts and then rebalance workloads, or during off-peak"},{"line_number":31,"context_line":"hours, consolidate nodes and redistribute workloads optimally."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Currently, achieving these combined optimizations requires creating and"},{"line_number":34,"context_line":"executing multiple separate audits, waiting for each action plan to complete"}],"source_content_type":"text/x-rst","patch_set":2,"id":"88de83b7_e8b0c0d6","line":31,"range":{"start_line":28,"start_character":0,"end_line":31,"end_character":62},"updated":"2025-12-09 19:33:18.000000000","message":"I forgot to update this part here, should be more aligned with new use cases text.","commit_id":"9b4573c9231e17544a433f389aec3c844f2933af"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"5d213aca61b3cd32d1729bc64d199b2c2e5ba791","unresolved":false,"context_lines":[{"line_number":25,"context_line":"sequence, where each subsequent strategy operates on the expected state of the"},{"line_number":26,"context_line":"cluster after the previous strategy\u0027s actions are applied."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Cloud operators may need to combine optimization strategies to achieve their"},{"line_number":29,"context_line":"operational goals. For example, during maintenance windows, an operator"},{"line_number":30,"context_line":"may need to evacuate hosts and then rebalance workloads, or during off-peak"},{"line_number":31,"context_line":"hours, consolidate nodes and redistribute workloads optimally."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Currently, achieving these combined optimizations requires creating and"},{"line_number":34,"context_line":"executing multiple separate audits, waiting for each action plan to complete"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa307ef0_831e7246","line":31,"range":{"start_line":28,"start_character":0,"end_line":31,"end_character":62},"in_reply_to":"88de83b7_e8b0c0d6","updated":"2025-12-17 18:38:07.000000000","message":"Done","commit_id":"9b4573c9231e17544a433f389aec3c844f2933af"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"eb841e7b68cbf01ac620879a6899856dbfecdcc6","unresolved":true,"context_lines":[{"line_number":49,"context_line":"This requires coordinating multiple optimization strategies in sequence, where"},{"line_number":50,"context_line":"each strategy needs to operate in an scoped and updated state of the cluster."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"As a cloud operator, I want to consolidate workloads of specific hosts"},{"line_number":53,"context_line":"onto fewer nodes to save energy, then ensure the consolidated workload is"},{"line_number":54,"context_line":"optimally balanced using workload balancing strategies. This requires"},{"line_number":55,"context_line":"coordinating multiple optimization strategies in sequence, where each strategy"},{"line_number":56,"context_line":"needs to operate in a scoped and updated state of the cluster."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":2,"id":"c7ea8e16_146b95d8","line":56,"range":{"start_line":52,"start_character":0,"end_line":56,"end_character":62},"updated":"2025-12-09 19:33:18.000000000","message":"I may want to create a different ese case, since this one is very similar to the previous one.","commit_id":"9b4573c9231e17544a433f389aec3c844f2933af"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"5d213aca61b3cd32d1729bc64d199b2c2e5ba791","unresolved":false,"context_lines":[{"line_number":49,"context_line":"This requires coordinating multiple optimization strategies in sequence, where"},{"line_number":50,"context_line":"each strategy needs to operate in an scoped and updated state of the cluster."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"As a cloud operator, I want to consolidate workloads of specific hosts"},{"line_number":53,"context_line":"onto fewer nodes to save energy, then ensure the consolidated workload is"},{"line_number":54,"context_line":"optimally balanced using workload balancing strategies. This requires"},{"line_number":55,"context_line":"coordinating multiple optimization strategies in sequence, where each strategy"},{"line_number":56,"context_line":"needs to operate in a scoped and updated state of the cluster."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":2,"id":"790e0595_8fccb990","line":56,"range":{"start_line":52,"start_character":0,"end_line":56,"end_character":62},"in_reply_to":"9a3dcf06_cccbd6aa","updated":"2025-12-17 18:38:07.000000000","message":"Done","commit_id":"9b4573c9231e17544a433f389aec3c844f2933af"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a52b2e227f8c4367bae4ac9ab169bcabd77c0f9a","unresolved":true,"context_lines":[{"line_number":49,"context_line":"This requires coordinating multiple optimization strategies in sequence, where"},{"line_number":50,"context_line":"each strategy needs to operate in an scoped and updated state of the cluster."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"As a cloud operator, I want to consolidate workloads of specific hosts"},{"line_number":53,"context_line":"onto fewer nodes to save energy, then ensure the consolidated workload is"},{"line_number":54,"context_line":"optimally balanced using workload balancing strategies. This requires"},{"line_number":55,"context_line":"coordinating multiple optimization strategies in sequence, where each strategy"},{"line_number":56,"context_line":"needs to operate in a scoped and updated state of the cluster."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a3dcf06_cccbd6aa","line":56,"range":{"start_line":52,"start_character":0,"end_line":56,"end_character":62},"in_reply_to":"c7ea8e16_146b95d8","updated":"2025-12-15 20:51:21.000000000","message":"```suggestion\nAs a cloud operator, I want to save energy by consolidate workloads while\nalso ensuring enough nodes are online to ensure new workloads can still be supported. To archive this first the workload need to be consolidated by the server or vm consolidation goals, then compute nodes can be powered off based on the Saving Energy Strategy\n```\n\n\n```\nAs a operator i would like to run the same strategy on different subset of hosts.\ne.g. define a pipeline audit to run the workload stabilisation strategy on each\ndata-center room/building.\n```","commit_id":"9b4573c9231e17544a433f389aec3c844f2933af"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"eb841e7b68cbf01ac620879a6899856dbfecdcc6","unresolved":true,"context_lines":[{"line_number":96,"context_line":"     representing a stage in the pipeline. Audit\u0027s goal and strategy won\u0027t be"},{"line_number":97,"context_line":"     defined directly in the Audit Pipeline resource, but in each of the Audit"},{"line_number":98,"context_line":"     Templates instead."},{"line_number":99,"context_line":"   * It will support a single pipeline strategy, which will be the only"},{"line_number":100,"context_line":"     supported strategy for in this spec. This strategy will orchestrate the"},{"line_number":101,"context_line":"     execution of the pipeline, sequentially and mutating the cluster data"},{"line_number":102,"context_line":"     model between each stage. The concept of a pipeline strategy can be"},{"line_number":103,"context_line":"     omitted from this initial implementation, and then added later if needed."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"c13447f8_48a202d5","line":103,"range":{"start_line":99,"start_character":5,"end_line":103,"end_character":78},"updated":"2025-12-09 19:33:18.000000000","message":"Here we can have or omit the idea of pipeline strategies. Adding them will allow different implementations of pipeline execution. But we could omit it in this spec and let this implementation for future work.","commit_id":"9b4573c9231e17544a433f389aec3c844f2933af"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"d60ec3c328b41e4113923199cea0cd38eb8a96c4","unresolved":true,"context_lines":[{"line_number":96,"context_line":"     representing a stage in the pipeline. Audit\u0027s goal and strategy won\u0027t be"},{"line_number":97,"context_line":"     defined directly in the Audit Pipeline resource, but in each of the Audit"},{"line_number":98,"context_line":"     Templates instead."},{"line_number":99,"context_line":"   * It will support a single pipeline strategy, which will be the only"},{"line_number":100,"context_line":"     supported strategy for in this spec. This strategy will orchestrate the"},{"line_number":101,"context_line":"     execution of the pipeline, sequentially and mutating the cluster data"},{"line_number":102,"context_line":"     model between each stage. The concept of a pipeline strategy can be"},{"line_number":103,"context_line":"     omitted from this initial implementation, and then added later if needed."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"d1f74ac2_9e7ae3fa","line":103,"range":{"start_line":99,"start_character":5,"end_line":103,"end_character":78},"in_reply_to":"1f7d570a_660302b6","updated":"2025-12-16 12:57:12.000000000","message":"Yeah, both strategy and planner are already referencing to different procedures. Planner in watcher builds action plans from a input solution, so they don\u0027t actually interact with any strategy. Today the class that glues all together are the audit handler. We may need a different name like: pipeline mode or pipeline engine.","commit_id":"9b4573c9231e17544a433f389aec3c844f2933af"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a52b2e227f8c4367bae4ac9ab169bcabd77c0f9a","unresolved":true,"context_lines":[{"line_number":96,"context_line":"     representing a stage in the pipeline. Audit\u0027s goal and strategy won\u0027t be"},{"line_number":97,"context_line":"     defined directly in the Audit Pipeline resource, but in each of the Audit"},{"line_number":98,"context_line":"     Templates instead."},{"line_number":99,"context_line":"   * It will support a single pipeline strategy, which will be the only"},{"line_number":100,"context_line":"     supported strategy for in this spec. This strategy will orchestrate the"},{"line_number":101,"context_line":"     execution of the pipeline, sequentially and mutating the cluster data"},{"line_number":102,"context_line":"     model between each stage. The concept of a pipeline strategy can be"},{"line_number":103,"context_line":"     omitted from this initial implementation, and then added later if needed."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1f7d570a_660302b6","line":103,"range":{"start_line":99,"start_character":5,"end_line":103,"end_character":78},"in_reply_to":"b691d8b5_21669ddb","updated":"2025-12-15 20:51:21.000000000","message":"so i think we need to use a different noun\n\ni have been thinking of using the term planner to refer to the configurable thing that compute how to combine the action plans and is the entiry that does the propagation of the action plans and data modeles to each stragey instance.","commit_id":"9b4573c9231e17544a433f389aec3c844f2933af"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"c81e8cf3f626b763ed84c0335d363f0ef1981215","unresolved":true,"context_lines":[{"line_number":96,"context_line":"     representing a stage in the pipeline. Audit\u0027s goal and strategy won\u0027t be"},{"line_number":97,"context_line":"     defined directly in the Audit Pipeline resource, but in each of the Audit"},{"line_number":98,"context_line":"     Templates instead."},{"line_number":99,"context_line":"   * It will support a single pipeline strategy, which will be the only"},{"line_number":100,"context_line":"     supported strategy for in this spec. This strategy will orchestrate the"},{"line_number":101,"context_line":"     execution of the pipeline, sequentially and mutating the cluster data"},{"line_number":102,"context_line":"     model between each stage. The concept of a pipeline strategy can be"},{"line_number":103,"context_line":"     omitted from this initial implementation, and then added later if needed."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"b691d8b5_21669ddb","line":103,"range":{"start_line":99,"start_character":5,"end_line":103,"end_character":78},"in_reply_to":"c13447f8_48a202d5","updated":"2025-12-15 11:47:43.000000000","message":"I think it\u0027s good to mention although in short/mid term i see hard to do something different that \"linear\" strategy. WRT the `strategy` name, I\u0027m not sure if we could use a different term to avoid any confusion with the existing watcher strategies.","commit_id":"9b4573c9231e17544a433f389aec3c844f2933af"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a52b2e227f8c4367bae4ac9ab169bcabd77c0f9a","unresolved":true,"context_lines":[{"line_number":33,"context_line":"Use Cases"},{"line_number":34,"context_line":"---------"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"As a cloud operator, I need to migrate the workload of specific hosts for a"},{"line_number":37,"context_line":"scheduled maintenance. After migration, I want this workload to be optimally"},{"line_number":38,"context_line":"distributed across the functioning nodes, using workload balancing strategies."},{"line_number":39,"context_line":"This requires coordinating multiple optimization strategies in sequence, where"},{"line_number":40,"context_line":"each strategy needs to operate in an scoped and updated state of the cluster."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"As a cloud operator, I want to consolidate workloads of specific hosts"},{"line_number":43,"context_line":"onto fewer nodes to save energy, then ensure the consolidated workload is"}],"source_content_type":"text/x-rst","patch_set":3,"id":"05ab5e03_bfaef646","line":40,"range":{"start_line":36,"start_character":0,"end_line":40,"end_character":77},"updated":"2025-12-15 20:51:21.000000000","message":"```suggestion\nAs a cloud operator, I need to migrate the workload from specific hosts for scheduled maintenance. After migration, I want this workload to be optimally\ndistributed across the functioning nodes, using workload balancing strategies.\nThis requires coordinating multiple optimization strategies in sequence, where\neach strategy needs to operate on a scoped and updated state of the cluster based on future state created by the previous strategy.\n```","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"5d213aca61b3cd32d1729bc64d199b2c2e5ba791","unresolved":false,"context_lines":[{"line_number":33,"context_line":"Use Cases"},{"line_number":34,"context_line":"---------"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"As a cloud operator, I need to migrate the workload of specific hosts for a"},{"line_number":37,"context_line":"scheduled maintenance. After migration, I want this workload to be optimally"},{"line_number":38,"context_line":"distributed across the functioning nodes, using workload balancing strategies."},{"line_number":39,"context_line":"This requires coordinating multiple optimization strategies in sequence, where"},{"line_number":40,"context_line":"each strategy needs to operate in an scoped and updated state of the cluster."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"As a cloud operator, I want to consolidate workloads of specific hosts"},{"line_number":43,"context_line":"onto fewer nodes to save energy, then ensure the consolidated workload is"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fe9f2d24_23e78301","line":40,"range":{"start_line":36,"start_character":0,"end_line":40,"end_character":77},"in_reply_to":"05ab5e03_bfaef646","updated":"2025-12-17 18:38:07.000000000","message":"Done","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a06f38a147f808dba1653c39adfe9efebfed4e14","unresolved":true,"context_lines":[{"line_number":49,"context_line":"Proposed change"},{"line_number":50,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"This spec proposes the introduction of ``Audit Pipeline``, which allows"},{"line_number":53,"context_line":"multiple strategies to execute sequentially on a mutable cluster data model."},{"line_number":54,"context_line":"This functionality will be implemented based on a new ``Audit Pipeline``"},{"line_number":55,"context_line":"resource with dedicated APIs, and an extension to the existing Audit Template"}],"source_content_type":"text/x-rst","patch_set":3,"id":"411dad5d_f02bf8fe","line":52,"in_reply_to":"338aa1f2_ab1d63f7","updated":"2025-12-18 18:29:27.000000000","message":"so one of my usecase for the linear pipelien\n is to defien 1 workload stablsition audit tempelste per cell\n \n the to defien one piplien that does stablisitoin for each nova cell indepently.\n \n i dont really have a prefernce on if it produced one or many action plans but i was orginlly thinkign of one.\n \n 1 per stage woudl also be fine.\n \n for compiste vs cascade i was not really sure if we neede both or which is better.\n \n cacacde is more work but i think better long term if each sage shoudl depend on the output of the previous one.\n \n \n the way im thinking about composing the stages is kind fo like ansibel execution stragies\n  \n https://docs.ansible.com/projects/ansible/latest/playbook_guide/playbooks_strategies.html\n \n you have the basic linear execution stragey that syconises the same opeatoin across all host beofre moving on to the next operation on any haost\n \n https://docs.ansible.com/projects/ansible/latest/collections/ansible/builtin/linear_strategy.html#linear-strategy\n \n and https://docs.ansible.com/projects/ansible/latest/collections/ansible/builtin/free_strategy.html#free-strategy\n \n which alowe each play to run to compelte on ay give host before movign onto the next play\n \n so i was thinking of a similar apprch\n \n linear woudl jsut execute each audit and protially each action plan one after the other in the very simple case.\n \n then cacade coudl take a differnte more intelegent arprpoch for audits that have depencies.\n \n we could even express decencies between stages instead of just having a list in the future if we had a need for that by extendign action planes with the idea fo depceices simialr to zuul jobs\n \n i.e. where you could appove a set of catrion plan and they would only progress if there depended action plans succeeded.\n \n but to reason and talk about them i needed names to label the concpet so \n \n `linear` and `cascade` were the two idea that i saw the most value in. composite was inpsred by the `free` stragy wehre we would not assum a depency but just caualte the action plan for each indepently and try and consolidate/optimise them after the fact.\nbasiclly applyign the painter algortirm so that the most recent selection operation for that vm is kept.\n\ni was not sure that woudl work but i think the other 2 can work.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"35e8feb932e5d9aa3082199b895b43186e77f841","unresolved":true,"context_lines":[{"line_number":49,"context_line":"Proposed change"},{"line_number":50,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"This spec proposes the introduction of ``Audit Pipeline``, which allows"},{"line_number":53,"context_line":"multiple strategies to execute sequentially on a mutable cluster data model."},{"line_number":54,"context_line":"This functionality will be implemented based on a new ``Audit Pipeline``"},{"line_number":55,"context_line":"resource with dedicated APIs, and an extension to the existing Audit Template"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5e92f2c0_0a802472","line":52,"in_reply_to":"411dad5d_f02bf8fe","updated":"2025-12-22 18:58:20.000000000","message":"I think that I should focus on the \u0027cascade\u0027 mode for this spec, which I see as the crucial one for the feature proposal. Other operational modes can be added in the future, or in a update of this spec for 2026.2. I will mention other possible modes, but not going into details on how they should work.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"5d213aca61b3cd32d1729bc64d199b2c2e5ba791","unresolved":true,"context_lines":[{"line_number":49,"context_line":"Proposed change"},{"line_number":50,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"This spec proposes the introduction of ``Audit Pipeline``, which allows"},{"line_number":53,"context_line":"multiple strategies to execute sequentially on a mutable cluster data model."},{"line_number":54,"context_line":"This functionality will be implemented based on a new ``Audit Pipeline``"},{"line_number":55,"context_line":"resource with dedicated APIs, and an extension to the existing Audit Template"}],"source_content_type":"text/x-rst","patch_set":3,"id":"60ad465d_1736adf3","line":52,"in_reply_to":"561757ea_a534e8e1","updated":"2025-12-17 18:38:07.000000000","message":"Yes, that was the idea around pipeline_strategy, to have different execution modes. Still don\u0027t have a great name that avoids confusion with existing concepts. I propose a very similar approach that can be discussed the proposed changes sections.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"386d09523a1ad0faa4af63528cb74043d7c77abd","unresolved":true,"context_lines":[{"line_number":49,"context_line":"Proposed change"},{"line_number":50,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"This spec proposes the introduction of ``Audit Pipeline``, which allows"},{"line_number":53,"context_line":"multiple strategies to execute sequentially on a mutable cluster data model."},{"line_number":54,"context_line":"This functionality will be implemented based on a new ``Audit Pipeline``"},{"line_number":55,"context_line":"resource with dedicated APIs, and an extension to the existing Audit Template"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bbddefcb_37d63759","line":52,"in_reply_to":"5e92f2c0_0a802472","updated":"2026-02-25 19:58:05.000000000","message":"i was going to suggest doing linear first since its the simplest and allwos use to get the the infra fro supproting this working\n\nthen cascade next as that is more complext but those are the two i see the most value in\n\nwe can do cascade first if we prefer i just think ther eis more risk of bugs in that initally as it a larger chagne.\n\neither is ok and we can do both in either order.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"1b1ea093ef0aaa46b2dae91f85154ec038f37c21","unresolved":true,"context_lines":[{"line_number":49,"context_line":"Proposed change"},{"line_number":50,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"This spec proposes the introduction of ``Audit Pipeline``, which allows"},{"line_number":53,"context_line":"multiple strategies to execute sequentially on a mutable cluster data model."},{"line_number":54,"context_line":"This functionality will be implemented based on a new ``Audit Pipeline``"},{"line_number":55,"context_line":"resource with dedicated APIs, and an extension to the existing Audit Template"}],"source_content_type":"text/x-rst","patch_set":3,"id":"338aa1f2_ab1d63f7","line":52,"in_reply_to":"60ad465d_1736adf3","updated":"2025-12-18 16:24:01.000000000","message":"WRT `linear`, Would that provide a single ActionPlan or two independent ActionPlans that could be started/cancelled/deleted independently?\n\nIMO, that could work and make sense in some cases but only very independent cases. For the example case ` Maintenance moves VM A (Host 1→2). Stabilization moves VM A (Host 2→3)` , if we run those two strategies one after the other without any intermediate simulation, it may happen that Stabilization audit moves back VM from Host 2 to 1 given that Host 1 is still enabled in the model (no intermediate cluster data model is created). This would only work for auto-trigger audits and where 2nd one waits for the first action plan finish, what I understand is not the idea.\n\nIMO, this would work fine with totally independent audits, i.e. with non-overlapping scopes, but the added value would be limited. Just a way to \"run an audit after the other\" in one API element. Could be useful in some cases from an operational point of view.\n\nWRT the `composite` and `cascade` planner. We\u0027d need to very clear delimiting what is the difference and would be tricky to identify which audit combinations may work well, or to document the expected behavior of each combination for each planner mode. It may become confusing for users IMO.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a52b2e227f8c4367bae4ac9ab169bcabd77c0f9a","unresolved":true,"context_lines":[{"line_number":49,"context_line":"Proposed change"},{"line_number":50,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"This spec proposes the introduction of ``Audit Pipeline``, which allows"},{"line_number":53,"context_line":"multiple strategies to execute sequentially on a mutable cluster data model."},{"line_number":54,"context_line":"This functionality will be implemented based on a new ``Audit Pipeline``"},{"line_number":55,"context_line":"resource with dedicated APIs, and an extension to the existing Audit Template"}],"source_content_type":"text/x-rst","patch_set":3,"id":"561757ea_a534e8e1","line":52,"in_reply_to":"68b2fe67_ffa8a879","updated":"2025-12-15 20:51:21.000000000","message":"\u003e Consider adding configuration options for: timeout between stages, conflict resolution preferences, and optimization levels for the pipeline planner.\n\n\ninteresting.\n\ni agree that the way the strategies are composed should be configurable via a parameter in the audit but not a config option.\n\nfor example we could have a basic `linear` strategy that literally just does one statargy then the next without any optimisations.\n\nthat woudl be useful for runing a set of unrelated autis sequetially.\n\ni.e. running workload stabilization automation on different subsets of nodes.\n\nYou could have a `cascade` or `composite`  strategy where output of the previous strategy is used to calculate the input state for the next and we compute the optimal set of actions to achieve the final state.\n\ni woudl defien the 3 planner mdoes as follows\n\n    Linear Planner (Append-Only):\n\n        Behavior: Merges action plans strictly in order without intermediate simulation.\n\n        Use Case: Independent actions where state overlap is irrelevant.\n\n        Example: Maintenance moves VM A (Host 1→2). Stabilization moves VM A (Host 2→3). Result: 1→2 then 2→3.\n\n    Composite Planner (Optimization):\n\n        Behavior: Executes strategies sequentially and caches metrics, but does not simulate complex resource math (CPU arithmetic). It analyzes the final combined action plan to collapse redundant operations.\n\n        Use Case: Reducing churn on the same resources.\n\n        Example: It detects the redundancy in 1→2 and 2→3 and collapses them into a single action: 1→3.\n\n    Cascade Planner (Simulated State):\n\n        Behavior: This is required for the Workload Balancing use case. It performs intermediate simulation.\n\n        Logic:\n\n            Strategy A (Host Maintenance) runs.\n\n            Planner takes the solution and simulates the moves (e.g., subtract CPU usage from Source, add to Destination) on the Data Model.\n\n            Strategy B (Stabilization) runs using this simulated model. It sees the predicted high load on the destination host and makes decisions based on that future state.\n\n        Scoping: The scope of Strategy B can be dynamically derived from the output of Strategy A.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a52b2e227f8c4367bae4ac9ab169bcabd77c0f9a","unresolved":true,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"   New field:"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"   * ``parameters``: Optional dict of input parameters for the strategy"},{"line_number":73,"context_line":"     defined in the template."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"2. ``New Audit Pipeline Resource``"}],"source_content_type":"text/x-rst","patch_set":3,"id":"e6b00d77_4ca92604","line":72,"range":{"start_line":72,"start_character":7,"end_line":72,"end_character":17},"updated":"2025-12-15 20:51:21.000000000","message":"i would call it `default_parameters` if the intended semantic is to be that the parameter can be overridden in the audit request.\nif that is not the intent we shoudl return a 409 conflict if the same parameter is defined in the audit input_parameters with a different value.\n\n\nthe addition of this filed in either case should be accompanied by a new API micro-version.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"5d213aca61b3cd32d1729bc64d199b2c2e5ba791","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"   New field:"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"   * ``parameters``: Optional dict of input parameters for the strategy"},{"line_number":73,"context_line":"     defined in the template."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"2. ``New Audit Pipeline Resource``"}],"source_content_type":"text/x-rst","patch_set":3,"id":"6d0b31ff_da417051","line":72,"range":{"start_line":72,"start_character":7,"end_line":72,"end_character":17},"in_reply_to":"e6b00d77_4ca92604","updated":"2025-12-17 18:38:07.000000000","message":"Ack, makes sense. My idea is to let the user to override the default_parameters in the audit too. Adding also a mention to a new API microversion for this change.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"c81e8cf3f626b763ed84c0335d363f0ef1981215","unresolved":true,"context_lines":[{"line_number":82,"context_line":"   Audit Pipeline will fundamentally have the same structure as the Audit"},{"line_number":83,"context_line":"   resource, with a few key differences:"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"   * It will accept a list of audit templates as input parameters, each entry"},{"line_number":86,"context_line":"     representing a stage in the pipeline. Audit\u0027s goal and strategy won\u0027t be"},{"line_number":87,"context_line":"     defined directly in the Audit Pipeline resource, but in each of the Audit"},{"line_number":88,"context_line":"     Templates instead."}],"source_content_type":"text/x-rst","patch_set":3,"id":"664eb54b_38906853","line":85,"range":{"start_line":85,"start_character":0,"end_line":85,"end_character":2},"updated":"2025-12-15 11:47:43.000000000","message":"I think it will be hard to support any combination of goals/strategy in an audit pipeline. I\u0027d say we will need to do some kind of validation of the audits to be combined in an Audit Pipeline.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"d60ec3c328b41e4113923199cea0cd38eb8a96c4","unresolved":true,"context_lines":[{"line_number":82,"context_line":"   Audit Pipeline will fundamentally have the same structure as the Audit"},{"line_number":83,"context_line":"   resource, with a few key differences:"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"   * It will accept a list of audit templates as input parameters, each entry"},{"line_number":86,"context_line":"     representing a stage in the pipeline. Audit\u0027s goal and strategy won\u0027t be"},{"line_number":87,"context_line":"     defined directly in the Audit Pipeline resource, but in each of the Audit"},{"line_number":88,"context_line":"     Templates instead."}],"source_content_type":"text/x-rst","patch_set":3,"id":"6b050d8f_d6fb5d91","line":85,"range":{"start_line":85,"start_character":0,"end_line":85,"end_character":2},"in_reply_to":"169ef9cf_9a7559ed","updated":"2025-12-16 12:57:12.000000000","message":"i agree that we shouldn\u0027t block at API level, but we could document a set of combinations that are verified that generates a more solid output.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"185a230377ecebf916e8b877e0173329839cc16a","unresolved":true,"context_lines":[{"line_number":82,"context_line":"   Audit Pipeline will fundamentally have the same structure as the Audit"},{"line_number":83,"context_line":"   resource, with a few key differences:"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"   * It will accept a list of audit templates as input parameters, each entry"},{"line_number":86,"context_line":"     representing a stage in the pipeline. Audit\u0027s goal and strategy won\u0027t be"},{"line_number":87,"context_line":"     defined directly in the Audit Pipeline resource, but in each of the Audit"},{"line_number":88,"context_line":"     Templates instead."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3d67bc91_33aa6b60","line":85,"range":{"start_line":85,"start_character":0,"end_line":85,"end_character":2},"in_reply_to":"664eb54b_38906853","updated":"2025-12-15 19:41:37.000000000","message":"That\u0027s my feeling too, we would need to support just a few combinations, which we can test and guarantee that generate the expected output.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a52b2e227f8c4367bae4ac9ab169bcabd77c0f9a","unresolved":true,"context_lines":[{"line_number":82,"context_line":"   Audit Pipeline will fundamentally have the same structure as the Audit"},{"line_number":83,"context_line":"   resource, with a few key differences:"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"   * It will accept a list of audit templates as input parameters, each entry"},{"line_number":86,"context_line":"     representing a stage in the pipeline. Audit\u0027s goal and strategy won\u0027t be"},{"line_number":87,"context_line":"     defined directly in the Audit Pipeline resource, but in each of the Audit"},{"line_number":88,"context_line":"     Templates instead."}],"source_content_type":"text/x-rst","patch_set":3,"id":"169ef9cf_9a7559ed","line":85,"range":{"start_line":85,"start_character":0,"end_line":85,"end_character":2},"in_reply_to":"664eb54b_38906853","updated":"2025-12-15 20:51:21.000000000","message":"so long term we shoudl be able to support any combination or that indelicate that this is not the correct design.\n\n\nnow weather the output of the audit produce an action plan that make sense is another matter but im not convince we shoudl restrict the combination at the API level.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"16cf7e2ab78e3376fd42fff307a41bf61201a0ae","unresolved":true,"context_lines":[{"line_number":82,"context_line":"   Audit Pipeline will fundamentally have the same structure as the Audit"},{"line_number":83,"context_line":"   resource, with a few key differences:"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"   * It will accept a list of audit templates as input parameters, each entry"},{"line_number":86,"context_line":"     representing a stage in the pipeline. Audit\u0027s goal and strategy won\u0027t be"},{"line_number":87,"context_line":"     defined directly in the Audit Pipeline resource, but in each of the Audit"},{"line_number":88,"context_line":"     Templates instead."}],"source_content_type":"text/x-rst","patch_set":3,"id":"b05e997f_713ce537","line":85,"range":{"start_line":85,"start_character":0,"end_line":85,"end_character":2},"in_reply_to":"6b050d8f_d6fb5d91","updated":"2025-12-19 15:08:59.000000000","message":"+1 to documenting which are the tested combinations","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"1b1ea093ef0aaa46b2dae91f85154ec038f37c21","unresolved":true,"context_lines":[{"line_number":82,"context_line":"   Audit Pipeline will fundamentally have the same structure as the Audit"},{"line_number":83,"context_line":"   resource, with a few key differences:"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"   * It will accept a list of audit templates as input parameters, each entry"},{"line_number":86,"context_line":"     representing a stage in the pipeline. Audit\u0027s goal and strategy won\u0027t be"},{"line_number":87,"context_line":"     defined directly in the Audit Pipeline resource, but in each of the Audit"},{"line_number":88,"context_line":"     Templates instead."}],"source_content_type":"text/x-rst","patch_set":3,"id":"1c4557fe_6017e749","line":85,"range":{"start_line":85,"start_character":0,"end_line":85,"end_character":2},"in_reply_to":"6b050d8f_d6fb5d91","updated":"2025-12-18 16:24:01.000000000","message":"I think that letting the users to do nonsense combination from a functional point of view will lead to misunderstandings and users expecting different and likely inconsistent behaviors. IMO this will require to document what combination works and the expected behavior as Doug mentioned but I would also validate at API level too.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"35e8feb932e5d9aa3082199b895b43186e77f841","unresolved":true,"context_lines":[{"line_number":82,"context_line":"   Audit Pipeline will fundamentally have the same structure as the Audit"},{"line_number":83,"context_line":"   resource, with a few key differences:"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"   * It will accept a list of audit templates as input parameters, each entry"},{"line_number":86,"context_line":"     representing a stage in the pipeline. Audit\u0027s goal and strategy won\u0027t be"},{"line_number":87,"context_line":"     defined directly in the Audit Pipeline resource, but in each of the Audit"},{"line_number":88,"context_line":"     Templates instead."}],"source_content_type":"text/x-rst","patch_set":3,"id":"4d631dd5_b9bd2909","line":85,"range":{"start_line":85,"start_character":0,"end_line":85,"end_character":2},"in_reply_to":"b05e997f_713ce537","updated":"2025-12-22 18:58:20.000000000","message":"ACK for documenting the validated/testes combinations. The API validation seems more problematic since 1) we may block combination that are valid but we didn\u0027t tested 2) would block custom strategies combinations. I think that, in general, for any user that would try this new feature, is to go through documentation for better understanding how it works, and combinations that are supported.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"c81e8cf3f626b763ed84c0335d363f0ef1981215","unresolved":true,"context_lines":[{"line_number":85,"context_line":"   * It will accept a list of audit templates as input parameters, each entry"},{"line_number":86,"context_line":"     representing a stage in the pipeline. Audit\u0027s goal and strategy won\u0027t be"},{"line_number":87,"context_line":"     defined directly in the Audit Pipeline resource, but in each of the Audit"},{"line_number":88,"context_line":"     Templates instead."},{"line_number":89,"context_line":"   * It will support a single pipeline strategy, which will be the only"},{"line_number":90,"context_line":"     supported strategy for in this spec. This strategy will orchestrate the"},{"line_number":91,"context_line":"     execution of the pipeline, sequentially and mutating the cluster data"}],"source_content_type":"text/x-rst","patch_set":3,"id":"2581d99f_ee6ea821","line":88,"updated":"2025-12-15 11:47:43.000000000","message":"What about audit scopes coming from the Audit Templates? How would it be managed? Each audit use the scope coming from its template? I have doubts about that, i think there should be a single scope idea for the entire pipeline (that may end up creating individual scopes for each audit, see my comment below about it).","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"185a230377ecebf916e8b877e0173329839cc16a","unresolved":true,"context_lines":[{"line_number":85,"context_line":"   * It will accept a list of audit templates as input parameters, each entry"},{"line_number":86,"context_line":"     representing a stage in the pipeline. Audit\u0027s goal and strategy won\u0027t be"},{"line_number":87,"context_line":"     defined directly in the Audit Pipeline resource, but in each of the Audit"},{"line_number":88,"context_line":"     Templates instead."},{"line_number":89,"context_line":"   * It will support a single pipeline strategy, which will be the only"},{"line_number":90,"context_line":"     supported strategy for in this spec. This strategy will orchestrate the"},{"line_number":91,"context_line":"     execution of the pipeline, sequentially and mutating the cluster data"}],"source_content_type":"text/x-rst","patch_set":3,"id":"de364368_2105be9a","line":88,"in_reply_to":"2581d99f_ee6ea821","updated":"2025-12-15 19:41:37.000000000","message":"Yeah, from user, it should only support a single scope, which will be the initial one, after that, the scope is going to be mutate together with the solutions provided by each stage in the pipeline. I will update the spec to make this clear.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a52b2e227f8c4367bae4ac9ab169bcabd77c0f9a","unresolved":true,"context_lines":[{"line_number":85,"context_line":"   * It will accept a list of audit templates as input parameters, each entry"},{"line_number":86,"context_line":"     representing a stage in the pipeline. Audit\u0027s goal and strategy won\u0027t be"},{"line_number":87,"context_line":"     defined directly in the Audit Pipeline resource, but in each of the Audit"},{"line_number":88,"context_line":"     Templates instead."},{"line_number":89,"context_line":"   * It will support a single pipeline strategy, which will be the only"},{"line_number":90,"context_line":"     supported strategy for in this spec. This strategy will orchestrate the"},{"line_number":91,"context_line":"     execution of the pipeline, sequentially and mutating the cluster data"}],"source_content_type":"text/x-rst","patch_set":3,"id":"d5a7c79f_648940e6","line":88,"in_reply_to":"2581d99f_ee6ea821","updated":"2025-12-15 20:51:21.000000000","message":"maybe.\n\nif we are adding pipelines im not convince we shoudl restrict the stages of the pipeline to strategies that only operate on the output of the previous stage.\n\ni think the association of scopes and the propagation fo stages is really a property of the planner that is going to combine the inputs and update the models.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"d60ec3c328b41e4113923199cea0cd38eb8a96c4","unresolved":true,"context_lines":[{"line_number":85,"context_line":"   * It will accept a list of audit templates as input parameters, each entry"},{"line_number":86,"context_line":"     representing a stage in the pipeline. Audit\u0027s goal and strategy won\u0027t be"},{"line_number":87,"context_line":"     defined directly in the Audit Pipeline resource, but in each of the Audit"},{"line_number":88,"context_line":"     Templates instead."},{"line_number":89,"context_line":"   * It will support a single pipeline strategy, which will be the only"},{"line_number":90,"context_line":"     supported strategy for in this spec. This strategy will orchestrate the"},{"line_number":91,"context_line":"     execution of the pipeline, sequentially and mutating the cluster data"}],"source_content_type":"text/x-rst","patch_set":3,"id":"c147d9ce_e556c9e1","line":88,"in_reply_to":"d5a7c79f_648940e6","updated":"2025-12-16 12:57:12.000000000","message":"Ack, there could be different ways of executiong the pipeline, and the scope may or not be used in all stages. We shouldn\u0027t create an API that limits to a single execution method.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"ba767dcd04f106cadacdee2cbc07e17824c3d138","unresolved":true,"context_lines":[{"line_number":92,"context_line":"     model between each stage. The concept of a pipeline strategy can be"},{"line_number":93,"context_line":"     omitted from this initial implementation, and then added later if needed."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"   All existing strategies will be extended to handle mutable cluster data"},{"line_number":98,"context_line":"   models. Since most of the model handling is implemented in the BaseStrategy"}],"source_content_type":"text/x-rst","patch_set":3,"id":"50930fb9_d6fc04f1","line":95,"updated":"2025-12-12 15:59:19.000000000","message":"I think this will work for strategies that rely on instance metrics, but do we have any strategy that uses host-level metrics that could not account for the changes in the mutable model? I need to spend more time looking into this, but I think the VM Workload Consolidation Strategy https://docs.openstack.org/watcher/latest/strategies/vm_workload_consolidation.html could be affected?","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"d60ec3c328b41e4113923199cea0cd38eb8a96c4","unresolved":true,"context_lines":[{"line_number":92,"context_line":"     model between each stage. The concept of a pipeline strategy can be"},{"line_number":93,"context_line":"     omitted from this initial implementation, and then added later if needed."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"   All existing strategies will be extended to handle mutable cluster data"},{"line_number":98,"context_line":"   models. Since most of the model handling is implemented in the BaseStrategy"}],"source_content_type":"text/x-rst","patch_set":3,"id":"2377e388_391a097b","line":95,"in_reply_to":"3938c051_0f9fd5cf","updated":"2025-12-16 12:57:12.000000000","message":"The metric caching has not been considered in this spec yet, but seems to align with the approach of the mutable CDM. Since all strategies interfaces with datasources through a defined interface, we may be able to include the cache retrieval in a less invasive way.\nBy reading your proposal here I see that we may need better names for pipeline implementations, since we already have strategies and planners doing specific procedures.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"c81e8cf3f626b763ed84c0335d363f0ef1981215","unresolved":true,"context_lines":[{"line_number":92,"context_line":"     model between each stage. The concept of a pipeline strategy can be"},{"line_number":93,"context_line":"     omitted from this initial implementation, and then added later if needed."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"   All existing strategies will be extended to handle mutable cluster data"},{"line_number":98,"context_line":"   models. Since most of the model handling is implemented in the BaseStrategy"}],"source_content_type":"text/x-rst","patch_set":3,"id":"efc5884f_4b217535","line":95,"in_reply_to":"50930fb9_d6fc04f1","updated":"2025-12-15 11:47:43.000000000","message":"Also the workload_stabilization uses host level metrics https://docs.openstack.org/watcher/latest/strategies/workload-stabilization.html .\n\nI think the mutable cluster data model solves part of the problem of providing to the second audit a \"fixed\" input data to calculate but there is still the problem of the metrics. i.e. if we have host_maintenance + workload_stabilization, when the second audit is executed will get real data from prometheus for the host metrics that are not representative for the mutated cluster model. We\u0027ll need a solution for that too.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"185a230377ecebf916e8b877e0173329839cc16a","unresolved":true,"context_lines":[{"line_number":92,"context_line":"     model between each stage. The concept of a pipeline strategy can be"},{"line_number":93,"context_line":"     omitted from this initial implementation, and then added later if needed."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"   All existing strategies will be extended to handle mutable cluster data"},{"line_number":98,"context_line":"   models. Since most of the model handling is implemented in the BaseStrategy"}],"source_content_type":"text/x-rst","patch_set":3,"id":"0a461214_f35df4a3","line":95,"in_reply_to":"efc5884f_4b217535","updated":"2025-12-15 19:41:37.000000000","message":"Things that I don\u0027t plan in this spec are: 1) change current strategies and 2) Change how metrics are retrived/computed from datasources.\nBased on that I don\u0027t see how to avoid this problem, considering strategies that check host metrics. If we mutate the CDM to simulate instances in a different host, the host metrics will not represent that change. Also, workload_stabilization seems to be one of the most important strategies for this spec.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a52b2e227f8c4367bae4ac9ab169bcabd77c0f9a","unresolved":true,"context_lines":[{"line_number":92,"context_line":"     model between each stage. The concept of a pipeline strategy can be"},{"line_number":93,"context_line":"     omitted from this initial implementation, and then added later if needed."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"   All existing strategies will be extended to handle mutable cluster data"},{"line_number":98,"context_line":"   models. Since most of the model handling is implemented in the BaseStrategy"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3938c051_0f9fd5cf","line":95,"in_reply_to":"efc5884f_4b217535","updated":"2025-12-15 20:51:21.000000000","message":"so to make this work i think each stage need to produce 2 outputs. \n\na Draft Action Plan and a Mutated Model (or a set of deltas/metrics associated with the workload actions).\n\nThis facilitates Metric Caching. Strategies should be modified to check if a relevant metric (e.g., RAM) is already cached on the resource (Instance/ComputeNode) in the passed model. They should only retrieve new metrics if they are not already present. This minimizes API calls as the model passes down the pipeline and ensures each stage uses the same data if it has already been retived.\n\nthat means changing the way the strategies work so that they only retrieve new metrics for a resource if it is not in the cache.\n\nthe host_maintenance stagey does not use metrics at all so it would not enrich the compute node object or instance object with metrics but it does disable compute nodes.\n\nthe caccade planner would mutate the deatamode to update the host as disabel before passing it to the next stage but the compistie and linear planner would not.\n\nwhen the workload_stabilization model runs it does need to use host and instance metrics. all strategies would be modified to check if the metric they need is cached on the resource (instance, compute node) and retrieve it only if not cached. The workload stabilisation strategy would enrich the data-model with the ram info and return the mutated model and a sperate action plan\n\nin terms of scoping that where it gets a little tricky because there are a few different approaches.\n\nthe cascade planner would compute a scope for the second strategy based on the output of the previous audit.\n\nthe linear or composite planner would not scope the next stage at all\nsince they do not assume each step is depentn on the other.\nin that case the scope woudl be defeined in the audit template for each step.\n\nThe pipeline planner would need to then combined those action plans form each audit step.\n\nim my mind a mutable model should not be mutated by the stragies beyond the caching of metrics. if we similate the actoin or not shoudl be done by theh planner.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"c81e8cf3f626b763ed84c0335d363f0ef1981215","unresolved":true,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"   * Accept an optional pre-populated cluster data model, instead of getting"},{"line_number":103,"context_line":"     it from the collectors"},{"line_number":104,"context_line":"   * The mutable cluster data model will be updated after each strategy"},{"line_number":105,"context_line":"     execution, by the strategy pipeline implementation, based on the solution"},{"line_number":106,"context_line":"     returned on each stage."},{"line_number":107,"context_line":"   * In the mutable cluster data model, resources will be updated to reflect"},{"line_number":108,"context_line":"     the expected results of a previous solution. The cluster model scope will"},{"line_number":109,"context_line":"     be used to restrict the scope to the resource that were affected by the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"d56c4ca9_dc3519a7","line":106,"range":{"start_line":104,"start_character":0,"end_line":106,"end_character":28},"updated":"2025-12-15 11:47:43.000000000","message":"How would this manage the cases where the 1st strategy creates a vm migration with no destination (leaves nova to decide)? will it simply put the vm in any of the existing hosts?","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"35e8feb932e5d9aa3082199b895b43186e77f841","unresolved":true,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"   * Accept an optional pre-populated cluster data model, instead of getting"},{"line_number":103,"context_line":"     it from the collectors"},{"line_number":104,"context_line":"   * The mutable cluster data model will be updated after each strategy"},{"line_number":105,"context_line":"     execution, by the strategy pipeline implementation, based on the solution"},{"line_number":106,"context_line":"     returned on each stage."},{"line_number":107,"context_line":"   * In the mutable cluster data model, resources will be updated to reflect"},{"line_number":108,"context_line":"     the expected results of a previous solution. The cluster model scope will"},{"line_number":109,"context_line":"     be used to restrict the scope to the resource that were affected by the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"de46fa17_3157fccf","line":106,"range":{"start_line":104,"start_character":0,"end_line":106,"end_character":28},"in_reply_to":"4da56267_24f8f067","updated":"2025-12-22 18:58:20.000000000","message":"I think that not all scenarios will be covered here, but this is a good corner case to think about. I will add this Action was a noop to the next stage os the pipeline, which means that we can\u0027t do anything else other than include this migration in the final plan.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"185a230377ecebf916e8b877e0173329839cc16a","unresolved":true,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"   * Accept an optional pre-populated cluster data model, instead of getting"},{"line_number":103,"context_line":"     it from the collectors"},{"line_number":104,"context_line":"   * The mutable cluster data model will be updated after each strategy"},{"line_number":105,"context_line":"     execution, by the strategy pipeline implementation, based on the solution"},{"line_number":106,"context_line":"     returned on each stage."},{"line_number":107,"context_line":"   * In the mutable cluster data model, resources will be updated to reflect"},{"line_number":108,"context_line":"     the expected results of a previous solution. The cluster model scope will"},{"line_number":109,"context_line":"     be used to restrict the scope to the resource that were affected by the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"4da56267_24f8f067","line":106,"range":{"start_line":104,"start_character":0,"end_line":106,"end_character":28},"in_reply_to":"d56c4ca9_dc3519a7","updated":"2025-12-15 19:41:37.000000000","message":"The current proposal always consider that each VM has a destination, to properly update the CDM. In a second strategy in the pipeline, we would remove the maintanance node from the CDM, to avoid the workload balacing strategy to consider it as possible destination. This would reduce the scope of the strategies supported by this feature.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"c81e8cf3f626b763ed84c0335d363f0ef1981215","unresolved":true,"context_lines":[{"line_number":108,"context_line":"     the expected results of a previous solution. The cluster model scope will"},{"line_number":109,"context_line":"     be used to restrict the scope to the resource that were affected by the"},{"line_number":110,"context_line":"     previous solution."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"5. ``Pipeline Planner``"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"   A new planner will be created to optimize the combined action plan:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"491c220c_a509e1d8","line":111,"updated":"2025-12-15 11:47:43.000000000","message":"I have doubts also about the scope of the strategies. My understanding of the pipeline, given one of the examples we are considering, host_maintenance + workload_consolidation (or workload_stabilization) is that the second audit should only affect to the VMs which are migrated by the first audit. However, by default if we run a workload_stabilization or a workload_consolidation with the mutated model, it will easily provide an action plan that includes other VMs migration to achieve the goal for the cluster (or the entire scope set in Audit Pipeline). I think that\u0027d be incorrect and the only way to manage that would be that the scope of the second audit would be set dynamically by the first one to ensure only the VMs being migrated would be taken into account (unless we explicitely decide that the behavior is correct).","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"35e8feb932e5d9aa3082199b895b43186e77f841","unresolved":true,"context_lines":[{"line_number":108,"context_line":"     the expected results of a previous solution. The cluster model scope will"},{"line_number":109,"context_line":"     be used to restrict the scope to the resource that were affected by the"},{"line_number":110,"context_line":"     previous solution."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"5. ``Pipeline Planner``"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"   A new planner will be created to optimize the combined action plan:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"00bf4506_a3e1fb0c","line":111,"in_reply_to":"4519b08d_4525ca9f","updated":"2025-12-22 18:58:20.000000000","message":"This could be exlcusive to the pipeline executor, which could have its own configuration parameters, but these parameters are not part of this spec. We can document how the pipeline execution will handle scopes per execution mode, and that would be enough for now. Cascade can only consider an initial scope, and the rest will be up to the executor to build.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"185a230377ecebf916e8b877e0173329839cc16a","unresolved":true,"context_lines":[{"line_number":108,"context_line":"     the expected results of a previous solution. The cluster model scope will"},{"line_number":109,"context_line":"     be used to restrict the scope to the resource that were affected by the"},{"line_number":110,"context_line":"     previous solution."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"5. ``Pipeline Planner``"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"   A new planner will be created to optimize the combined action plan:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"490f0b18_76f4b559","line":111,"in_reply_to":"491c220c_a509e1d8","updated":"2025-12-15 19:41:37.000000000","message":"We could fix a single initial scope from user (which could be from 1. first strategy-template or 2. from the new audit-template API), all others from audit-template would be ignored, or an error returned to the user, mentioning that all other stages don\u0027t support scope.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a52b2e227f8c4367bae4ac9ab169bcabd77c0f9a","unresolved":true,"context_lines":[{"line_number":108,"context_line":"     the expected results of a previous solution. The cluster model scope will"},{"line_number":109,"context_line":"     be used to restrict the scope to the resource that were affected by the"},{"line_number":110,"context_line":"     previous solution."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"5. ``Pipeline Planner``"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"   A new planner will be created to optimize the combined action plan:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"4519b08d_4525ca9f","line":111,"in_reply_to":"491c220c_a509e1d8","updated":"2025-12-15 20:51:21.000000000","message":"so i htink that behvior need to be defiend in the spec but i dont think its an atibute of the pipeline or the stragey its an atribute fo the planner that orsctrates the pipeline.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a52b2e227f8c4367bae4ac9ab169bcabd77c0f9a","unresolved":false,"context_lines":[{"line_number":109,"context_line":"     be used to restrict the scope to the resource that were affected by the"},{"line_number":110,"context_line":"     previous solution."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"5. ``Pipeline Planner``"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"   A new planner will be created to optimize the combined action plan:"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"715618eb_ae31a59b","line":112,"in_reply_to":"1ea0e972_56c05b37","updated":"2025-12-15 20:51:21.000000000","message":"\u003e Document how pipeline failures are handled: partial execution recovery, rollback strategies, and error reporting mechanisms for multi-stage failures.\n\nThis is important to document but we do not execute pipelines we execute action plans and currently we are proposing that we produce only a single action plan.\n\nso we are not changing the execution phase only the planning phase.\n\nwhat we could do is have a pipeline produce a set of action planes for each phase\nand introduce the idea of dependencies between action plans.\n\nthat would give cancellation point to abort later stages but it would only make sense for the linear planner where each stragey is basically independent other the the over all sequence of the stagues.\n\nwith that said i dont think rooback is in socpe of this spec and we do not do error recovery in genreal","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"c81e8cf3f626b763ed84c0335d363f0ef1981215","unresolved":true,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"5. ``Pipeline Planner``"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"   A new planner will be created to optimize the combined action plan:"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"   * Merge the solutions from all stages into a single one"},{"line_number":117,"context_line":"   * Detect and eliminate redundant actions (e.g., migrate A→B then B→C"}],"source_content_type":"text/x-rst","patch_set":3,"id":"cc84d3d4_20e4ccd0","line":114,"range":{"start_line":114,"start_character":0,"end_line":114,"end_character":2},"updated":"2025-12-15 11:47:43.000000000","message":"You think that will be possible to have a common planner for any combination? I\u0027m asking because currently we have a couple of strategy-specific planners https://github.com/openstack/watcher/tree/master/watcher/decision_engine/planner so I\u0027m not entirely sure if it\u0027s feasible to create one that supports any combination.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"185a230377ecebf916e8b877e0173329839cc16a","unresolved":true,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"5. ``Pipeline Planner``"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"   A new planner will be created to optimize the combined action plan:"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"   * Merge the solutions from all stages into a single one"},{"line_number":117,"context_line":"   * Detect and eliminate redundant actions (e.g., migrate A→B then B→C"}],"source_content_type":"text/x-rst","patch_set":3,"id":"09a98445_f5ab1bf5","line":114,"range":{"start_line":114,"start_character":0,"end_line":114,"end_character":2},"in_reply_to":"cc84d3d4_20e4ccd0","updated":"2025-12-15 19:41:37.000000000","message":"looking at the available ones, which are basically weighers and a \"keep original ordering\" planner, we could build one that works for a specific combination of strategies.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"c81e8cf3f626b763ed84c0335d363f0ef1981215","unresolved":true,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"   A new planner will be created to optimize the combined action plan:"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"   * Merge the solutions from all stages into a single one"},{"line_number":117,"context_line":"   * Detect and eliminate redundant actions (e.g., migrate A→B then B→C"},{"line_number":118,"context_line":"     becomes A→C)"},{"line_number":119,"context_line":"   * Maintain action dependencies and parallelization opportunities"}],"source_content_type":"text/x-rst","patch_set":3,"id":"574dda7e_7c2cfa76","line":116,"range":{"start_line":116,"start_character":0,"end_line":116,"end_character":2},"updated":"2025-12-15 11:47:43.000000000","message":"How the efficacy indicators will be managed? they will also be merged into a single efficacy indicator list? or actionplans will have one lists of efficacy indicators per audit?","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"185a230377ecebf916e8b877e0173329839cc16a","unresolved":true,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"   A new planner will be created to optimize the combined action plan:"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"   * Merge the solutions from all stages into a single one"},{"line_number":117,"context_line":"   * Detect and eliminate redundant actions (e.g., migrate A→B then B→C"},{"line_number":118,"context_line":"     becomes A→C)"},{"line_number":119,"context_line":"   * Maintain action dependencies and parallelization opportunities"}],"source_content_type":"text/x-rst","patch_set":3,"id":"b843f992_2b8862de","line":116,"range":{"start_line":116,"start_character":0,"end_line":116,"end_character":2},"in_reply_to":"574dda7e_7c2cfa76","updated":"2025-12-15 19:41:37.000000000","message":"I was originally thinking on just merging all from all solutions, but I didn\u0027t stop to think how it will end up for user.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"35e8feb932e5d9aa3082199b895b43186e77f841","unresolved":true,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"   A new planner will be created to optimize the combined action plan:"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"   * Merge the solutions from all stages into a single one"},{"line_number":117,"context_line":"   * Detect and eliminate redundant actions (e.g., migrate A→B then B→C"},{"line_number":118,"context_line":"     becomes A→C)"},{"line_number":119,"context_line":"   * Maintain action dependencies and parallelization opportunities"}],"source_content_type":"text/x-rst","patch_set":3,"id":"e8958f9a_33664e82","line":116,"range":{"start_line":116,"start_character":0,"end_line":116,"end_character":2},"in_reply_to":"7988b985_45f4702f","updated":"2025-12-22 18:58:20.000000000","message":"We could build a new global efficacy indicator based on the final solution, or for now, just build a list with all, and merge values for keys that match. The value of total migration may be different from all in the action plan, since we can optimize, but still a value indicator.\n@Joan, yes, there will be different indicators since there are different goals, but I think that still works, since they will be a list of indicadors for a major goal.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"16cf7e2ab78e3376fd42fff307a41bf61201a0ae","unresolved":true,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"   A new planner will be created to optimize the combined action plan:"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"   * Merge the solutions from all stages into a single one"},{"line_number":117,"context_line":"   * Detect and eliminate redundant actions (e.g., migrate A→B then B→C"},{"line_number":118,"context_line":"     becomes A→C)"},{"line_number":119,"context_line":"   * Maintain action dependencies and parallelization opportunities"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7988b985_45f4702f","line":116,"range":{"start_line":116,"start_character":0,"end_line":116,"end_character":2},"in_reply_to":"b843f992_2b8862de","updated":"2025-12-19 15:08:59.000000000","message":"I feel like the concept of the efficacy indicator looses value for a pipeline, since there likely won\u0027t be a single goal being optimized. IMO displaying the indicators for each stage is a reasonable solution","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a52b2e227f8c4367bae4ac9ab169bcabd77c0f9a","unresolved":true,"context_lines":[{"line_number":181,"context_line":"Data model impact"},{"line_number":182,"context_line":"-----------------"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"``Audit Template Extension``"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"Add a new optional field to the Audit Template model, that will be used to pass"},{"line_number":187,"context_line":"parameters to the strategy::"}],"source_content_type":"text/x-rst","patch_set":3,"id":"a21faeb4_209af568","line":184,"in_reply_to":"5d1b58aa_99da2546","updated":"2025-12-15 20:51:21.000000000","message":"\u003e Document how existing audits and audit templates will continue to work, and what changes (if any) existing users need to make when upgrading.\n\n\nso adding a new field like this need a new api microvvrion\n\nad the database level this will have to be a nullable filed and null by default\n\nbut we do need to sepcify the interaction of this new filed with a standard audit\nsepcific how we handel the same key being defiend in both the audit and audit template\n\ndoe the audit take precedence or is it a 400 bad request.\n\na 409 conflict is not quite correct semanticly but that woudl be the other option.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a52b2e227f8c4367bae4ac9ab169bcabd77c0f9a","unresolved":true,"context_lines":[{"line_number":195,"context_line":"* ``id``: Integer primary key"},{"line_number":196,"context_line":"* ``uuid``: UUID"},{"line_number":197,"context_line":"* ``name``: String"},{"line_number":198,"context_line":"* ``audit_type``: String (ONESHOT, CONTINUOUS, EVENT)"},{"line_number":199,"context_line":"* ``state``: String (PENDING, ONGOING, SUCCEEDED, FAILED, CANCELLED, SUSPENDED)"},{"line_number":200,"context_line":"* ``stages``: List"},{"line_number":201,"context_line":"* ``interval``: String (nullable)"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5e8ae12c_1f265295","line":198,"updated":"2025-12-15 20:51:21.000000000","message":"the pipeline object feels like ti shoudl only have\n\n*  ``id``: Integer primary key\n* ``uuid``: UUID\n* ``name``: String\n* ``state``: String (PENDING, ONGOING, SUCCEEDED, FAILED, CANCELLED, SUSPENDED)\n* ``stages``: List\n* ``auto_trigger``: Boolean\n* ``hostname``: String (nullable)\n\n\nwith the rest \n\n* ``audit_type``: String (ONESHOT, CONTINUOUS, EVENT)\n* ``interval``: String (nullable)\n* ``next_run_time``: DateTime (nullable)\n* ``start_time``: DateTime (nullable)\n* ``end_time``: DateTime (nullable)\n\n\ni understand why your propsoing this but i dislike that we are copuling the trigger with the logical pipeline object again.\n\nregarding `audit_type`\nan audit pipeline is not a audit it is a composition of audits\n\ni.e. its not an `is a` (inheritance) relationship  its a `has a` (compostion) relationship\n\na pipeline composes a series of audits to compute 1 or more action plans\npotentially with dependencies dependign on the planner used.\n\nso this shoudl be `pipeline_type`, `schedule_type`or just `type`\n\naudit_type implies the `IS A` relsationship which we shoudl aviod.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"d60ec3c328b41e4113923199cea0cd38eb8a96c4","unresolved":true,"context_lines":[{"line_number":195,"context_line":"* ``id``: Integer primary key"},{"line_number":196,"context_line":"* ``uuid``: UUID"},{"line_number":197,"context_line":"* ``name``: String"},{"line_number":198,"context_line":"* ``audit_type``: String (ONESHOT, CONTINUOUS, EVENT)"},{"line_number":199,"context_line":"* ``state``: String (PENDING, ONGOING, SUCCEEDED, FAILED, CANCELLED, SUSPENDED)"},{"line_number":200,"context_line":"* ``stages``: List"},{"line_number":201,"context_line":"* ``interval``: String (nullable)"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fe02130b_2644421f","line":198,"in_reply_to":"5e8ae12c_1f265295","updated":"2025-12-16 12:57:12.000000000","message":"I agree that decloupling is a better approach, but at the same time it feels that we are introducing a new api that is misaligned with the existing one (unless we change both to have the same behavior). \nDespite from api, you mentioned about the composition of audits here, and this is a implementation detail that wasn\u0027t proposed here: 1) If internally, each stage will become a new Audit (and if yes, at which moment and which type of Audit - it may be a audit ONESHOT created at the moment that pipeline-audit starts) or 2) a single audit-pipeline object that holds a single state, status_message and one (or a list) of action-plans as results of its execution).\nWould user require to check individual \"stage\" audits from a pipeline-audit?","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a52b2e227f8c4367bae4ac9ab169bcabd77c0f9a","unresolved":false,"context_lines":[{"line_number":273,"context_line":"* Normal response: 204 No Content"},{"line_number":274,"context_line":"* Error responses: 404 Not Found"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"Security impact"},{"line_number":277,"context_line":"---------------"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3fe2ffec_0b82adb9","line":276,"in_reply_to":"5e212141_b0481182","updated":"2025-12-15 20:51:21.000000000","message":"not relevent","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a52b2e227f8c4367bae4ac9ab169bcabd77c0f9a","unresolved":false,"context_lines":[{"line_number":288,"context_line":""},{"line_number":289,"context_line":"None"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"Performance Impact"},{"line_number":292,"context_line":"------------------"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"* Deep copies of cluster data models are created for each stage"}],"source_content_type":"text/x-rst","patch_set":3,"id":"efb8b5f8_c181de62","line":291,"in_reply_to":"995cdd4a_42c68ff5","updated":"2025-12-15 20:51:21.000000000","message":"\u003e Add specific performance requirements or benchmarks: acceptable execution time overhead, memory usage limits, and scaling considerations for large cluster models.\n\n\nso while i don\u0027t agree with the recommendation our data modesl are large and i agree with the scaling concern.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a52b2e227f8c4367bae4ac9ab169bcabd77c0f9a","unresolved":true,"context_lines":[{"line_number":291,"context_line":"Performance Impact"},{"line_number":292,"context_line":"------------------"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"* Deep copies of cluster data models are created for each stage"},{"line_number":295,"context_line":"* The pipeline planner optimization phase adds computational overhead but"},{"line_number":296,"context_line":"  results in more efficient action plan execution"},{"line_number":297,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"6a664db3_8667c58c","line":294,"updated":"2025-12-15 20:51:21.000000000","message":"we likely cant afford to do that for each stage but we can do it once for the pipeline instance and reuse it i think.","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"5d213aca61b3cd32d1729bc64d199b2c2e5ba791","unresolved":false,"context_lines":[{"line_number":291,"context_line":"Performance Impact"},{"line_number":292,"context_line":"------------------"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"* Deep copies of cluster data models are created for each stage"},{"line_number":295,"context_line":"* The pipeline planner optimization phase adds computational overhead but"},{"line_number":296,"context_line":"  results in more efficient action plan execution"},{"line_number":297,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"bf67c0f9_b66fdabb","line":294,"in_reply_to":"6a664db3_8667c58c","updated":"2025-12-17 18:38:07.000000000","message":"Removing this part, it was proposed by the model, but it is an implementation detail tbd","commit_id":"eccc9d38df1ee83d5725225fe8bca42fc988c1d3"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"1b1ea093ef0aaa46b2dae91f85154ec038f37c21","unresolved":true,"context_lines":[{"line_number":97,"context_line":"     that the next stage can be executed based on the expected state of the"},{"line_number":98,"context_line":"     cluster after the previous stage."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"3. ``Pipeline Execution Modes``"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"   The pipeline execution mode will be handle the inputs and outputs to/from"},{"line_number":103,"context_line":"   each stage of the pipeline, which will define different strategies of"}],"source_content_type":"text/x-rst","patch_set":4,"id":"76aecd7e_3f0ad47c","line":100,"range":{"start_line":100,"start_character":0,"end_line":100,"end_character":2},"updated":"2025-12-18 16:24:01.000000000","message":"So from here, I understand there will be something like a `Watcher audit pipeline executors` which will take care of triggering the audits and doing all the intermediate simulations, data cache, model transformations, etc... and calling the pipeline planner once it has all the solutions, right?","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"35e8feb932e5d9aa3082199b895b43186e77f841","unresolved":true,"context_lines":[{"line_number":97,"context_line":"     that the next stage can be executed based on the expected state of the"},{"line_number":98,"context_line":"     cluster after the previous stage."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"3. ``Pipeline Execution Modes``"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"   The pipeline execution mode will be handle the inputs and outputs to/from"},{"line_number":103,"context_line":"   each stage of the pipeline, which will define different strategies of"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fc81b01e_2683ba3f","line":100,"range":{"start_line":100,"start_character":0,"end_line":100,"end_character":2},"in_reply_to":"76aecd7e_3f0ad47c","updated":"2025-12-22 18:58:20.000000000","message":"Correct, which can be select when creating the audit pipeline. The expected planner for now would be a single one, but it can also be linked to the pipeline executor as today we have strategy -\u003e planner.","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a06f38a147f808dba1653c39adfe9efebfed4e14","unresolved":false,"context_lines":[{"line_number":107,"context_line":"     solutions for each stage. It can take advantage of the metric data cache"},{"line_number":108,"context_line":"     to avoid redundant calls to datasource APIs. In the end, it merges the"},{"line_number":109,"context_line":"     solutions from all stages into a single action plan, providing simple"},{"line_number":110,"context_line":"     optimizations."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"   * Cascade: runs each stage sequentially and simulates the expected state of"},{"line_number":113,"context_line":"     the cluster based on the previous stage solution, including metrics cache"}],"source_content_type":"text/x-rst","patch_set":4,"id":"8a9acd77_d5a58f7a","line":110,"updated":"2025-12-18 18:29:27.000000000","message":"ya it could be one action plan or one per stage.\n\nthat can even be configuable but im fine with the curent proposl","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"1b1ea093ef0aaa46b2dae91f85154ec038f37c21","unresolved":true,"context_lines":[{"line_number":116,"context_line":"     executed."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":".. note::"},{"line_number":119,"context_line":"   The Cascade execution mode is the one that covers most of the use cases, and"},{"line_number":120,"context_line":"   will be the main focus of this specification. The Linear execution mode may"},{"line_number":121,"context_line":"   be added in the current one or in future implementations."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"4. ``Metric Data Cache``"}],"source_content_type":"text/x-rst","patch_set":4,"id":"a509fbec_ffdb3c29","line":120,"range":{"start_line":119,"start_character":3,"end_line":120,"end_character":47},"updated":"2025-12-18 16:24:01.000000000","message":"+1 I agree that cascade is the most useful part and should be the focus.","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"35e8feb932e5d9aa3082199b895b43186e77f841","unresolved":false,"context_lines":[{"line_number":116,"context_line":"     executed."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":".. note::"},{"line_number":119,"context_line":"   The Cascade execution mode is the one that covers most of the use cases, and"},{"line_number":120,"context_line":"   will be the main focus of this specification. The Linear execution mode may"},{"line_number":121,"context_line":"   be added in the current one or in future implementations."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"4. ``Metric Data Cache``"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ce80128c_d9661fbb","line":120,"range":{"start_line":119,"start_character":3,"end_line":120,"end_character":47},"in_reply_to":"a509fbec_ffdb3c29","updated":"2025-12-22 18:58:20.000000000","message":"Acknowledged","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"1b1ea093ef0aaa46b2dae91f85154ec038f37c21","unresolved":true,"context_lines":[{"line_number":120,"context_line":"   will be the main focus of this specification. The Linear execution mode may"},{"line_number":121,"context_line":"   be added in the current one or in future implementations."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"4. ``Metric Data Cache``"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"   The metric data cache will store resource metrics retrieved by previous"},{"line_number":126,"context_line":"   strategies within the same pipeline. It can be used to simulate an expected"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f9ba076_99e55f7a","line":123,"range":{"start_line":123,"start_character":0,"end_line":123,"end_character":2},"updated":"2025-12-18 16:24:01.000000000","message":"You removed the section for `Mutable Cluster Data Model` section. I\u0027d say it\u0027s worthy to keep, maybe together with the Metric Data Cache or independent.","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"35e8feb932e5d9aa3082199b895b43186e77f841","unresolved":false,"context_lines":[{"line_number":120,"context_line":"   will be the main focus of this specification. The Linear execution mode may"},{"line_number":121,"context_line":"   be added in the current one or in future implementations."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"4. ``Metric Data Cache``"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"   The metric data cache will store resource metrics retrieved by previous"},{"line_number":126,"context_line":"   strategies within the same pipeline. It can be used to simulate an expected"}],"source_content_type":"text/x-rst","patch_set":4,"id":"c4a96fec_db37672f","line":123,"range":{"start_line":123,"start_character":0,"end_line":123,"end_character":2},"in_reply_to":"5f9ba076_99e55f7a","updated":"2025-12-22 18:58:20.000000000","message":"Ooops, it wasn\u0027t supposed to be removed. I blame claude for that","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"16cf7e2ab78e3376fd42fff307a41bf61201a0ae","unresolved":true,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"6. ``Strategy Scopes``"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"   Individual scopes for each strategy can be defined in the Audit Template,"},{"line_number":147,"context_line":"   althought not all Audit Pipeline modes will make use of all of them. For"},{"line_number":148,"context_line":"   example, the Cascade execution mode should only consider an initial scope,"},{"line_number":149,"context_line":"   from the first stage, which will be then updated based on following stage"}],"source_content_type":"text/x-rst","patch_set":4,"id":"95817be9_9f115075","line":146,"updated":"2025-12-19 15:08:59.000000000","message":"+1, when implementing this, if we want to work with the zone migration strategy we\u0027ll need to fix https://bugs.launchpad.net/watcher/+bug/2119957","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"1b1ea093ef0aaa46b2dae91f85154ec038f37c21","unresolved":true,"context_lines":[{"line_number":146,"context_line":"   Individual scopes for each strategy can be defined in the Audit Template,"},{"line_number":147,"context_line":"   althought not all Audit Pipeline modes will make use of all of them. For"},{"line_number":148,"context_line":"   example, the Cascade execution mode should only consider an initial scope,"},{"line_number":149,"context_line":"   from the first stage, which will be then updated based on following stage"},{"line_number":150,"context_line":"   solutions, while a Linear execution mode should consider individual scopes"},{"line_number":151,"context_line":"   for each stage."},{"line_number":152,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"2a992827_c2f009a3","line":149,"range":{"start_line":149,"start_character":3,"end_line":149,"end_character":23},"updated":"2025-12-18 16:24:01.000000000","message":"WFM, we could also have a scope field in the AuditPipeline for this case for clarity.","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"35e8feb932e5d9aa3082199b895b43186e77f841","unresolved":true,"context_lines":[{"line_number":146,"context_line":"   Individual scopes for each strategy can be defined in the Audit Template,"},{"line_number":147,"context_line":"   althought not all Audit Pipeline modes will make use of all of them. For"},{"line_number":148,"context_line":"   example, the Cascade execution mode should only consider an initial scope,"},{"line_number":149,"context_line":"   from the first stage, which will be then updated based on following stage"},{"line_number":150,"context_line":"   solutions, while a Linear execution mode should consider individual scopes"},{"line_number":151,"context_line":"   for each stage."},{"line_number":152,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"ded95927_eaec2e71","line":149,"range":{"start_line":149,"start_character":3,"end_line":149,"end_character":23},"in_reply_to":"2a992827_c2f009a3","updated":"2025-12-22 18:58:20.000000000","message":"Hum, maybe, it seems already confusing for users. Sometimes it will be configured at the templates, sometimes at audit pipeline. Maybe if we keep only in the template and have an API validation, to guarantee that only one scope was provided (for cascade mode)","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"4d3800a974931ac1c0a3c7cbf7e0e20bcebafe38","unresolved":false,"context_lines":[{"line_number":146,"context_line":"   Individual scopes for each strategy can be defined in the Audit Template,"},{"line_number":147,"context_line":"   althought not all Audit Pipeline modes will make use of all of them. For"},{"line_number":148,"context_line":"   example, the Cascade execution mode should only consider an initial scope,"},{"line_number":149,"context_line":"   from the first stage, which will be then updated based on following stage"},{"line_number":150,"context_line":"   solutions, while a Linear execution mode should consider individual scopes"},{"line_number":151,"context_line":"   for each stage."},{"line_number":152,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"d8953bf0_e0e37ce0","line":149,"range":{"start_line":149,"start_character":3,"end_line":149,"end_character":23},"in_reply_to":"ded95927_eaec2e71","updated":"2026-01-09 17:30:38.000000000","message":"ack","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"1b1ea093ef0aaa46b2dae91f85154ec038f37c21","unresolved":true,"context_lines":[{"line_number":216,"context_line":"  strategies one by one, which today is done by the operator. However, this"},{"line_number":217,"context_line":"  approach still requires each strategy solution to be executed before"},{"line_number":218,"context_line":"  computing the next strategy solution."},{"line_number":219,"context_line":"* Watcher could be extended to support Audit creation as a final Action from a"},{"line_number":220,"context_line":"  given Action Plan, which can be scheduler to run after a specific amount of"},{"line_number":221,"context_line":"  time."},{"line_number":222,"context_line":"* For each use case, a new strategy could be created to implement the"},{"line_number":223,"context_line":"  combination of the required strategies algorithms, reusing part of the code"},{"line_number":224,"context_line":"  that exists today."}],"source_content_type":"text/x-rst","patch_set":4,"id":"d95bf966_c020f8ee","line":221,"range":{"start_line":219,"start_character":0,"end_line":221,"end_character":7},"updated":"2025-12-18 16:24:01.000000000","message":"Actually, this may be an alternative for some use cases... it would depend on the execution of the 1st action plan to run the 2nd audit, but it may be an easy implementation for some of the cases. However, your proposal provides a single view of the resulting solution and can produce optimizations of the resulting solution which is nice).","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"35e8feb932e5d9aa3082199b895b43186e77f841","unresolved":false,"context_lines":[{"line_number":216,"context_line":"  strategies one by one, which today is done by the operator. However, this"},{"line_number":217,"context_line":"  approach still requires each strategy solution to be executed before"},{"line_number":218,"context_line":"  computing the next strategy solution."},{"line_number":219,"context_line":"* Watcher could be extended to support Audit creation as a final Action from a"},{"line_number":220,"context_line":"  given Action Plan, which can be scheduler to run after a specific amount of"},{"line_number":221,"context_line":"  time."},{"line_number":222,"context_line":"* For each use case, a new strategy could be created to implement the"},{"line_number":223,"context_line":"  combination of the required strategies algorithms, reusing part of the code"},{"line_number":224,"context_line":"  that exists today."}],"source_content_type":"text/x-rst","patch_set":4,"id":"a12cbb10_32b83deb","line":221,"range":{"start_line":219,"start_character":0,"end_line":221,"end_character":7},"in_reply_to":"d95bf966_c020f8ee","updated":"2025-12-22 18:58:20.000000000","message":"Ack, i can clarify that this proposal is not optmized as the on in the spec.","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"1b1ea093ef0aaa46b2dae91f85154ec038f37c21","unresolved":true,"context_lines":[{"line_number":219,"context_line":"* Watcher could be extended to support Audit creation as a final Action from a"},{"line_number":220,"context_line":"  given Action Plan, which can be scheduler to run after a specific amount of"},{"line_number":221,"context_line":"  time."},{"line_number":222,"context_line":"* For each use case, a new strategy could be created to implement the"},{"line_number":223,"context_line":"  combination of the required strategies algorithms, reusing part of the code"},{"line_number":224,"context_line":"  that exists today."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"Data model impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"0dffad78_ffa315d2","line":223,"range":{"start_line":222,"start_character":21,"end_line":223,"end_character":51},"updated":"2025-12-18 16:24:01.000000000","message":"I\u0027d say to improve an existing strategy to cover the new use case, but it\u0027s not very different 😊","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"35e8feb932e5d9aa3082199b895b43186e77f841","unresolved":false,"context_lines":[{"line_number":219,"context_line":"* Watcher could be extended to support Audit creation as a final Action from a"},{"line_number":220,"context_line":"  given Action Plan, which can be scheduler to run after a specific amount of"},{"line_number":221,"context_line":"  time."},{"line_number":222,"context_line":"* For each use case, a new strategy could be created to implement the"},{"line_number":223,"context_line":"  combination of the required strategies algorithms, reusing part of the code"},{"line_number":224,"context_line":"  that exists today."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"Data model impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"eedb984d_43d64856","line":223,"range":{"start_line":222,"start_character":21,"end_line":223,"end_character":51},"in_reply_to":"0dffad78_ffa315d2","updated":"2025-12-22 18:58:20.000000000","message":"yeah, depends on the strategy I think. I was thinking like: move strategy execution to a base classe, and reuse in the original strategy, and in a new strategy that can be a combination of multiple ones. But I will add you comment to this alternative, yes.","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"16cf7e2ab78e3376fd42fff307a41bf61201a0ae","unresolved":true,"context_lines":[{"line_number":231,"context_line":"Add a new optional field to the Audit Template model, that will be used to pass"},{"line_number":232,"context_line":"parameters to the strategy::"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    parameters \u003d Dict (nullable)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"``New Audit Pipeline Resource``"},{"line_number":237,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"c3847d83_62ebfa44","line":234,"updated":"2025-12-19 15:08:59.000000000","message":"in the `Key Component` section this field is called `default_parameters`","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"35e8feb932e5d9aa3082199b895b43186e77f841","unresolved":false,"context_lines":[{"line_number":231,"context_line":"Add a new optional field to the Audit Template model, that will be used to pass"},{"line_number":232,"context_line":"parameters to the strategy::"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    parameters \u003d Dict (nullable)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"``New Audit Pipeline Resource``"},{"line_number":237,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"bd72fb0a_19b2a19e","line":234,"in_reply_to":"c3847d83_62ebfa44","updated":"2025-12-22 18:58:20.000000000","message":"yes, thanks!","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"16cf7e2ab78e3376fd42fff307a41bf61201a0ae","unresolved":true,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"``New Audit Pipeline Resource``"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"Create a new ``AuditPipeline`` model with the following fields:"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"* ``id``: Integer primary key"},{"line_number":241,"context_line":"* ``uuid``: UUID"}],"source_content_type":"text/x-rst","patch_set":4,"id":"2e9825e0_94a49dc0","line":238,"updated":"2025-12-19 15:08:59.000000000","message":"I got the impression from the Key Component sections that the user would be able to override the default_parameters when creating the audit pipeline, is that the intention?","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"35e8feb932e5d9aa3082199b895b43186e77f841","unresolved":true,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"``New Audit Pipeline Resource``"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"Create a new ``AuditPipeline`` model with the following fields:"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"* ``id``: Integer primary key"},{"line_number":241,"context_line":"* ``uuid``: UUID"}],"source_content_type":"text/x-rst","patch_set":4,"id":"c34bfdab_5c565129","line":238,"in_reply_to":"2e9825e0_94a49dc0","updated":"2025-12-22 18:58:20.000000000","message":"No, this approach is for Audits, not Audit Pipeline. If the user provides a audit-template with default_parameters, it can use the default or override them using current `input_parameters`","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"8669a7b6ef5ff99afd7fbdd1da6ab8affd892cba","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"``New Audit Pipeline Resource``"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"Create a new ``AuditPipeline`` model with the following fields:"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"* ``id``: Integer primary key"},{"line_number":241,"context_line":"* ``uuid``: UUID"}],"source_content_type":"text/x-rst","patch_set":4,"id":"a1885f06_14c8397f","line":238,"in_reply_to":"c34bfdab_5c565129","updated":"2026-01-05 11:27:32.000000000","message":"ack, that makes sense, thanks!","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"1b1ea093ef0aaa46b2dae91f85154ec038f37c21","unresolved":true,"context_lines":[{"line_number":241,"context_line":"* ``uuid``: UUID"},{"line_number":242,"context_line":"* ``name``: String"},{"line_number":243,"context_line":"* ``execution_mode``: String (linear, cascade)"},{"line_number":244,"context_line":"* ``state``: String (PENDING, ONGOING, SUCCEEDED, FAILED, CANCELLED, SUSPENDED)"},{"line_number":245,"context_line":"* ``stages``: List of Audit Template UUIDs"},{"line_number":246,"context_line":"* ``auto_trigger``: Boolean"},{"line_number":247,"context_line":"* ``hostname``: String (nullable)"}],"source_content_type":"text/x-rst","patch_set":4,"id":"08cb3183_83ec04e7","line":244,"range":{"start_line":244,"start_character":0,"end_line":244,"end_character":2},"updated":"2025-12-18 16:24:01.000000000","message":"Whould this require a new state for an AuditPipeline which has no AuditTrigger? UNSCHEDULLED or similar?","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a06f38a147f808dba1653c39adfe9efebfed4e14","unresolved":true,"context_lines":[{"line_number":241,"context_line":"* ``uuid``: UUID"},{"line_number":242,"context_line":"* ``name``: String"},{"line_number":243,"context_line":"* ``execution_mode``: String (linear, cascade)"},{"line_number":244,"context_line":"* ``state``: String (PENDING, ONGOING, SUCCEEDED, FAILED, CANCELLED, SUSPENDED)"},{"line_number":245,"context_line":"* ``stages``: List of Audit Template UUIDs"},{"line_number":246,"context_line":"* ``auto_trigger``: Boolean"},{"line_number":247,"context_line":"* ``hostname``: String (nullable)"}],"source_content_type":"text/x-rst","patch_set":4,"id":"6dc25c80_69f692ce","line":244,"range":{"start_line":244,"start_character":0,"end_line":244,"end_character":2},"in_reply_to":"08cb3183_83ec04e7","updated":"2025-12-18 18:29:27.000000000","message":"ya we could add that.\nor perhaps \"READY\"  as in the pipelien is ready to be triggere but not activly runing thoguh the state machicne","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"35e8feb932e5d9aa3082199b895b43186e77f841","unresolved":true,"context_lines":[{"line_number":241,"context_line":"* ``uuid``: UUID"},{"line_number":242,"context_line":"* ``name``: String"},{"line_number":243,"context_line":"* ``execution_mode``: String (linear, cascade)"},{"line_number":244,"context_line":"* ``state``: String (PENDING, ONGOING, SUCCEEDED, FAILED, CANCELLED, SUSPENDED)"},{"line_number":245,"context_line":"* ``stages``: List of Audit Template UUIDs"},{"line_number":246,"context_line":"* ``auto_trigger``: Boolean"},{"line_number":247,"context_line":"* ``hostname``: String (nullable)"}],"source_content_type":"text/x-rst","patch_set":4,"id":"09778615_67494169","line":244,"range":{"start_line":244,"start_character":0,"end_line":244,"end_character":2},"in_reply_to":"6dc25c80_69f692ce","updated":"2025-12-22 18:58:20.000000000","message":"It think that will be needed yes, since it is a totally new state of the audit. It could IDLE, READY, not sure yet, I will come with something.","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"1b1ea093ef0aaa46b2dae91f85154ec038f37c21","unresolved":true,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"``AuditTrigger``"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"A new ``AuditTrigger`` model, that will hold trigger information for an Audit"},{"line_number":252,"context_line":"Pipeline resource, and can be later used Audits too. It will have the"},{"line_number":253,"context_line":"following fields:"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"2777f96f_2bb708f1","line":251,"range":{"start_line":251,"start_character":8,"end_line":251,"end_character":20},"updated":"2025-12-18 16:24:01.000000000","message":"This is interesting.","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"16cf7e2ab78e3376fd42fff307a41bf61201a0ae","unresolved":true,"context_lines":[{"line_number":271,"context_line":"* Method: POST, PATCH"},{"line_number":272,"context_line":"* URL: ``/v1/audit_templates``, ``/v1/audit_templates/{uuid}``"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"Request body (create/update)::"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    {"},{"line_number":277,"context_line":"        \"name\": \"zone-migration-template\","}],"source_content_type":"text/x-rst","patch_set":4,"id":"496718ca_13a6a503","line":274,"updated":"2025-12-19 15:08:59.000000000","message":"do we support any update operation now for audit templates? I\u0027m not sure we want to add support for that, allowing changes to the template default parameters might make understanding the behaviour of earlier audits more difficult","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"35e8feb932e5d9aa3082199b895b43186e77f841","unresolved":true,"context_lines":[{"line_number":271,"context_line":"* Method: POST, PATCH"},{"line_number":272,"context_line":"* URL: ``/v1/audit_templates``, ``/v1/audit_templates/{uuid}``"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"Request body (create/update)::"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    {"},{"line_number":277,"context_line":"        \"name\": \"zone-migration-template\","}],"source_content_type":"text/x-rst","patch_set":4,"id":"a8d74b9e_71fca6b4","line":274,"in_reply_to":"496718ca_13a6a503","updated":"2025-12-22 18:58:20.000000000","message":"yes, it is supported today, you can update the strategy/goal for the template. We will additionally suport update for default parameters.","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"8669a7b6ef5ff99afd7fbdd1da6ab8affd892cba","unresolved":false,"context_lines":[{"line_number":271,"context_line":"* Method: POST, PATCH"},{"line_number":272,"context_line":"* URL: ``/v1/audit_templates``, ``/v1/audit_templates/{uuid}``"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"Request body (create/update)::"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    {"},{"line_number":277,"context_line":"        \"name\": \"zone-migration-template\","}],"source_content_type":"text/x-rst","patch_set":4,"id":"b4994efd_bc498c87","line":274,"in_reply_to":"a8d74b9e_71fca6b4","updated":"2026-01-05 11:27:32.000000000","message":"ack, I didn\u0027t know that, thanks!","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"16cf7e2ab78e3376fd42fff307a41bf61201a0ae","unresolved":true,"context_lines":[{"line_number":304,"context_line":"            \"audit-template-uuid-2\""},{"line_number":305,"context_line":"        ],"},{"line_number":306,"context_line":"        \"execution_mode\": \"cascade\""},{"line_number":307,"context_line":"        \"auto_trigger\": false,"},{"line_number":308,"context_line":"    }"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"List Audit Pipelines:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"e610c349_f5245238","line":307,"in_reply_to":"1633778e_acb62c97","updated":"2025-12-19 15:08:59.000000000","message":"\u003e Missing comma in JSON request body example for Audit Pipeline creation\n\u003e \n\u003e **Severity**: WARNING | **Confidence**: 0.9\n\u003e \n\u003e **Impact**: This could cause confusion for developers implementing the API, as invalid JSON will cause parsing errors\n\u003e \n\u003e **Suggestion**:\n\u003e Add a comma after the \u0027execution_mode\u0027: \u0027cascade\u0027 line to make the JSON valid\n\nyep, that\u0027s a valid issue","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"35e8feb932e5d9aa3082199b895b43186e77f841","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            \"audit-template-uuid-2\""},{"line_number":305,"context_line":"        ],"},{"line_number":306,"context_line":"        \"execution_mode\": \"cascade\""},{"line_number":307,"context_line":"        \"auto_trigger\": false,"},{"line_number":308,"context_line":"    }"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"List Audit Pipelines:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"74acd2f7_d351d9d9","line":307,"in_reply_to":"e610c349_f5245238","updated":"2025-12-22 18:58:20.000000000","message":"Done","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"1b1ea093ef0aaa46b2dae91f85154ec038f37c21","unresolved":true,"context_lines":[{"line_number":339,"context_line":"Create Audit Trigger:"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"* Method: POST"},{"line_number":342,"context_line":"* URL: ``/v1/audit_triggers``"},{"line_number":343,"context_line":"* Normal response: 201 Created"},{"line_number":344,"context_line":"* Error responses: 400 Bad Request, 404 Not Found"},{"line_number":345,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"e41a794f_ada7f31e","line":342,"range":{"start_line":342,"start_character":9,"end_line":342,"end_character":29},"updated":"2025-12-18 16:24:01.000000000","message":"what about /v1/audit_pipeline/{audit_id}/audit_trigger ? that\u0027d represent the trigger and pipeline relationship at the API level.","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"35e8feb932e5d9aa3082199b895b43186e77f841","unresolved":true,"context_lines":[{"line_number":339,"context_line":"Create Audit Trigger:"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"* Method: POST"},{"line_number":342,"context_line":"* URL: ``/v1/audit_triggers``"},{"line_number":343,"context_line":"* Normal response: 201 Created"},{"line_number":344,"context_line":"* Error responses: 400 Bad Request, 404 Not Found"},{"line_number":345,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"920631b6_dac5c0c2","line":342,"range":{"start_line":342,"start_character":9,"end_line":342,"end_character":29},"in_reply_to":"6df69398_3bf9c813","updated":"2025-12-22 18:58:20.000000000","message":"my idea was to reuse the trigger also for audits in future, or any other resource that makes sense.\nWe could have multiple triggers, but it also depends on the state to be triggers. So we might need to move the \u0027state\u0027 to the AuditTrigger","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"4d3800a974931ac1c0a3c7cbf7e0e20bcebafe38","unresolved":true,"context_lines":[{"line_number":339,"context_line":"Create Audit Trigger:"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"* Method: POST"},{"line_number":342,"context_line":"* URL: ``/v1/audit_triggers``"},{"line_number":343,"context_line":"* Normal response: 201 Created"},{"line_number":344,"context_line":"* Error responses: 400 Bad Request, 404 Not Found"},{"line_number":345,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"e09a620a_b83a701f","line":342,"range":{"start_line":342,"start_character":9,"end_line":342,"end_character":29},"in_reply_to":"920631b6_dac5c0c2","updated":"2026-01-09 17:30:38.000000000","message":"Yeah, top level seems better.\n\nActually if an AuditTrigger could be used for multiple AuditPipelines (or Audits in future) and multiple AuditTriggers may be assigned to the same AuditPipeline, it would require more changes in the API, the state should be assigned to each pair AuditPipeline-AuditTrigger (AuditExecution ?), i.e. the state may be SUCCESSFUL for an AuditPipeline with an assigned ONESHOT AuditTrigger while it may still be ONGOING for the same AuditPipeline with another AuditTrigger.\n\nI\u0027m fine with starting with 1:1 relationship so far, but if we plan to support N:N combinations, it\u0027d also may be a good time to implement from scratch.","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"c05c1be9c358f37adfca682c1e9dbfced4abf487","unresolved":true,"context_lines":[{"line_number":339,"context_line":"Create Audit Trigger:"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"* Method: POST"},{"line_number":342,"context_line":"* URL: ``/v1/audit_triggers``"},{"line_number":343,"context_line":"* Normal response: 201 Created"},{"line_number":344,"context_line":"* Error responses: 400 Bad Request, 404 Not Found"},{"line_number":345,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"f67cdfc8_0ab0a2f7","line":342,"range":{"start_line":342,"start_character":9,"end_line":342,"end_character":29},"in_reply_to":"e09a620a_b83a701f","updated":"2026-01-13 11:09:53.000000000","message":"that\u0027s a good point, but what would be the use case of multiple triggers for the same audit? All examples I can think of can be done with a continuous audit adjusting start/end times and intervals. I can think however, of cases where an operator might want to trigger multiple audits/pipelines, so I agree with the suggestion above to support a list of audit uuids","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a06f38a147f808dba1653c39adfe9efebfed4e14","unresolved":true,"context_lines":[{"line_number":339,"context_line":"Create Audit Trigger:"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"* Method: POST"},{"line_number":342,"context_line":"* URL: ``/v1/audit_triggers``"},{"line_number":343,"context_line":"* Normal response: 201 Created"},{"line_number":344,"context_line":"* Error responses: 400 Bad Request, 404 Not Found"},{"line_number":345,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"6df69398_3bf9c813","line":342,"range":{"start_line":342,"start_character":9,"end_line":342,"end_character":29},"in_reply_to":"e41a794f_ada7f31e","updated":"2025-12-18 18:29:27.000000000","message":"it could be both.\n\nif the audit triger is a top levle resouce that can be sue with any audit temple eor pipeline or audit.\n\nthen havin git be a top elvel api makes sense\nwe can then obviouly have a help path that will provide the tirgger for a given audtin\n\nbut by ding it this wya we could have more hten one tirgger for the same pipelien\n\nso we could have a continus triger to run the pipeline weekly\nbut we coudl also have a event based triveer or a one shot tigger to run it on demand.\n\nsso i kind if prefer the idea of not making it a subfiled of the pipeline but making it top level since it give us more flexiblity.","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c209eea8d88173abfc15b59941b6be5c2f287d1b","unresolved":true,"context_lines":[{"line_number":339,"context_line":"Create Audit Trigger:"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"* Method: POST"},{"line_number":342,"context_line":"* URL: ``/v1/audit_triggers``"},{"line_number":343,"context_line":"* Normal response: 201 Created"},{"line_number":344,"context_line":"* Error responses: 400 Bad Request, 404 Not Found"},{"line_number":345,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"e4835eb2_9aa503a7","line":342,"range":{"start_line":342,"start_character":9,"end_line":342,"end_character":29},"in_reply_to":"f67cdfc8_0ab0a2f7","updated":"2026-01-13 13:50:47.000000000","message":"One example of multiple triggers could be event-based trigger and time-based triggers. Any trigger could be decoupled from the audit spec ib the, they dont need to be within the same resource. But I think that this would require refactoring curren Audit resource. But we can start AuditTemplate already like that. My guess is that a PoC would help us here on building a better solution","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"1b1ea093ef0aaa46b2dae91f85154ec038f37c21","unresolved":true,"context_lines":[{"line_number":373,"context_line":"* Normal response: 200 OK"},{"line_number":374,"context_line":"* Error responses: 400 Bad Request, 404 Not Found, 409 Conflict"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"Delete Audit Trigger:"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"* Method: DELETE"},{"line_number":379,"context_line":"* URL: ``/v1/audit_triggers/{uuid}``"}],"source_content_type":"text/x-rst","patch_set":4,"id":"df29bb96_9c3423d6","line":376,"range":{"start_line":376,"start_character":0,"end_line":376,"end_character":2},"updated":"2025-12-18 16:24:01.000000000","message":"Would it be allowed to delete the trigger from an ongoing AuditTemplate?. If so, that should lead to a state change (UNSCHEDULED ?).","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"35e8feb932e5d9aa3082199b895b43186e77f841","unresolved":true,"context_lines":[{"line_number":373,"context_line":"* Normal response: 200 OK"},{"line_number":374,"context_line":"* Error responses: 400 Bad Request, 404 Not Found, 409 Conflict"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"Delete Audit Trigger:"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"* Method: DELETE"},{"line_number":379,"context_line":"* URL: ``/v1/audit_triggers/{uuid}``"}],"source_content_type":"text/x-rst","patch_set":4,"id":"65acee10_0cc063c2","line":376,"range":{"start_line":376,"start_character":0,"end_line":376,"end_character":2},"in_reply_to":"df29bb96_9c3423d6","updated":"2025-12-22 18:58:20.000000000","message":"In this case, we would need to validate against the AuditTempleta state, and return a 409 here too. We may need to discuss if isn\u0027t better to move the \u0027state\u0027 to the trigger instead.","commit_id":"43f9e06f71e21f9ccf26af5583ec124474c8e23f"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"7c13e49e25b00f2224e7a86e7e9d39085ee4e1ca","unresolved":true,"context_lines":[{"line_number":118,"context_line":"     updates. It will merge the solutions from all stages into a single action"},{"line_number":119,"context_line":"     plan, providing optimization and reducing the number of actions to be"},{"line_number":120,"context_line":"     executed."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":".. note::"},{"line_number":123,"context_line":"   The Cascade execution mode is the one that covers most of the use cases, and"},{"line_number":124,"context_line":"   will be the main focus of this specification. The Composite execution mode"}],"source_content_type":"text/x-rst","patch_set":5,"id":"8cf6710c_d3a9de8b","line":121,"updated":"2026-01-13 07:51:08.000000000","message":"@viroel@gmail.com In this spec we are taking about 3 pipeline execution mode `linear`, `composite`, `cascade`. In `Data model impact` section under `AuditPipeline` execution mode, we are specifying linear mode. So,  Do we also want to document about `linear` execution mode here ?","commit_id":"3cfcd4136a342b2d982b1d5fbbc2cf3dc9b16d34"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c209eea8d88173abfc15b59941b6be5c2f287d1b","unresolved":true,"context_lines":[{"line_number":118,"context_line":"     updates. It will merge the solutions from all stages into a single action"},{"line_number":119,"context_line":"     plan, providing optimization and reducing the number of actions to be"},{"line_number":120,"context_line":"     executed."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":".. note::"},{"line_number":123,"context_line":"   The Cascade execution mode is the one that covers most of the use cases, and"},{"line_number":124,"context_line":"   will be the main focus of this specification. The Composite execution mode"}],"source_content_type":"text/x-rst","patch_set":5,"id":"e785cf33_55168c09","line":121,"in_reply_to":"8cf6710c_d3a9de8b","updated":"2026-01-13 13:50:47.000000000","message":"At some point in the spec I think that I mentioned that we would only focus on Cascade implementation for now, so I was not adding more details on other methods, since cascade is the one that covers the use cases presented.","commit_id":"3cfcd4136a342b2d982b1d5fbbc2cf3dc9b16d34"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"7c13e49e25b00f2224e7a86e7e9d39085ee4e1ca","unresolved":true,"context_lines":[{"line_number":191,"context_line":"The following diagram shows the sequence of processes that happen when an Audit"},{"line_number":192,"context_line":"Pipeline, using the Cascade execution mode, is triggered:"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"::"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    +---------------------------+"},{"line_number":197,"context_line":"    |  Audit Pipeline           |"}],"source_content_type":"text/x-rst","patch_set":5,"id":"08297f48_5533c266","line":194,"range":{"start_line":194,"start_character":0,"end_line":194,"end_character":2},"updated":"2026-01-13 07:51:08.000000000","message":"+1  for the proposing the flow diagram, it makes the understanding clear.","commit_id":"3cfcd4136a342b2d982b1d5fbbc2cf3dc9b16d34"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c209eea8d88173abfc15b59941b6be5c2f287d1b","unresolved":false,"context_lines":[{"line_number":191,"context_line":"The following diagram shows the sequence of processes that happen when an Audit"},{"line_number":192,"context_line":"Pipeline, using the Cascade execution mode, is triggered:"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"::"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    +---------------------------+"},{"line_number":197,"context_line":"    |  Audit Pipeline           |"}],"source_content_type":"text/x-rst","patch_set":5,"id":"0a26bf3e_269c3fc2","line":194,"range":{"start_line":194,"start_character":0,"end_line":194,"end_character":2},"in_reply_to":"08297f48_5533c266","updated":"2026-01-13 13:50:47.000000000","message":"Acknowledged","commit_id":"3cfcd4136a342b2d982b1d5fbbc2cf3dc9b16d34"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"7c13e49e25b00f2224e7a86e7e9d39085ee4e1ca","unresolved":true,"context_lines":[{"line_number":278,"context_line":"* ``id``: Integer primary key"},{"line_number":279,"context_line":"* ``uuid``: UUID"},{"line_number":280,"context_line":"* ``name``: String"},{"line_number":281,"context_line":"* ``execution_mode``: String (linear, cascade)"},{"line_number":282,"context_line":"* ``state``: String (CREATED, PENDING, ONGOING, SUCCEEDED, FAILED, CANCELLED,"},{"line_number":283,"context_line":"             SUSPENDED)"},{"line_number":284,"context_line":"* ``stages``: List of Audit Template UUIDs"}],"source_content_type":"text/x-rst","patch_set":5,"id":"920be9a2_767120e8","line":281,"range":{"start_line":281,"start_character":45,"end_line":281,"end_character":46},"updated":"2026-01-13 07:51:08.000000000","message":"I think we will add composite mode later once we are done with cascode mode implementation?","commit_id":"3cfcd4136a342b2d982b1d5fbbc2cf3dc9b16d34"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c209eea8d88173abfc15b59941b6be5c2f287d1b","unresolved":true,"context_lines":[{"line_number":278,"context_line":"* ``id``: Integer primary key"},{"line_number":279,"context_line":"* ``uuid``: UUID"},{"line_number":280,"context_line":"* ``name``: String"},{"line_number":281,"context_line":"* ``execution_mode``: String (linear, cascade)"},{"line_number":282,"context_line":"* ``state``: String (CREATED, PENDING, ONGOING, SUCCEEDED, FAILED, CANCELLED,"},{"line_number":283,"context_line":"             SUSPENDED)"},{"line_number":284,"context_line":"* ``stages``: List of Audit Template UUIDs"}],"source_content_type":"text/x-rst","patch_set":5,"id":"41dd643e_8cb11830","line":281,"range":{"start_line":281,"start_character":45,"end_line":281,"end_character":46},"in_reply_to":"920be9a2_767120e8","updated":"2026-01-13 13:50:47.000000000","message":"Yes, if there are use cases and users interested","commit_id":"3cfcd4136a342b2d982b1d5fbbc2cf3dc9b16d34"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"4d3800a974931ac1c0a3c7cbf7e0e20bcebafe38","unresolved":false,"context_lines":[{"line_number":279,"context_line":"* ``uuid``: UUID"},{"line_number":280,"context_line":"* ``name``: String"},{"line_number":281,"context_line":"* ``execution_mode``: String (linear, cascade)"},{"line_number":282,"context_line":"* ``state``: String (CREATED, PENDING, ONGOING, SUCCEEDED, FAILED, CANCELLED,"},{"line_number":283,"context_line":"             SUSPENDED)"},{"line_number":284,"context_line":"* ``stages``: List of Audit Template UUIDs"},{"line_number":285,"context_line":"* ``auto_trigger``: Boolean"}],"source_content_type":"text/x-rst","patch_set":5,"id":"4ce10e82_22c2929f","line":282,"range":{"start_line":282,"start_character":21,"end_line":282,"end_character":28},"updated":"2026-01-09 17:30:38.000000000","message":"CREATED works for me (READY would also be fine, IMO).","commit_id":"3cfcd4136a342b2d982b1d5fbbc2cf3dc9b16d34"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"4d3800a974931ac1c0a3c7cbf7e0e20bcebafe38","unresolved":true,"context_lines":[{"line_number":292,"context_line":"following fields:"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"* ``id``: Integer primary key"},{"line_number":295,"context_line":"* ``audit_uuid``: UUID of the Audit Pipeline resource (can represent an"},{"line_number":296,"context_line":"    Audit in future changes)."},{"line_number":297,"context_line":"* ``type``: String (ONESHOT, CONTINUOUS, EVENT)"},{"line_number":298,"context_line":"* ``interval``: String (nullable)"},{"line_number":299,"context_line":"* ``next_run_time``: DateTime (nullable)"}],"source_content_type":"text/x-rst","patch_set":5,"id":"0f626741_6001c555","line":296,"range":{"start_line":295,"start_character":0,"end_line":296,"end_character":29},"updated":"2026-01-09 17:30:38.000000000","message":"we want to support a list of UUIDs or start with a 1:1 relationship?","commit_id":"3cfcd4136a342b2d982b1d5fbbc2cf3dc9b16d34"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c209eea8d88173abfc15b59941b6be5c2f287d1b","unresolved":true,"context_lines":[{"line_number":292,"context_line":"following fields:"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"* ``id``: Integer primary key"},{"line_number":295,"context_line":"* ``audit_uuid``: UUID of the Audit Pipeline resource (can represent an"},{"line_number":296,"context_line":"    Audit in future changes)."},{"line_number":297,"context_line":"* ``type``: String (ONESHOT, CONTINUOUS, EVENT)"},{"line_number":298,"context_line":"* ``interval``: String (nullable)"},{"line_number":299,"context_line":"* ``next_run_time``: DateTime (nullable)"}],"source_content_type":"text/x-rst","patch_set":5,"id":"6bf662fd_eb63a844","line":296,"range":{"start_line":295,"start_character":0,"end_line":296,"end_character":29},"in_reply_to":"0f626741_6001c555","updated":"2026-01-13 13:50:47.000000000","message":"We can start with 1:1 i think. And in future releases, the field could accept a single uuid or a list of uuid. I think that if we dont support a relation other than 1:1, the api should not be a list, otherwise would be more confusing for users","commit_id":"3cfcd4136a342b2d982b1d5fbbc2cf3dc9b16d34"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"7c13e49e25b00f2224e7a86e7e9d39085ee4e1ca","unresolved":true,"context_lines":[{"line_number":471,"context_line":""},{"line_number":472,"context_line":"* Extend Audit Template model with ``default_parameters`` field"},{"line_number":473,"context_line":"* Update Audit Template API with new micro-version"},{"line_number":474,"context_line":"* Adapt Audit to accept ``default_parameters`` from Audit Template"},{"line_number":475,"context_line":"* Update python-watcherclient with Audit Template changes"},{"line_number":476,"context_line":"* Add unit tests and update documentation"},{"line_number":477,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"c134304b_6d1849a8","line":474,"updated":"2026-01-13 07:51:08.000000000","message":"Can we also add \"Audit parameters should override the Audit Template default parameters\"?","commit_id":"3cfcd4136a342b2d982b1d5fbbc2cf3dc9b16d34"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c209eea8d88173abfc15b59941b6be5c2f287d1b","unresolved":true,"context_lines":[{"line_number":471,"context_line":""},{"line_number":472,"context_line":"* Extend Audit Template model with ``default_parameters`` field"},{"line_number":473,"context_line":"* Update Audit Template API with new micro-version"},{"line_number":474,"context_line":"* Adapt Audit to accept ``default_parameters`` from Audit Template"},{"line_number":475,"context_line":"* Update python-watcherclient with Audit Template changes"},{"line_number":476,"context_line":"* Add unit tests and update documentation"},{"line_number":477,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"59fa1feb_bb6ba005","line":474,"in_reply_to":"c134304b_6d1849a8","updated":"2026-01-13 13:50:47.000000000","message":"We can, but I also think that Audit Template Extension explain these details already","commit_id":"3cfcd4136a342b2d982b1d5fbbc2cf3dc9b16d34"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"7c13e49e25b00f2224e7a86e7e9d39085ee4e1ca","unresolved":true,"context_lines":[{"line_number":505,"context_line":"* Add migration merging optimization"},{"line_number":506,"context_line":"* Add conflict detection and resolution"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"``Phase 5: Integration and Testing``"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"* Update python-watcherclient with Audit Pipeline and Audit Trigger commands"},{"line_number":511,"context_line":"* Add unit tests for all new components"}],"source_content_type":"text/x-rst","patch_set":5,"id":"cb42607a_6bcaf6cd","line":508,"range":{"start_line":508,"start_character":8,"end_line":508,"end_character":9},"updated":"2026-01-13 07:51:08.000000000","message":"s/5/6","commit_id":"3cfcd4136a342b2d982b1d5fbbc2cf3dc9b16d34"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c209eea8d88173abfc15b59941b6be5c2f287d1b","unresolved":true,"context_lines":[{"line_number":505,"context_line":"* Add migration merging optimization"},{"line_number":506,"context_line":"* Add conflict detection and resolution"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"``Phase 5: Integration and Testing``"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"* Update python-watcherclient with Audit Pipeline and Audit Trigger commands"},{"line_number":511,"context_line":"* Add unit tests for all new components"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5b0c5b05_3a4ade5b","line":508,"range":{"start_line":508,"start_character":8,"end_line":508,"end_character":9},"in_reply_to":"cb42607a_6bcaf6cd","updated":"2026-01-13 13:50:47.000000000","message":"Oops, I will update in a follow up","commit_id":"3cfcd4136a342b2d982b1d5fbbc2cf3dc9b16d34"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"7c13e49e25b00f2224e7a86e7e9d39085ee4e1ca","unresolved":true,"context_lines":[{"line_number":512,"context_line":"* Add tempest scenario tests for full pipeline audit flow"},{"line_number":513,"context_line":"* Update documentation"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"Dependencies"},{"line_number":517,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":518,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"d92d7b72_daad9c47","line":515,"updated":"2026-01-13 07:51:08.000000000","message":"Since this spec does not mention about watcher-dashboard changes. Do we want to add a new phase to cover dashboard changes for Audit Pipeline and Audit Trigger UI pages?","commit_id":"3cfcd4136a342b2d982b1d5fbbc2cf3dc9b16d34"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c209eea8d88173abfc15b59941b6be5c2f287d1b","unresolved":true,"context_lines":[{"line_number":512,"context_line":"* Add tempest scenario tests for full pipeline audit flow"},{"line_number":513,"context_line":"* Update documentation"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"Dependencies"},{"line_number":517,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":518,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"74c42e63_50a03d63","line":515,"in_reply_to":"d92d7b72_daad9c47","updated":"2026-01-13 13:50:47.000000000","message":"I think that is too early for dashboard changes. Once we building a more concret solution, we could asd it or propose a new spec to cover.","commit_id":"3cfcd4136a342b2d982b1d5fbbc2cf3dc9b16d34"}],"specs/2026.1/approved/strategy-pipeline.rst":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b94486bdaf2a550169115c9f089ddd84ed9d0b7b","unresolved":true,"context_lines":[{"line_number":43,"context_line":"Use Cases"},{"line_number":44,"context_line":"---------"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"**Use Case 1: Maintenance with Workload Balancing**"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"As a cloud operator, I need to evacuate specific hosts for scheduled"},{"line_number":49,"context_line":"maintenance. After evacuation, I want the remaining workload to be optimally"}],"source_content_type":"text/x-rst","patch_set":1,"id":"64ba5b13_d478bb91","line":46,"updated":"2025-12-08 21:27:10.000000000","message":"nit: i woudl remove these headings personally","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"905cad09e54e34e946841c99c0e9b369e6c4aa2f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"Use Cases"},{"line_number":44,"context_line":"---------"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"**Use Case 1: Maintenance with Workload Balancing**"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"As a cloud operator, I need to evacuate specific hosts for scheduled"},{"line_number":49,"context_line":"maintenance. After evacuation, I want the remaining workload to be optimally"}],"source_content_type":"text/x-rst","patch_set":1,"id":"e54ac36d_999c60b5","line":46,"in_reply_to":"64ba5b13_d478bb91","updated":"2025-12-09 19:30:11.000000000","message":"Acknowledged","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b94486bdaf2a550169115c9f089ddd84ed9d0b7b","unresolved":true,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"**Use Case 1: Maintenance with Workload Balancing**"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"As a cloud operator, I need to evacuate specific hosts for scheduled"},{"line_number":49,"context_line":"maintenance. After evacuation, I want the remaining workload to be optimally"},{"line_number":50,"context_line":"distributed across the functioning nodes. Currently, I must run zone_migration,"},{"line_number":51,"context_line":"wait for completion, then run workload_balance separately. With Strategy"},{"line_number":52,"context_line":"Pipeline, I can define both as stages in a single pipeline, and the workload"},{"line_number":53,"context_line":"balancing strategy will see the expected post-evacuation state, producing an"},{"line_number":54,"context_line":"optimized combined action plan."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"**Use Case 2: Node Consolidation with Workload Balancing**"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"As a cloud operator during off-peak hours, I want to consolidate workloads"}],"source_content_type":"text/x-rst","patch_set":1,"id":"509eb993_4d9d325d","line":55,"range":{"start_line":48,"start_character":0,"end_line":55,"end_character":1},"updated":"2025-12-08 21:27:10.000000000","message":"so this seams incorrect firstly we shoudl nto use the term evacuation in this context\nthat has a very specific meaning and watcher does not supprot evacuateion.\n\n\n\n```suggestion\nAs a cloud operator, I need to drain specific hosts for scheduled\nmaintenance. As part of moving the worklaod, I want the optimally\nredistribute the workload over the functioning nodes.\n```\n\nthe use case is just the why not the how so we shoudl not detail how it is done today in this section\n\nthe ohter thing is we shoudl only optimize the workload we are moving as part fo the zone migration rather then optimising all node not part of the zone migration","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"3fdce19bd65e774a69d75e27b21e1049ac722619","unresolved":true,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"**Use Case 1: Maintenance with Workload Balancing**"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"As a cloud operator, I need to evacuate specific hosts for scheduled"},{"line_number":49,"context_line":"maintenance. After evacuation, I want the remaining workload to be optimally"},{"line_number":50,"context_line":"distributed across the functioning nodes. Currently, I must run zone_migration,"},{"line_number":51,"context_line":"wait for completion, then run workload_balance separately. With Strategy"},{"line_number":52,"context_line":"Pipeline, I can define both as stages in a single pipeline, and the workload"},{"line_number":53,"context_line":"balancing strategy will see the expected post-evacuation state, producing an"},{"line_number":54,"context_line":"optimized combined action plan."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"**Use Case 2: Node Consolidation with Workload Balancing**"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"As a cloud operator during off-peak hours, I want to consolidate workloads"}],"source_content_type":"text/x-rst","patch_set":1,"id":"a199f51b_82999d25","line":55,"range":{"start_line":48,"start_character":0,"end_line":55,"end_character":1},"in_reply_to":"509eb993_4d9d325d","updated":"2025-12-09 12:50:15.000000000","message":"ack, yes evacuation is not a suitable word to use here, since it already has a different context in nova.\n I will improve this writing, thanks!","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"905cad09e54e34e946841c99c0e9b369e6c4aa2f","unresolved":true,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"**Use Case 1: Maintenance with Workload Balancing**"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"As a cloud operator, I need to evacuate specific hosts for scheduled"},{"line_number":49,"context_line":"maintenance. After evacuation, I want the remaining workload to be optimally"},{"line_number":50,"context_line":"distributed across the functioning nodes. Currently, I must run zone_migration,"},{"line_number":51,"context_line":"wait for completion, then run workload_balance separately. With Strategy"},{"line_number":52,"context_line":"Pipeline, I can define both as stages in a single pipeline, and the workload"},{"line_number":53,"context_line":"balancing strategy will see the expected post-evacuation state, producing an"},{"line_number":54,"context_line":"optimized combined action plan."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"**Use Case 2: Node Consolidation with Workload Balancing**"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"As a cloud operator during off-peak hours, I want to consolidate workloads"}],"source_content_type":"text/x-rst","patch_set":1,"id":"d3e8f039_2a0a5ef9","line":55,"range":{"start_line":48,"start_character":0,"end_line":55,"end_character":1},"in_reply_to":"a199f51b_82999d25","updated":"2025-12-09 19:30:11.000000000","message":"ack, check the new text in the new audit-pipeline proposal. Thanks","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b94486bdaf2a550169115c9f089ddd84ed9d0b7b","unresolved":true,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"**Use Case 2: Node Consolidation with Workload Balancing**"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"As a cloud operator during off-peak hours, I want to consolidate workloads"},{"line_number":59,"context_line":"onto fewer nodes to save energy, then ensure the consolidated workload is"},{"line_number":60,"context_line":"optimally balanced. The consolidation strategy identifies which nodes can be"},{"line_number":61,"context_line":"emptied, and the workload balancing strategy (operating on the expected"},{"line_number":62,"context_line":"post-consolidation state) ensures optimal resource distribution before nodes"},{"line_number":63,"context_line":"are powered down."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Proposed change"},{"line_number":67,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"61746165_cf747b0d","line":64,"range":{"start_line":58,"start_character":0,"end_line":64,"end_character":1},"updated":"2025-12-08 21:27:10.000000000","message":"so this woudl just be \n\n```suggestion\nAs a cloud operator during off-peak hours, I want to consolidate workloads\nonto fewer nodes to save energy, then ensure the consolidated workload is\noptimally balanced.\n```\n\nhowever im not sure i agree with this usecase as phased.\n\nlive migration is too costly to do at datacenter scale on an hourly basis like \"off peak\" load.\n\n\nThis is something that might be reasonable to do on a monthly basis or other long time interval that is indepened of the workload utilisation but it not something you woudl do in the diaurnal cycle. even doing it at the weekend is qustiobable","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"905cad09e54e34e946841c99c0e9b369e6c4aa2f","unresolved":true,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"**Use Case 2: Node Consolidation with Workload Balancing**"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"As a cloud operator during off-peak hours, I want to consolidate workloads"},{"line_number":59,"context_line":"onto fewer nodes to save energy, then ensure the consolidated workload is"},{"line_number":60,"context_line":"optimally balanced. The consolidation strategy identifies which nodes can be"},{"line_number":61,"context_line":"emptied, and the workload balancing strategy (operating on the expected"},{"line_number":62,"context_line":"post-consolidation state) ensures optimal resource distribution before nodes"},{"line_number":63,"context_line":"are powered down."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Proposed change"},{"line_number":67,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"83f6abd9_fedd930e","line":64,"range":{"start_line":58,"start_character":0,"end_line":64,"end_character":1},"in_reply_to":"61746165_cf747b0d","updated":"2025-12-09 19:30:11.000000000","message":"Trying to improve this in the new audit-pipeline proposal. They are very similar in the end, I may replace with a different one in future PSs.","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b94486bdaf2a550169115c9f089ddd84ed9d0b7b","unresolved":true,"context_lines":[{"line_number":66,"context_line":"Proposed change"},{"line_number":67,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"This spec proposes the introduction of **Strategy Pipeline**, which allows"},{"line_number":70,"context_line":"multiple strategies to execute sequentially on a mutable cluster data model."},{"line_number":71,"context_line":"This functionality will be implemented based on a new type of different"},{"line_number":72,"context_line":"resources: audit, goal, strategy and planner."}],"source_content_type":"text/x-rst","patch_set":1,"id":"60fafa73_c1caa6dc","line":69,"range":{"start_line":69,"start_character":39,"end_line":69,"end_character":60},"updated":"2025-12-08 21:27:10.000000000","message":"nit: \nai like to generate `**` but we don\u0027t really use that in openstack docs or spec much. we generally prefer using doble backticks to encode literals and provide emphasise \n\n```suggestion\nThis spec proposes the introduction of ``Strategy Pipeline``, which allows\n```","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"905cad09e54e34e946841c99c0e9b369e6c4aa2f","unresolved":false,"context_lines":[{"line_number":66,"context_line":"Proposed change"},{"line_number":67,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"This spec proposes the introduction of **Strategy Pipeline**, which allows"},{"line_number":70,"context_line":"multiple strategies to execute sequentially on a mutable cluster data model."},{"line_number":71,"context_line":"This functionality will be implemented based on a new type of different"},{"line_number":72,"context_line":"resources: audit, goal, strategy and planner."}],"source_content_type":"text/x-rst","patch_set":1,"id":"dd4ad2aa_1086b058","line":69,"range":{"start_line":69,"start_character":39,"end_line":69,"end_character":60},"in_reply_to":"60fafa73_c1caa6dc","updated":"2025-12-09 19:30:11.000000000","message":"Done","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"905cad09e54e34e946841c99c0e9b369e6c4aa2f","unresolved":false,"context_lines":[{"line_number":70,"context_line":"multiple strategies to execute sequentially on a mutable cluster data model."},{"line_number":71,"context_line":"This functionality will be implemented based on a new type of different"},{"line_number":72,"context_line":"resources: audit, goal, strategy and planner."},{"line_number":73,"context_line":"Different from the existing strategies, the new strategy will be able to"},{"line_number":74,"context_line":"execute multiple strategies in sequence, and manage the generated solutions."},{"line_number":75,"context_line":"A new planner will be created to combined all solutions into a single and"},{"line_number":76,"context_line":"optimized action plan."}],"source_content_type":"text/x-rst","patch_set":1,"id":"b53c0536_318e27b7","line":73,"in_reply_to":"0b63282d_54a32c75","updated":"2025-12-09 19:30:11.000000000","message":"Done","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b94486bdaf2a550169115c9f089ddd84ed9d0b7b","unresolved":true,"context_lines":[{"line_number":70,"context_line":"multiple strategies to execute sequentially on a mutable cluster data model."},{"line_number":71,"context_line":"This functionality will be implemented based on a new type of different"},{"line_number":72,"context_line":"resources: audit, goal, strategy and planner."},{"line_number":73,"context_line":"Different from the existing strategies, the new strategy will be able to"},{"line_number":74,"context_line":"execute multiple strategies in sequence, and manage the generated solutions."},{"line_number":75,"context_line":"A new planner will be created to combined all solutions into a single and"},{"line_number":76,"context_line":"optimized action plan."}],"source_content_type":"text/x-rst","patch_set":1,"id":"0b63282d_54a32c75","line":73,"in_reply_to":"3b1932a5_4af7e6ea","updated":"2025-12-08 21:27:10.000000000","message":"rith you ment to say \n\n```suggestion\nDifferent from the existing audit types, the new audit type will be able to\n```","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e19216ed137abcd0f5e8eada33e9f614a8b56bd9","unresolved":true,"context_lines":[{"line_number":82,"context_line":"Key Components"},{"line_number":83,"context_line":"--------------"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"1. **New Audit Type: STAGE**"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"   A new ``STAGE`` audit type will be introduced. Stage audits cannot be"},{"line_number":88,"context_line":"   executed directly; they serve as building blocks for strategy pipelines."}],"source_content_type":"text/x-rst","patch_set":1,"id":"b590827c_ff6f6de2","line":85,"range":{"start_line":85,"start_character":0,"end_line":85,"end_character":28},"updated":"2025-12-05 12:38:03.000000000","message":"The idea is that all input parameters will be the same. But this audit would not accept start/end times, auto_trigger or interval. Since it is not going to run by itself. We could created a new Audit Object in without these parameters, but would need a different API, objects, etc.","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"09dd66d316094ea5b91e96945d9e7050e74d20fb","unresolved":true,"context_lines":[{"line_number":82,"context_line":"Key Components"},{"line_number":83,"context_line":"--------------"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"1. **New Audit Type: STAGE**"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"   A new ``STAGE`` audit type will be introduced. Stage audits cannot be"},{"line_number":88,"context_line":"   executed directly; they serve as building blocks for strategy pipelines."}],"source_content_type":"text/x-rst","patch_set":1,"id":"f1eb9e56_ed9f0cd3","line":85,"range":{"start_line":85,"start_character":0,"end_line":85,"end_character":28},"in_reply_to":"b590827c_ff6f6de2","updated":"2025-12-05 18:28:20.000000000","message":"Also note that this Audit would have a different state machine, a much more simple one. So in the end it could be a different Object, that would be used by other pipeline-based audits (time-based/event-based audits). Or maybe it doesn\u0027t need any state at all, like a audit-template.","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b94486bdaf2a550169115c9f089ddd84ed9d0b7b","unresolved":true,"context_lines":[{"line_number":92,"context_line":"   state will represent a fixed state of the stage audit, which can be directly"},{"line_number":93,"context_line":"   archived or deleted by the operator."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"2. **New Strategy and Goal**"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"   A new goal and strategy will be created to represent strategy pipelines. The"},{"line_number":98,"context_line":"   goal ``strategy_pipeline`` will have the ``basic_pipeline`` as its default"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a23e7_ee80688f","line":95,"updated":"2025-12-08 21:27:10.000000000","message":"if we can us the exisng goals and stragies with teh new audit type i think this fails to meet the stated objective of being able to combine the existing stragies and goals.\n\ni dont think this logic holds together.\n\ni think if we take this approch you need 2 new auit types\na pipeline audit and pipline stage audit type.\n\nim not sure that is the right modelign either but your dscibing as a goal/strage in this section does not fit with my mental model of a goal ro stargy in teh context of the watcher api.","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"26436d8bf4a6c2ad8ced7039bf0fda9f08eeb86a","unresolved":true,"context_lines":[{"line_number":92,"context_line":"   state will represent a fixed state of the stage audit, which can be directly"},{"line_number":93,"context_line":"   archived or deleted by the operator."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"2. **New Strategy and Goal**"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"   A new goal and strategy will be created to represent strategy pipelines. The"},{"line_number":98,"context_line":"   goal ``strategy_pipeline`` will have the ``basic_pipeline`` as its default"}],"source_content_type":"text/x-rst","patch_set":1,"id":"f33ebc4a_c807566c","line":95,"in_reply_to":"27ae9fe3_a11f4483","updated":"2025-12-09 14:09:06.000000000","message":"After some discussions, we came with the idea of extending the audit-template resource to also include input-parameters for the selected strategy. This would allow us to better use audit-template, for both Audits and a new Audit Pipeline.\nInstead of having a new Goal and strategies to handle audit pipelines, it also seems more resonable to propose a new resource/api for audit pipelines.","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"3fdce19bd65e774a69d75e27b21e1049ac722619","unresolved":true,"context_lines":[{"line_number":92,"context_line":"   state will represent a fixed state of the stage audit, which can be directly"},{"line_number":93,"context_line":"   archived or deleted by the operator."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"2. **New Strategy and Goal**"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"   A new goal and strategy will be created to represent strategy pipelines. The"},{"line_number":98,"context_line":"   goal ``strategy_pipeline`` will have the ``basic_pipeline`` as its default"}],"source_content_type":"text/x-rst","patch_set":1,"id":"27ae9fe3_a11f4483","line":95,"in_reply_to":"9f6a23e7_ee80688f","updated":"2025-12-09 12:50:15.000000000","message":"correct, and I was expecting this reaction for this proposal. This proposal tries to not create new resources and reuse the code, but at the same time, it breaks some base concepts from watcher, like Goals/Strategies initial proposal.\nNot sure if the pipeline audit would fit as a new Audit type today, I think that we would need a new resource/api for it. Since we may want to still have ONESHOT/CONTINUOUS audit types working with the pipeline execution.\nSo the proposal may follow an Audit-Pipeline resource, which accepts multiple stage audits as input, and also support ONESHOT/CONTINUOUS/EVENT types.\nThe STAGE audit still may work as a new type of audit and resource the audit resource.","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b94486bdaf2a550169115c9f089ddd84ed9d0b7b","unresolved":true,"context_lines":[{"line_number":101,"context_line":"   * Accept a list of STAGE audit UUIDs as input parameters"},{"line_number":102,"context_line":"   * Execute the strategies in the order"},{"line_number":103,"context_line":"   * Handle mutable cluster data model updates between strategies execution"},{"line_number":104,"context_line":"   * Handle multiple solutions from different strategies executions"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"3. **Mutable Cluster Data Model**"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"b8ae6eb9_91d8e902","line":104,"updated":"2025-12-08 21:27:10.000000000","message":"so wathcer shoudl not be calling its own api and unless we are goign to add a new action to create audit this does not fit with how audits and strages work.\n\nthe stragies are inputs to audits and the output of an audit is an action plan.\n\nfor your propsoal to work the output of and audit with audit_type\u003dONESHOT, goal\u003dstrategy_pipeline woudl have to be an action plan to define stage audits.\nyou woudl then have to review and accpat that action plan for them to created and run.","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"3fdce19bd65e774a69d75e27b21e1049ac722619","unresolved":true,"context_lines":[{"line_number":101,"context_line":"   * Accept a list of STAGE audit UUIDs as input parameters"},{"line_number":102,"context_line":"   * Execute the strategies in the order"},{"line_number":103,"context_line":"   * Handle mutable cluster data model updates between strategies execution"},{"line_number":104,"context_line":"   * Handle multiple solutions from different strategies executions"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"3. **Mutable Cluster Data Model**"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"6e3af9d2_039d5e2d","line":104,"in_reply_to":"b8ae6eb9_91d8e902","updated":"2025-12-09 12:50:15.000000000","message":"the original idea was to have a handler that calls strategies and process the outputs, in a single execution, and not multiple calls of its api. This still can be implemented, but this handler seems to fits better as a new Audit Handler instead, which can execute multiple strategy algorithms and process the mutable model.","commit_id":"e7019b42ae429b38a0b3778d7fd5022078c2d217"}],"specs/2026.2/approved/audit-pipeline.rst":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":30,"context_line":"may need to migrate workloads from specific hosts and then rebalance workloads,"},{"line_number":31,"context_line":"or to save energy, consolidate nodes and redistribute workloads optimally."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Use Cases"},{"line_number":34,"context_line":"---------"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"As a cloud operator, I need to migrate the workload from specific hosts for a"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1ef34c4f_0245a4b7","line":33,"in_reply_to":"694bb00a_7a4ba5db","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"70a06027f951986cd0a6aed4424380227190822c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"386d09523a1ad0faa4af63528cb74043d7c77abd","unresolved":true,"context_lines":[{"line_number":30,"context_line":"may need to migrate workloads from specific hosts and then rebalance workloads,"},{"line_number":31,"context_line":"or to save energy, consolidate nodes and redistribute workloads optimally."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Use Cases"},{"line_number":34,"context_line":"---------"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"As a cloud operator, I need to migrate the workload from specific hosts for a"}],"source_content_type":"text/x-rst","patch_set":6,"id":"694bb00a_7a4ba5db","line":33,"in_reply_to":"e81537f5_bb77c0ba","updated":"2026-02-25 19:58:05.000000000","message":"not in the usecase section. but that would not be bad to add later","commit_id":"70a06027f951986cd0a6aed4424380227190822c"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"8a0ea9465f5049dac3e402f4fd5bab779936a02c","unresolved":true,"context_lines":[{"line_number":96,"context_line":"     the cluster data model and the metric data cache between each stage, so"},{"line_number":97,"context_line":"     that the next stage can be executed based on the expected state of the"},{"line_number":98,"context_line":"     cluster after the previous stage."},{"line_number":99,"context_line":"   * Decouple the resource from the trigger, with the addition of a new"},{"line_number":100,"context_line":"     AuditTrigger resource, which will support all current Audit trigger types"},{"line_number":101,"context_line":"     and states, and will allow in the future, multiple triggers to be"},{"line_number":102,"context_line":"     associated to the same Audit Pipeline resource."}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a2040ef_20208671","line":99,"range":{"start_line":99,"start_character":0,"end_line":99,"end_character":71},"updated":"2026-03-02 18:25:15.000000000","message":"Decoupling resource from the trigger can be more challenging and we should discuss if isn\u0027t better to have another spec to cover this functionality","commit_id":"70a06027f951986cd0a6aed4424380227190822c"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"b5c6efcc0ca6d4235b479ad325c36d29b67f2a97","unresolved":false,"context_lines":[{"line_number":96,"context_line":"     the cluster data model and the metric data cache between each stage, so"},{"line_number":97,"context_line":"     that the next stage can be executed based on the expected state of the"},{"line_number":98,"context_line":"     cluster after the previous stage."},{"line_number":99,"context_line":"   * Decouple the resource from the trigger, with the addition of a new"},{"line_number":100,"context_line":"     AuditTrigger resource, which will support all current Audit trigger types"},{"line_number":101,"context_line":"     and states, and will allow in the future, multiple triggers to be"},{"line_number":102,"context_line":"     associated to the same Audit Pipeline resource."}],"source_content_type":"text/x-rst","patch_set":6,"id":"451b1a33_129ea041","line":99,"range":{"start_line":99,"start_character":0,"end_line":99,"end_character":71},"in_reply_to":"9a2040ef_20208671","updated":"2026-04-29 12:47:52.000000000","message":"Done","commit_id":"70a06027f951986cd0a6aed4424380227190822c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"386d09523a1ad0faa4af63528cb74043d7c77abd","unresolved":false,"context_lines":[{"line_number":261,"context_line":"  support additional processing to propose a unified solution for a given use"},{"line_number":262,"context_line":"  case."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"Data model impact"},{"line_number":265,"context_line":"-----------------"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"``Audit Template Extension``"}],"source_content_type":"text/x-rst","patch_set":6,"id":"fc208aa5_cfdc7209","line":264,"in_reply_to":"2a576b0e_cf5d0b43","updated":"2026-02-25 19:58:05.000000000","message":"no this is overkill for the sepc","commit_id":"70a06027f951986cd0a6aed4424380227190822c"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c7d6d7ee9f74dfd20ce2896a4eb9f024ee54434f","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Cloud operators may need to combine optimization strategies to achieve their"},{"line_number":29,"context_line":"operational goals. For example, for maintenance purposes, an operator"},{"line_number":30,"context_line":"may need to migrate workloads from specific hosts and then rebalance workloads,"},{"line_number":31,"context_line":"or to save energy, consolidate nodes and redistribute workloads optimally."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":7,"id":"e451ce1d_61b45241","line":30,"in_reply_to":"549871f9_9a574e02","updated":"2026-04-07 20:01:45.000000000","message":"\u003e Typo \u0027metric chache\u0027 in commit message should be \u0027metric cache\u0027\n\u003e \n\u003e **Severity**: WARNING | **Confidence**: 0.9\n\u003e \n\u003e **Impact**: Typographical error in specification document reduces professionalism and may cause confusion for implementers.\n\u003e \n\u003e **Suggestion**:\n\u003e Fix typo \u0027metric chache\u0027 to \u0027metric cache\u0027 on line 30 (also present in commit message body).","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c7d6d7ee9f74dfd20ce2896a4eb9f024ee54434f","unresolved":false,"context_lines":[{"line_number":79,"context_line":"2. ``New Audit Pipeline Resource``"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"   A new ``Audit Pipeline`` resource will be introduced. Audit Pipeline works"},{"line_number":82,"context_line":"   similarly to the current Audit resource, supporting all existing audit"},{"line_number":83,"context_line":"   trigger (ONESHOT, CONTINUOUS, EVENT) and states (PENDING, ONGOING,"},{"line_number":84,"context_line":"   SUCCEEDED, FAILED, CANCELLED, SUSPENDED)."},{"line_number":85,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"e4ecb242_258aefd9","line":82,"in_reply_to":"84849020_5690b22a","updated":"2026-04-07 20:01:45.000000000","message":"\u003e Specify behavior for CONTINUOUS and EVENT audit types with pipelines\n\u003e \n\u003e **Severity**: SUGGESTION | **Confidence**: 0.8\n\u003e \n\u003e **Benefit**: While ONESHOT is straightforward, CONTINUOUS and EVENT types with multi-stage pipelines have complex lifecycle implications that should be documented.\n\u003e \n\u003e **Recommendation**:\n\u003e Add subsection on \u0027Continuous and Event Pipeline Behavior\u0027 addressing: (1) Are all stages re-executed on each trigger? (2) How are in-flight pipelines handled when new triggers arrive? (3) Is the mutable CDM reset between iterations? (4) Recommended patterns for continuous optimization pipelines.\n\nI think that is clear that it works as Audits today, which means that every trigger will start the pipeline from scratch, not reusing any structure.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"d93224824909361db1e16976c704d95a90637325","unresolved":true,"context_lines":[{"line_number":113,"context_line":"     solutions from all stages into a single action plan, providing simple"},{"line_number":114,"context_line":"     optimizations."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"   * Cascade: runs each stage sequentially and simulates the expected state of"},{"line_number":117,"context_line":"     the cluster based on the previous stage solution, including metrics cache"},{"line_number":118,"context_line":"     updates. It will merge the solutions from all stages into a single action"},{"line_number":119,"context_line":"     plan, providing optimization and reducing the number of actions to be"}],"source_content_type":"text/x-rst","patch_set":7,"id":"c3d22732_58a2d6ca","line":116,"in_reply_to":"67609d0f_02c2c259","updated":"2026-03-27 12:14:45.000000000","message":"Not really. The state is handled at the Audit Pipeline level and if anything fails in the middle no ActionPlan is created and the Audit Pipeline will be set to FAILED.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":false,"context_lines":[{"line_number":113,"context_line":"     solutions from all stages into a single action plan, providing simple"},{"line_number":114,"context_line":"     optimizations."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"   * Cascade: runs each stage sequentially and simulates the expected state of"},{"line_number":117,"context_line":"     the cluster based on the previous stage solution, including metrics cache"},{"line_number":118,"context_line":"     updates. It will merge the solutions from all stages into a single action"},{"line_number":119,"context_line":"     plan, providing optimization and reducing the number of actions to be"}],"source_content_type":"text/x-rst","patch_set":7,"id":"182d88d5_058d7665","line":116,"in_reply_to":"adad5dbc_38108c6b","updated":"2026-05-27 20:00:26.000000000","message":"Done","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c7d6d7ee9f74dfd20ce2896a4eb9f024ee54434f","unresolved":true,"context_lines":[{"line_number":113,"context_line":"     solutions from all stages into a single action plan, providing simple"},{"line_number":114,"context_line":"     optimizations."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"   * Cascade: runs each stage sequentially and simulates the expected state of"},{"line_number":117,"context_line":"     the cluster based on the previous stage solution, including metrics cache"},{"line_number":118,"context_line":"     updates. It will merge the solutions from all stages into a single action"},{"line_number":119,"context_line":"     plan, providing optimization and reducing the number of actions to be"}],"source_content_type":"text/x-rst","patch_set":7,"id":"adad5dbc_38108c6b","line":116,"in_reply_to":"c3d22732_58a2d6ca","updated":"2026-04-07 20:01:45.000000000","message":"Right, as Audit works today, if one stratagy fails, the Audit is set to Failed. Same is valid for Audit Pipeline. There is no rollback or shared CDM between executions.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c7d6d7ee9f74dfd20ce2896a4eb9f024ee54434f","unresolved":false,"context_lines":[{"line_number":124,"context_line":"   will be the main focus of this specification. The Composite execution mode"},{"line_number":125,"context_line":"   may be added in the current one or in future implementations."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"   The Pipeline Handler will manage CDM mutation between stages depending on"},{"line_number":130,"context_line":"   the execution mode selected. In Cascade execution mode, before each"}],"source_content_type":"text/x-rst","patch_set":7,"id":"de284045_122aedde","line":127,"in_reply_to":"ccbf793a_6210594b","updated":"2026-04-07 20:01:45.000000000","message":"\u003e Mutable Cluster Data Model simulation limitations are underspecified\n\u003e \n\u003e **Severity**: WARNING | **Confidence**: 0.8\n\u003e \n\u003e **Impact**: The note mentions some actions cannot be simulated but does not enumerate which action types are supported vs. ignored, making it difficult to predict pipeline behavior.\n\u003e \n\u003e **Suggestion**:\n\u003e Create explicit table or list of: (1) Action types that are fully simulated (migrate with destination), (2) Action types partially simulated (migrate without destination), (3) Action types ignored in CDM updates, (4) Expected behavior when unsupported actions are encountered.\n\nThese full analysis was not made yet, but the most important actions for the use case are expected to work. A more detailed documentation will list the supported and unsupported scenarios.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"d93224824909361db1e16976c704d95a90637325","unresolved":true,"context_lines":[{"line_number":139,"context_line":"   still be added to the final action plan."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":".. note::"},{"line_number":142,"context_line":"   Some strategies fetch data directly from service clients (e.g., Nova,"},{"line_number":143,"context_line":"   Cinder) instead of using the cluster data model, which may invalidate"},{"line_number":144,"context_line":"   simulated states. These strategies will require additional changes to"},{"line_number":145,"context_line":"   properly function with the Audit Pipeline Cascade execution mode."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"5. ``Metric Data Cache``"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"44acb49f_dd605fdb","line":145,"range":{"start_line":142,"start_character":3,"end_line":145,"end_character":68},"updated":"2026-03-27 12:14:45.000000000","message":"IMO that\u0027s a bug on those and yep, we should fix it anyway. BTW, it\u0027d be good to have that policy in the architecture or contribution guide of the doc (unrelated to this spec).","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8aea9eef5fed07c1f9dab55a11e3eed138406fdd","unresolved":true,"context_lines":[{"line_number":139,"context_line":"   still be added to the final action plan."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":".. note::"},{"line_number":142,"context_line":"   Some strategies fetch data directly from service clients (e.g., Nova,"},{"line_number":143,"context_line":"   Cinder) instead of using the cluster data model, which may invalidate"},{"line_number":144,"context_line":"   simulated states. These strategies will require additional changes to"},{"line_number":145,"context_line":"   properly function with the Audit Pipeline Cascade execution mode."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"5. ``Metric Data Cache``"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"f78a5102_106d678e","line":145,"range":{"start_line":142,"start_character":3,"end_line":145,"end_character":68},"in_reply_to":"44acb49f_dd605fdb","updated":"2026-03-27 17:10:25.000000000","message":"+1","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c7d6d7ee9f74dfd20ce2896a4eb9f024ee54434f","unresolved":false,"context_lines":[{"line_number":139,"context_line":"   still be added to the final action plan."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":".. note::"},{"line_number":142,"context_line":"   Some strategies fetch data directly from service clients (e.g., Nova,"},{"line_number":143,"context_line":"   Cinder) instead of using the cluster data model, which may invalidate"},{"line_number":144,"context_line":"   simulated states. These strategies will require additional changes to"},{"line_number":145,"context_line":"   properly function with the Audit Pipeline Cascade execution mode."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"5. ``Metric Data Cache``"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"61884fc9_b34b2e78","line":145,"range":{"start_line":142,"start_character":3,"end_line":145,"end_character":68},"in_reply_to":"f78a5102_106d678e","updated":"2026-04-07 20:01:45.000000000","message":"I will amend to make clear that is out of the scope of this spec.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"d93224824909361db1e16976c704d95a90637325","unresolved":true,"context_lines":[{"line_number":144,"context_line":"   simulated states. These strategies will require additional changes to"},{"line_number":145,"context_line":"   properly function with the Audit Pipeline Cascade execution mode."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"5. ``Metric Data Cache``"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"   The metric data cache will store resource metrics retrieved by strategies"},{"line_number":150,"context_line":"   within the same pipeline or by the Pipeline Handler to simulate the mutable"}],"source_content_type":"text/x-rst","patch_set":7,"id":"a0d7eacc_a48d05a2","line":147,"in_reply_to":"3807892a_dc9e0c86","updated":"2026-03-27 12:14:45.000000000","message":"iiuc the lifecycle of the cache is tied to the audit pipeline (or audit if we also leverage if for audits). Will be created as part of the audit pipeline and deleted when finishes. I don\u0027t think we need a mechanism to manage eviction, purge or cache invalidation at this point.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8aea9eef5fed07c1f9dab55a11e3eed138406fdd","unresolved":true,"context_lines":[{"line_number":144,"context_line":"   simulated states. These strategies will require additional changes to"},{"line_number":145,"context_line":"   properly function with the Audit Pipeline Cascade execution mode."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"5. ``Metric Data Cache``"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"   The metric data cache will store resource metrics retrieved by strategies"},{"line_number":150,"context_line":"   within the same pipeline or by the Pipeline Handler to simulate the mutable"}],"source_content_type":"text/x-rst","patch_set":7,"id":"e6e93941_b1a41af3","line":147,"in_reply_to":"a0d7eacc_a48d05a2","updated":"2026-03-27 17:10:25.000000000","message":"its trigging on the word Cache since caches typicly have a indepent lifecycle form operatoin that usese them\n\nin this case its less of a cache in that sense and more a internal data stcucture  of the pipeline.\n\nwe cloud note that explcity that this is an inmemory cache in the pipeline object that will not be presited to the db.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":false,"context_lines":[{"line_number":144,"context_line":"   simulated states. These strategies will require additional changes to"},{"line_number":145,"context_line":"   properly function with the Audit Pipeline Cascade execution mode."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"5. ``Metric Data Cache``"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"   The metric data cache will store resource metrics retrieved by strategies"},{"line_number":150,"context_line":"   within the same pipeline or by the Pipeline Handler to simulate the mutable"}],"source_content_type":"text/x-rst","patch_set":7,"id":"8cefbf6d_12286d89","line":147,"in_reply_to":"d1b02bf0_9b04bec4","updated":"2026-05-25 15:45:13.000000000","message":"i think this is now clear in the latest version","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c7d6d7ee9f74dfd20ce2896a4eb9f024ee54434f","unresolved":true,"context_lines":[{"line_number":144,"context_line":"   simulated states. These strategies will require additional changes to"},{"line_number":145,"context_line":"   properly function with the Audit Pipeline Cascade execution mode."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"5. ``Metric Data Cache``"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"   The metric data cache will store resource metrics retrieved by strategies"},{"line_number":150,"context_line":"   within the same pipeline or by the Pipeline Handler to simulate the mutable"}],"source_content_type":"text/x-rst","patch_set":7,"id":"d1b02bf0_9b04bec4","line":147,"in_reply_to":"e6e93941_b1a41af3","updated":"2026-04-07 20:01:45.000000000","message":"Ack, maybe it isn\u0027t clear enough in the spec that the cache lifecycle end with the audit pipeline execution. So makes sense to add that here. I still would like to continue with this naming too.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c7d6d7ee9f74dfd20ce2896a4eb9f024ee54434f","unresolved":false,"context_lines":[{"line_number":168,"context_line":"   datasource API calls when calculating solutions. Its initial implementation"},{"line_number":169,"context_line":"   can be made without any Audit Pipeline resource proposed in this spec."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"6. ``Pipeline Planner``"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"   A new planner will be created to optimize and combine all solutions"},{"line_number":174,"context_line":"   into a single action plan. It will be responsible for:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"83d0a3cd_6463ff3b","line":171,"in_reply_to":"587bfabf_5a6631a1","updated":"2026-04-07 20:01:45.000000000","message":"Acknowledged","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"d93224824909361db1e16976c704d95a90637325","unresolved":true,"context_lines":[{"line_number":168,"context_line":"   datasource API calls when calculating solutions. Its initial implementation"},{"line_number":169,"context_line":"   can be made without any Audit Pipeline resource proposed in this spec."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"6. ``Pipeline Planner``"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"   A new planner will be created to optimize and combine all solutions"},{"line_number":174,"context_line":"   into a single action plan. It will be responsible for:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"587bfabf_5a6631a1","line":171,"in_reply_to":"8315b90e_9560191c","updated":"2026-03-27 12:14:45.000000000","message":"out of the scope. ActionPlans execution is not modified by this spec. We will be able to SKIP actions in the plan, and behavior on failures is unaffected,","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":180,"context_line":"   * Maintain action dependencies and parallelization opportunities"},{"line_number":181,"context_line":"   * Concatenate efficacy indicators from all stages"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"7. ``Strategy Scopes``"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"   Individual scopes for each strategy can be defined in the Audit Template,"},{"line_number":186,"context_line":"   although not all Audit Pipeline modes will make use of all of them. For"}],"source_content_type":"text/x-rst","patch_set":7,"id":"80f99f8c_e59f0b60","line":183,"in_reply_to":"1e9507b6_667ca0e0","updated":"2026-05-25 15:45:13.000000000","message":"so i think i have noted this else where but i think this is anouther reason to\nadd a \n```\nFutrue Work\n-----------\n```\nseaction and move teh compist dicsuion there in stead of here.\n\nor even under  `Alternatives`\n\nrather then addign notes for what wont be in scope this cycle lets group them togeter in a diffent section.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":180,"context_line":"   * Maintain action dependencies and parallelization opportunities"},{"line_number":181,"context_line":"   * Concatenate efficacy indicators from all stages"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"7. ``Strategy Scopes``"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"   Individual scopes for each strategy can be defined in the Audit Template,"},{"line_number":186,"context_line":"   although not all Audit Pipeline modes will make use of all of them. For"}],"source_content_type":"text/x-rst","patch_set":7,"id":"a9696cf6_b9c8dd2f","line":183,"in_reply_to":"80f99f8c_e59f0b60","updated":"2026-05-27 20:00:26.000000000","message":"Ack, it can be moved too.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":180,"context_line":"   * Maintain action dependencies and parallelization opportunities"},{"line_number":181,"context_line":"   * Concatenate efficacy indicators from all stages"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"7. ``Strategy Scopes``"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"   Individual scopes for each strategy can be defined in the Audit Template,"},{"line_number":186,"context_line":"   although not all Audit Pipeline modes will make use of all of them. For"}],"source_content_type":"text/x-rst","patch_set":7,"id":"fd099822_fe49f231","line":183,"in_reply_to":"a9696cf6_b9c8dd2f","updated":"2026-05-30 09:50:24.000000000","message":"Done","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c7d6d7ee9f74dfd20ce2896a4eb9f024ee54434f","unresolved":true,"context_lines":[{"line_number":180,"context_line":"   * Maintain action dependencies and parallelization opportunities"},{"line_number":181,"context_line":"   * Concatenate efficacy indicators from all stages"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"7. ``Strategy Scopes``"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"   Individual scopes for each strategy can be defined in the Audit Template,"},{"line_number":186,"context_line":"   although not all Audit Pipeline modes will make use of all of them. For"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1e9507b6_667ca0e0","line":183,"in_reply_to":"ed8b8bc7_40607f24","updated":"2026-04-07 20:01:45.000000000","message":"The use of scopes for composite, or any other execution mode, will not be covered in the initial implementation, so it is not covered in details here.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":189,"context_line":"   solutions, while a Composite execution mode could consider individual"},{"line_number":190,"context_line":"   scopes for each stage."},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"8. ``Efficacy Indicators``"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"   The efficacy indicators list for the final action plan will be the"},{"line_number":195,"context_line":"   concatenation of the efficacy indicators lists of all stages, where"}],"source_content_type":"text/x-rst","patch_set":7,"id":"a5dadb80_e8e0df68","line":192,"in_reply_to":"37f53bf5_9714557d","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":189,"context_line":"   solutions, while a Composite execution mode could consider individual"},{"line_number":190,"context_line":"   scopes for each stage."},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"8. ``Efficacy Indicators``"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"   The efficacy indicators list for the final action plan will be the"},{"line_number":195,"context_line":"   concatenation of the efficacy indicators lists of all stages, where"}],"source_content_type":"text/x-rst","patch_set":7,"id":"37f53bf5_9714557d","line":192,"in_reply_to":"9992aeb8_399a23cb","updated":"2026-05-25 15:45:13.000000000","message":"i think they would alwasy have to be numeric or boolean right\n\ni.e. if we have an alarm state its can be above or below a treshold or we can have a raw value but ya we shoudl treate this on a case by case basis .\n\n\ne.g. i coudl see us haveing a future \"disk_pressure\" flag for lack of a better example wehre before it was set and after it was not but under neet that there wouls still likely be a numeric value.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c7d6d7ee9f74dfd20ce2896a4eb9f024ee54434f","unresolved":true,"context_lines":[{"line_number":189,"context_line":"   solutions, while a Composite execution mode could consider individual"},{"line_number":190,"context_line":"   scopes for each stage."},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"8. ``Efficacy Indicators``"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"   The efficacy indicators list for the final action plan will be the"},{"line_number":195,"context_line":"   concatenation of the efficacy indicators lists of all stages, where"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9992aeb8_399a23cb","line":192,"in_reply_to":"c9c64aae_07fb2bc3","updated":"2026-04-07 20:01:45.000000000","message":"Needs to be investigate one by one. Most of the indicators defined (if not all) are numeric indicators. Most of them are also counters, which would be summed at the end. Some other values could be replaced by its latest value in the pipeline.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":316,"context_line":"* ``hostname``: String (nullable)"},{"line_number":317,"context_line":"* ``status_message``: String (nullable)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"``Action Plan Changes``"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"Update the existing ``ActionPlan`` model to support references to Audit"},{"line_number":322,"context_line":"Pipeline:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"a41df1d7_50863ef7","line":319,"in_reply_to":"10095674_66e31ebf","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"3359641a22c77ddcf26530aa76daf3cde8e52f4f","unresolved":true,"context_lines":[{"line_number":316,"context_line":"* ``hostname``: String (nullable)"},{"line_number":317,"context_line":"* ``status_message``: String (nullable)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"``Action Plan Changes``"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"Update the existing ``ActionPlan`` model to support references to Audit"},{"line_number":322,"context_line":"Pipeline:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"97b9f56f_2473b12f","line":319,"in_reply_to":"46031e41_9ea071f3","updated":"2026-04-10 09:52:24.000000000","message":"IIUC, currently in the action_plans table, strategy_id and audit_id are not nullable with ForeignKeyConstraint. I understand we are making those nullable and adding the new audit_pipeline_id also as nullable with foreignkey.\n\nI think it would be good to create a constraint to make sure that any new actionplan has one and only one of audit_id or audit_pipeline_id not null.\n\nI think those changes are doable via alembic migrations and will not require special migration procedure, right?","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"debc362f05c634e4426528d12b23a388125f2406","unresolved":true,"context_lines":[{"line_number":316,"context_line":"* ``hostname``: String (nullable)"},{"line_number":317,"context_line":"* ``status_message``: String (nullable)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"``Action Plan Changes``"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"Update the existing ``ActionPlan`` model to support references to Audit"},{"line_number":322,"context_line":"Pipeline:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"10095674_66e31ebf","line":319,"in_reply_to":"97b9f56f_2473b12f","updated":"2026-04-10 19:19:18.000000000","message":"ack, I think that makes sense, but I need to check how to implement it only. We may spend a bit more time in this table to figure it out the best way of implementing this, and avoid more breakable changes.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c7d6d7ee9f74dfd20ce2896a4eb9f024ee54434f","unresolved":true,"context_lines":[{"line_number":316,"context_line":"* ``hostname``: String (nullable)"},{"line_number":317,"context_line":"* ``status_message``: String (nullable)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"``Action Plan Changes``"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"Update the existing ``ActionPlan`` model to support references to Audit"},{"line_number":322,"context_line":"Pipeline:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"46031e41_9ea071f3","line":319,"in_reply_to":"e26f743d_6ee9816a","updated":"2026-04-07 20:01:45.000000000","message":"All existing Action Plans will maintain their audit/strategy values after migration. Old clients would not receive a list of action plans from audit pipelines (with nullable strategy_id) based on the microversion requested. Adding this as a note in this section.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c7d6d7ee9f74dfd20ce2896a4eb9f024ee54434f","unresolved":true,"context_lines":[{"line_number":353,"context_line":"``default_parameters`` field, which may not include other new APIs defined"},{"line_number":354,"context_line":"in this spec."},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"``Audit Pipeline - New Resource APIs``"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"Create Audit Pipeline:"},{"line_number":359,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"8d7c95a5_33155256","line":356,"in_reply_to":"82574a84_24cca2ae","updated":"2026-04-07 20:01:45.000000000","message":"Not sure, it would be nice, but also extend a lot in the spec.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":353,"context_line":"``default_parameters`` field, which may not include other new APIs defined"},{"line_number":354,"context_line":"in this spec."},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"``Audit Pipeline - New Resource APIs``"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"Create Audit Pipeline:"},{"line_number":359,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"d5a3f18d_d1f86deb","line":356,"in_reply_to":"8d7c95a5_33155256","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"d93224824909361db1e16976c704d95a90637325","unresolved":true,"context_lines":[{"line_number":389,"context_line":""},{"line_number":390,"context_line":"Update Audit Pipeline:"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"* Method: PATCH"},{"line_number":393,"context_line":"* URL: ``/v1/audit_pipelines/{uuid}``"},{"line_number":394,"context_line":"* Normal response: 200 OK"},{"line_number":395,"context_line":"* Error responses: 400 Bad Request, 404 Not Found, 409 Conflict"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"Delete Audit Pipeline:"},{"line_number":398,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"14a2cb28_c18daf20","line":395,"range":{"start_line":392,"start_character":0,"end_line":395,"end_character":63},"updated":"2026-03-27 12:14:45.000000000","message":"It may be good to limit the fields of the Audit Pipeline that we will allow to modify. i.e. only the interval and time related parameters, but not the type, execution_mode or stages. I think for those case it\u0027d be better to remove and create a new one or history of ActionPlans may be missleding.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c7d6d7ee9f74dfd20ce2896a4eb9f024ee54434f","unresolved":true,"context_lines":[{"line_number":389,"context_line":""},{"line_number":390,"context_line":"Update Audit Pipeline:"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"* Method: PATCH"},{"line_number":393,"context_line":"* URL: ``/v1/audit_pipelines/{uuid}``"},{"line_number":394,"context_line":"* Normal response: 200 OK"},{"line_number":395,"context_line":"* Error responses: 400 Bad Request, 404 Not Found, 409 Conflict"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"Delete Audit Pipeline:"},{"line_number":398,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"9c90deae_2a4eaa2c","line":395,"range":{"start_line":392,"start_character":0,"end_line":395,"end_character":63},"in_reply_to":"14a2cb28_c18daf20","updated":"2026-04-07 20:01:45.000000000","message":"True, not all fields are expected to be modified and this info is missing here. Going to update that in the next PS.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"debc362f05c634e4426528d12b23a388125f2406","unresolved":false,"context_lines":[{"line_number":389,"context_line":""},{"line_number":390,"context_line":"Update Audit Pipeline:"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"* Method: PATCH"},{"line_number":393,"context_line":"* URL: ``/v1/audit_pipelines/{uuid}``"},{"line_number":394,"context_line":"* Normal response: 200 OK"},{"line_number":395,"context_line":"* Error responses: 400 Bad Request, 404 Not Found, 409 Conflict"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"Delete Audit Pipeline:"},{"line_number":398,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"a3d7d58a_0a8927e9","line":395,"range":{"start_line":392,"start_character":0,"end_line":395,"end_character":63},"in_reply_to":"9c90deae_2a4eaa2c","updated":"2026-04-10 19:19:18.000000000","message":"Done","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":403,"context_line":""},{"line_number":404,"context_line":"A new API micro-version will be introduced to support Audit Pipeline."},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"Security impact"},{"line_number":407,"context_line":"---------------"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":7,"id":"d93d1c8d_7a809808","line":406,"in_reply_to":"3a18182a_07cdf142","updated":"2026-05-30 09:50:24.000000000","message":"Done","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8aea9eef5fed07c1f9dab55a11e3eed138406fdd","unresolved":true,"context_lines":[{"line_number":403,"context_line":""},{"line_number":404,"context_line":"A new API micro-version will be introduced to support Audit Pipeline."},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"Security impact"},{"line_number":407,"context_line":"---------------"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":7,"id":"a4c90d9d_bccc0b7e","line":406,"in_reply_to":"a2bd2b83_4510c5e7","updated":"2026-03-27 17:10:25.000000000","message":"this is fair. we do need to specify the api policy which in this case is simple\nall apis are curretly project scroped and admin only but we shoudl state that explciyt.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"debc362f05c634e4426528d12b23a388125f2406","unresolved":true,"context_lines":[{"line_number":403,"context_line":""},{"line_number":404,"context_line":"A new API micro-version will be introduced to support Audit Pipeline."},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"Security impact"},{"line_number":407,"context_line":"---------------"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a18182a_07cdf142","line":406,"in_reply_to":"a4c90d9d_bccc0b7e","updated":"2026-04-10 19:19:18.000000000","message":"Added policy file and rules needs.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c7d6d7ee9f74dfd20ce2896a4eb9f024ee54434f","unresolved":false,"context_lines":[{"line_number":410,"context_line":""},{"line_number":411,"context_line":"Notifications impact"},{"line_number":412,"context_line":"--------------------"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"New notifications will be introduced to notify the end user about the creation,"},{"line_number":415,"context_line":"update, deletion and state changes of Audit Pipeline."},{"line_number":416,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5b5c259e_c67acec3","line":413,"in_reply_to":"7bf7d04a_5de9d6cc","updated":"2026-04-07 20:01:45.000000000","message":"they are very similar to current audit notification, and will be properly documented afterwards.","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c7d6d7ee9f74dfd20ce2896a4eb9f024ee54434f","unresolved":false,"context_lines":[{"line_number":420,"context_line":"Users will be able to define default parameters for Audit Templates, which may"},{"line_number":421,"context_line":"simplify the creation of Audits, depending on the use case."},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"Performance Impact"},{"line_number":424,"context_line":"------------------"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"* The pipeline planner optimization phase adds computational overhead but"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f6fda3d_10613a18","line":423,"in_reply_to":"5f84cc6b_eda67e1c","updated":"2026-04-07 20:01:45.000000000","message":"We still don\u0027t have those numbers","commit_id":"158eb3838a62a1a44b07fe09fff80e9b7ade6aeb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":false,"context_lines":[{"line_number":76,"context_line":"     defined in the template. The default parameters can still be overridden"},{"line_number":77,"context_line":"     by the operator when creating an audit from the template."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"2. ``New Audit Pipeline Resource``"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"   A new ``Audit Pipeline`` resource will be introduced. Audit Pipeline works"},{"line_number":82,"context_line":"   similarly to the current Audit resource, supporting all existing audit"}],"source_content_type":"text/x-rst","patch_set":8,"id":"6d840311_457e197d","line":79,"in_reply_to":"69083bf8_db34a993","updated":"2026-05-27 20:00:26.000000000","message":"Done","commit_id":"716cd71d3635a3b6c7541c87f98af33ffefda3c6"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"debc362f05c634e4426528d12b23a388125f2406","unresolved":true,"context_lines":[{"line_number":76,"context_line":"     defined in the template. The default parameters can still be overridden"},{"line_number":77,"context_line":"     by the operator when creating an audit from the template."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"2. ``New Audit Pipeline Resource``"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"   A new ``Audit Pipeline`` resource will be introduced. Audit Pipeline works"},{"line_number":82,"context_line":"   similarly to the current Audit resource, supporting all existing audit"}],"source_content_type":"text/x-rst","patch_set":8,"id":"cac67f83_ef0dad78","line":79,"in_reply_to":"ab744ed5_b648dfd9","updated":"2026-04-10 19:19:18.000000000","message":"Indeed, for this fist version of the feature, I\u0027m not expecting a pipeline with less than 2 stages, so at least a min value of 2 should be good to add. For a single stage pipeline, user can make use of the current Audit implementation.\nA maximum value of stages can aslo be a good thing to add, since big pipelines may affect too much the performance and their time to complete.","commit_id":"716cd71d3635a3b6c7541c87f98af33ffefda3c6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":76,"context_line":"     defined in the template. The default parameters can still be overridden"},{"line_number":77,"context_line":"     by the operator when creating an audit from the template."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"2. ``New Audit Pipeline Resource``"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"   A new ``Audit Pipeline`` resource will be introduced. Audit Pipeline works"},{"line_number":82,"context_line":"   similarly to the current Audit resource, supporting all existing audit"}],"source_content_type":"text/x-rst","patch_set":8,"id":"69083bf8_db34a993","line":79,"in_reply_to":"cac67f83_ef0dad78","updated":"2026-05-25 15:45:13.000000000","message":"lets just choose something say 10 or 16\n\ni woudl expect most pipleins are in the region fo 2-4 stages so 10-16 stages\nis a limit we are unlikely to hit but it prevents pathological behaviour.\n\nalso i would drop the new\n\n\n```suggestion\n2. ``Audit Pipeline Resource``\n```","commit_id":"716cd71d3635a3b6c7541c87f98af33ffefda3c6"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"2fac6b44f19bd655e0caba6ac4582572a5f594d4","unresolved":true,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"   The Pipeline Handler will manage CDM mutation between stages depending on"},{"line_number":130,"context_line":"   the execution mode selected. In Cascade execution mode, before each"},{"line_number":131,"context_line":"   stage (except the first), a copy of the CDM is updated based on the"},{"line_number":132,"context_line":"   previous stage\u0027s solution. Strategies will accept an optional pre-populated"}],"source_content_type":"text/x-rst","patch_set":8,"id":"117bb7e5_9b91949f","line":129,"updated":"2026-04-10 09:12:50.000000000","message":"based on the diagram from the next section, I understand this `Pipeline Handler` will be responsible from invoking the subsequent strategies and updating the  mutable model and metric cache between calls, is that correct? I think it might be useful to add a short description of it in this section","commit_id":"716cd71d3635a3b6c7541c87f98af33ffefda3c6"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"debc362f05c634e4426528d12b23a388125f2406","unresolved":true,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"   The Pipeline Handler will manage CDM mutation between stages depending on"},{"line_number":130,"context_line":"   the execution mode selected. In Cascade execution mode, before each"},{"line_number":131,"context_line":"   stage (except the first), a copy of the CDM is updated based on the"},{"line_number":132,"context_line":"   previous stage\u0027s solution. Strategies will accept an optional pre-populated"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ff6b4999_54452c1b","line":129,"in_reply_to":"117bb7e5_9b91949f","updated":"2026-04-10 19:19:18.000000000","message":"ack, It can be added as a new Item yes.","commit_id":"716cd71d3635a3b6c7541c87f98af33ffefda3c6"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"7ce70c6b72edff52749649a3e0ca40cc4f036e3a","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"   The Pipeline Handler will manage CDM mutation between stages depending on"},{"line_number":130,"context_line":"   the execution mode selected. In Cascade execution mode, before each"},{"line_number":131,"context_line":"   stage (except the first), a copy of the CDM is updated based on the"},{"line_number":132,"context_line":"   previous stage\u0027s solution. Strategies will accept an optional pre-populated"}],"source_content_type":"text/x-rst","patch_set":8,"id":"0d2ece68_2f4d813f","line":129,"in_reply_to":"e88a63cc_40d5d94f","updated":"2026-05-06 15:59:06.000000000","message":"Acknowledged","commit_id":"716cd71d3635a3b6c7541c87f98af33ffefda3c6"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"b5c6efcc0ca6d4235b479ad325c36d29b67f2a97","unresolved":true,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"   The Pipeline Handler will manage CDM mutation between stages depending on"},{"line_number":130,"context_line":"   the execution mode selected. In Cascade execution mode, before each"},{"line_number":131,"context_line":"   stage (except the first), a copy of the CDM is updated based on the"},{"line_number":132,"context_line":"   previous stage\u0027s solution. Strategies will accept an optional pre-populated"}],"source_content_type":"text/x-rst","patch_set":8,"id":"e88a63cc_40d5d94f","line":129,"in_reply_to":"ff6b4999_54452c1b","updated":"2026-04-29 12:47:52.000000000","message":"Actually the update of CDM and Cache depend on the execution mode selected. In the composite mode we  may not need to update CDM for instance.","commit_id":"716cd71d3635a3b6c7541c87f98af33ffefda3c6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":291,"context_line":"  support additional processing to propose a unified solution for a given use"},{"line_number":292,"context_line":"  case."},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"Data model impact"},{"line_number":295,"context_line":"-----------------"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"``Audit Template Extension``"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5d8140d4_328e86a6","line":294,"in_reply_to":"058801ab_12db6723","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"716cd71d3635a3b6c7541c87f98af33ffefda3c6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":291,"context_line":"  support additional processing to propose a unified solution for a given use"},{"line_number":292,"context_line":"  case."},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"Data model impact"},{"line_number":295,"context_line":"-----------------"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"``Audit Template Extension``"}],"source_content_type":"text/x-rst","patch_set":8,"id":"058801ab_12db6723","line":294,"in_reply_to":"3ce8753b_445c4ec4","updated":"2026-05-25 15:45:13.000000000","message":"this is impled as part of the datamodel changes we jsut use alembic for this.\nwith that said im not sur eif a migraton is actully needed here\nwe will stilll have action plans for autid createdc form a pipelines and thsoe audits will fernce an audit template in the way they do today.","commit_id":"716cd71d3635a3b6c7541c87f98af33ffefda3c6"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"3359641a22c77ddcf26530aa76daf3cde8e52f4f","unresolved":true,"context_lines":[{"line_number":414,"context_line":""},{"line_number":415,"context_line":"PATCH restrictions:"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"* The following fields are **updatable**: ``name``, ``state``, ``interval``,"},{"line_number":418,"context_line":"  ``auto_trigger``, ``start_time``, ``end_time``"},{"line_number":419,"context_line":"* The following fields **cannot be updated**:"},{"line_number":420,"context_line":"  ``execution_mode``, ``stages``, ``audit_type``"}],"source_content_type":"text/x-rst","patch_set":8,"id":"43683f87_c4feb6c1","line":417,"range":{"start_line":417,"start_character":44,"end_line":417,"end_character":48},"updated":"2026-04-10 09:52:24.000000000","message":"LGTM, just a minor doubt about name. I\u0027m not entirely sure we should be able to change it. Anyway, not a big problem.","commit_id":"716cd71d3635a3b6c7541c87f98af33ffefda3c6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":414,"context_line":""},{"line_number":415,"context_line":"PATCH restrictions:"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"* The following fields are **updatable**: ``name``, ``state``, ``interval``,"},{"line_number":418,"context_line":"  ``auto_trigger``, ``start_time``, ``end_time``"},{"line_number":419,"context_line":"* The following fields **cannot be updated**:"},{"line_number":420,"context_line":"  ``execution_mode``, ``stages``, ``audit_type``"}],"source_content_type":"text/x-rst","patch_set":8,"id":"4b715c67_569d9efc","line":417,"range":{"start_line":417,"start_character":44,"end_line":417,"end_character":48},"in_reply_to":"3fd85633_a275b04d","updated":"2026-05-25 15:45:13.000000000","message":"pipelines shoudl have an integer priarmy key in the db that is internel, a public uuid which  is unique and the public identifier at the api level and we shoudl have a unique constraint on teh name when not deleted i think.","commit_id":"716cd71d3635a3b6c7541c87f98af33ffefda3c6"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"debc362f05c634e4426528d12b23a388125f2406","unresolved":true,"context_lines":[{"line_number":414,"context_line":""},{"line_number":415,"context_line":"PATCH restrictions:"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"* The following fields are **updatable**: ``name``, ``state``, ``interval``,"},{"line_number":418,"context_line":"  ``auto_trigger``, ``start_time``, ``end_time``"},{"line_number":419,"context_line":"* The following fields **cannot be updated**:"},{"line_number":420,"context_line":"  ``execution_mode``, ``stages``, ``audit_type``"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fd85633_a275b04d","line":417,"range":{"start_line":417,"start_character":44,"end_line":417,"end_character":48},"in_reply_to":"43683f87_c4feb6c1","updated":"2026-04-10 19:19:18.000000000","message":"ack, correct, need to double check because Audit name cannot be update IIRC.","commit_id":"716cd71d3635a3b6c7541c87f98af33ffefda3c6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":414,"context_line":""},{"line_number":415,"context_line":"PATCH restrictions:"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"* The following fields are **updatable**: ``name``, ``state``, ``interval``,"},{"line_number":418,"context_line":"  ``auto_trigger``, ``start_time``, ``end_time``"},{"line_number":419,"context_line":"* The following fields **cannot be updated**:"},{"line_number":420,"context_line":"  ``execution_mode``, ``stages``, ``audit_type``"}],"source_content_type":"text/x-rst","patch_set":8,"id":"4b218a4a_06ef0560","line":417,"range":{"start_line":417,"start_character":44,"end_line":417,"end_character":48},"in_reply_to":"4b715c67_569d9efc","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"716cd71d3635a3b6c7541c87f98af33ffefda3c6"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"2fac6b44f19bd655e0caba6ac4582572a5f594d4","unresolved":true,"context_lines":[{"line_number":492,"context_line":"  implementation of the Cascade execution mode."},{"line_number":493,"context_line":"* One of the proposed use cases will be tested to validate the proof of"},{"line_number":494,"context_line":"  concept."},{"line_number":495,"context_line":"* Additional changes may be proposed to this specification for the next cycle,"},{"line_number":496,"context_line":"  when the completed feature is expected to be implemented."},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"``Phase 2: Audit Template Enhancement``"}],"source_content_type":"text/x-rst","patch_set":8,"id":"9b3b6b37_a466561e","line":495,"updated":"2026-04-10 09:12:50.000000000","message":"is this still accurate or a leftover from initial versions of the spec? do we plan to start the implementation in 2026.2 or defer it to 2027.1?","commit_id":"716cd71d3635a3b6c7541c87f98af33ffefda3c6"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"debc362f05c634e4426528d12b23a388125f2406","unresolved":true,"context_lines":[{"line_number":492,"context_line":"  implementation of the Cascade execution mode."},{"line_number":493,"context_line":"* One of the proposed use cases will be tested to validate the proof of"},{"line_number":494,"context_line":"  concept."},{"line_number":495,"context_line":"* Additional changes may be proposed to this specification for the next cycle,"},{"line_number":496,"context_line":"  when the completed feature is expected to be implemented."},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"``Phase 2: Audit Template Enhancement``"}],"source_content_type":"text/x-rst","patch_set":8,"id":"cf4921bb_f941bf81","line":495,"in_reply_to":"9b3b6b37_a466561e","updated":"2026-04-10 19:19:18.000000000","message":"you are correct, this is a leftover from gazpacho proposal, i will fix, thanks!","commit_id":"716cd71d3635a3b6c7541c87f98af33ffefda3c6"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"7ce70c6b72edff52749649a3e0ca40cc4f036e3a","unresolved":false,"context_lines":[{"line_number":492,"context_line":"  implementation of the Cascade execution mode."},{"line_number":493,"context_line":"* One of the proposed use cases will be tested to validate the proof of"},{"line_number":494,"context_line":"  concept."},{"line_number":495,"context_line":"* Additional changes may be proposed to this specification for the next cycle,"},{"line_number":496,"context_line":"  when the completed feature is expected to be implemented."},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"``Phase 2: Audit Template Enhancement``"}],"source_content_type":"text/x-rst","patch_set":8,"id":"31e86d31_b909a631","line":495,"in_reply_to":"cf4921bb_f941bf81","updated":"2026-05-06 15:59:06.000000000","message":"Done","commit_id":"716cd71d3635a3b6c7541c87f98af33ffefda3c6"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b8b0956fdc786ecf53dd8b2527e6239a9cb5a218","unresolved":false,"context_lines":[{"line_number":76,"context_line":"     defined in the template. The default parameters can still be overridden"},{"line_number":77,"context_line":"     by the operator when creating an audit from the template."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"2. ``New Audit Pipeline Resource``"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"   A new ``Audit Pipeline`` resource will be introduced. Audit Pipeline works"},{"line_number":82,"context_line":"   similarly to the current Audit resource, supporting all existing audit"}],"source_content_type":"text/x-rst","patch_set":9,"id":"9d1b5951_82ec5d01","line":79,"in_reply_to":"2b100c85_8030abb2","updated":"2026-04-29 14:27:07.000000000","message":"Actually, the doc mentions the mutable cdm and caches are not reused even for the same resource, as in continuous audits.","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b8b0956fdc786ecf53dd8b2527e6239a9cb5a218","unresolved":false,"context_lines":[{"line_number":150,"context_line":"   documentation shall list the supported and unsupported strategies and"},{"line_number":151,"context_line":"   actions."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":".. note::"},{"line_number":154,"context_line":"   Some strategies fetch data directly from service clients (e.g., Nova,"},{"line_number":155,"context_line":"   Cinder) instead of using the cluster data model, which may invalidate"},{"line_number":156,"context_line":"   simulated states. These strategies will require additional changes to"}],"source_content_type":"text/x-rst","patch_set":9,"id":"b6d0734e_7be5cf87","line":153,"in_reply_to":"83e2de09_d6f48ee9","updated":"2026-04-29 14:27:07.000000000","message":"That\u0027s separated issue, and considered a bug to be fixed. Out of the scope of the spec.","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"01e4d585bacd88ee8c798debe4760f7b56e9084a","unresolved":false,"context_lines":[{"line_number":324,"context_line":"* ``name``: String (nullable)"},{"line_number":325,"context_line":"* ``execution_mode``: String (CASCADE, COMPOSITE)"},{"line_number":326,"context_line":"* ``state``: String (PENDING, ONGOING, SUCCEEDED, FAILED, CANCELLED, SUSPENDED)"},{"line_number":327,"context_line":"* ``stages``: List of Audit Template UUIDs (minimum 2, maximum defined by"},{"line_number":328,"context_line":"  configuration option ``max_pipeline_stages``, defaults to 5)"},{"line_number":329,"context_line":"* ``audit_type``: String (ONESHOT, CONTINUOUS, EVENT)"},{"line_number":330,"context_line":"* ``interval``: String (nullable)"}],"source_content_type":"text/x-rst","patch_set":9,"id":"d537ff9a_e0ecfbcc","line":327,"in_reply_to":"7f628ca7_a95b3c91","updated":"2026-05-05 14:57:56.000000000","message":"Done","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e3e604769f00c2f555f51a5708cd925e6b4b7136","unresolved":true,"context_lines":[{"line_number":324,"context_line":"* ``name``: String (nullable)"},{"line_number":325,"context_line":"* ``execution_mode``: String (CASCADE, COMPOSITE)"},{"line_number":326,"context_line":"* ``state``: String (PENDING, ONGOING, SUCCEEDED, FAILED, CANCELLED, SUSPENDED)"},{"line_number":327,"context_line":"* ``stages``: List of Audit Template UUIDs (minimum 2, maximum defined by"},{"line_number":328,"context_line":"  configuration option ``max_pipeline_stages``, defaults to 5)"},{"line_number":329,"context_line":"* ``audit_type``: String (ONESHOT, CONTINUOUS, EVENT)"},{"line_number":330,"context_line":"* ``interval``: String (nullable)"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f628ca7_a95b3c91","line":327,"in_reply_to":"cdd443e4_c46f107a","updated":"2026-04-29 19:17:31.000000000","message":"Agreed, in composite mode can even be the same goal/strategy but with different scopes. I prefer to let this open and we can discuss in the implementation.","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b8b0956fdc786ecf53dd8b2527e6239a9cb5a218","unresolved":true,"context_lines":[{"line_number":324,"context_line":"* ``name``: String (nullable)"},{"line_number":325,"context_line":"* ``execution_mode``: String (CASCADE, COMPOSITE)"},{"line_number":326,"context_line":"* ``state``: String (PENDING, ONGOING, SUCCEEDED, FAILED, CANCELLED, SUSPENDED)"},{"line_number":327,"context_line":"* ``stages``: List of Audit Template UUIDs (minimum 2, maximum defined by"},{"line_number":328,"context_line":"  configuration option ``max_pipeline_stages``, defaults to 5)"},{"line_number":329,"context_line":"* ``audit_type``: String (ONESHOT, CONTINUOUS, EVENT)"},{"line_number":330,"context_line":"* ``interval``: String (nullable)"}],"source_content_type":"text/x-rst","patch_set":9,"id":"cdd443e4_c46f107a","line":327,"in_reply_to":"ebe5c934_7b8956ae","updated":"2026-04-29 14:27:07.000000000","message":"We don\u0027t want to validate content of stages in code to keep the feature usage open to users cases.","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e3e604769f00c2f555f51a5708cd925e6b4b7136","unresolved":true,"context_lines":[{"line_number":351,"context_line":"  strategy audits will continue to be supported; this change only affects"},{"line_number":352,"context_line":"  the action plan data model."},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"A check constraint can be added to ensure data integrity: exactly one of"},{"line_number":355,"context_line":"``audit_id`` or ``audit_pipeline_id`` must be set (both cannot be null, and"},{"line_number":356,"context_line":"both cannot be set simultaneously). This ensures that every action plan is"},{"line_number":357,"context_line":"associated with either an Audit or an Audit Pipeline, but not both."}],"source_content_type":"text/x-rst","patch_set":9,"id":"c967a84d_a827cba2","line":354,"in_reply_to":"55d2e301_90489455","updated":"2026-04-29 19:17:31.000000000","message":"ack, we don\u0027t need to provide this details here, can be discussed during the review.","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b8b0956fdc786ecf53dd8b2527e6239a9cb5a218","unresolved":true,"context_lines":[{"line_number":351,"context_line":"  strategy audits will continue to be supported; this change only affects"},{"line_number":352,"context_line":"  the action plan data model."},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"A check constraint can be added to ensure data integrity: exactly one of"},{"line_number":355,"context_line":"``audit_id`` or ``audit_pipeline_id`` must be set (both cannot be null, and"},{"line_number":356,"context_line":"both cannot be set simultaneously). This ensures that every action plan is"},{"line_number":357,"context_line":"associated with either an Audit or an Audit Pipeline, but not both."}],"source_content_type":"text/x-rst","patch_set":9,"id":"55d2e301_90489455","line":354,"in_reply_to":"88503f98_821313be","updated":"2026-04-29 14:27:07.000000000","message":"I\u0027d say existing content is enough. Specially thinking that the current content of the table is backwards compatible with the new constraint.","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"01e4d585bacd88ee8c798debe4760f7b56e9084a","unresolved":false,"context_lines":[{"line_number":351,"context_line":"  strategy audits will continue to be supported; this change only affects"},{"line_number":352,"context_line":"  the action plan data model."},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"A check constraint can be added to ensure data integrity: exactly one of"},{"line_number":355,"context_line":"``audit_id`` or ``audit_pipeline_id`` must be set (both cannot be null, and"},{"line_number":356,"context_line":"both cannot be set simultaneously). This ensures that every action plan is"},{"line_number":357,"context_line":"associated with either an Audit or an Audit Pipeline, but not both."}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ed6e543_543c60d8","line":354,"in_reply_to":"c967a84d_a827cba2","updated":"2026-05-05 14:57:56.000000000","message":"Done","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b8b0956fdc786ecf53dd8b2527e6239a9cb5a218","unresolved":true,"context_lines":[{"line_number":382,"context_line":"        }"},{"line_number":383,"context_line":"    }"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"A new API micro-version will be introduced to support the new"},{"line_number":386,"context_line":"``default_parameters`` field, which may not include other new APIs defined"},{"line_number":387,"context_line":"in this spec."},{"line_number":388,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"5334d09c_48516482","line":385,"in_reply_to":"51f6f84f_90852fae","updated":"2026-04-29 14:27:07.000000000","message":"No need to define in the spec","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e3e604769f00c2f555f51a5708cd925e6b4b7136","unresolved":false,"context_lines":[{"line_number":382,"context_line":"        }"},{"line_number":383,"context_line":"    }"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"A new API micro-version will be introduced to support the new"},{"line_number":386,"context_line":"``default_parameters`` field, which may not include other new APIs defined"},{"line_number":387,"context_line":"in this spec."},{"line_number":388,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"e89513be_4d8cf49b","line":385,"in_reply_to":"5334d09c_48516482","updated":"2026-04-29 19:17:31.000000000","message":"Done","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":446,"context_line":"* State updates must follow valid state machine transitions"},{"line_number":447,"context_line":"* Attempting to update immutable fields returns 400 Bad Request"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"Delete Audit Pipeline:"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"* Method: DELETE"},{"line_number":452,"context_line":"* URL: ``/v1/audit_pipelines/{uuid}``"}],"source_content_type":"text/x-rst","patch_set":9,"id":"21848e3f_8b68f9c3","line":449,"in_reply_to":"14b46e31_c9247662","updated":"2026-05-30 09:50:24.000000000","message":"Done","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e3e604769f00c2f555f51a5708cd925e6b4b7136","unresolved":true,"context_lines":[{"line_number":446,"context_line":"* State updates must follow valid state machine transitions"},{"line_number":447,"context_line":"* Attempting to update immutable fields returns 400 Bad Request"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"Delete Audit Pipeline:"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"* Method: DELETE"},{"line_number":452,"context_line":"* URL: ``/v1/audit_pipelines/{uuid}``"}],"source_content_type":"text/x-rst","patch_set":9,"id":"5315f551_fae6f79b","line":449,"in_reply_to":"357fb970_b8eeb19b","updated":"2026-04-29 19:17:31.000000000","message":"Correct, it should behaves as Audit state machine, but I can also include this information here in my next PS","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"01e4d585bacd88ee8c798debe4760f7b56e9084a","unresolved":true,"context_lines":[{"line_number":446,"context_line":"* State updates must follow valid state machine transitions"},{"line_number":447,"context_line":"* Attempting to update immutable fields returns 400 Bad Request"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"Delete Audit Pipeline:"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"* Method: DELETE"},{"line_number":452,"context_line":"* URL: ``/v1/audit_pipelines/{uuid}``"}],"source_content_type":"text/x-rst","patch_set":9,"id":"14b46e31_c9247662","line":449,"in_reply_to":"5315f551_fae6f79b","updated":"2026-05-05 14:57:56.000000000","message":"Added state machine and acceptable states in PATCH and DELETE operations","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b8b0956fdc786ecf53dd8b2527e6239a9cb5a218","unresolved":true,"context_lines":[{"line_number":446,"context_line":"* State updates must follow valid state machine transitions"},{"line_number":447,"context_line":"* Attempting to update immutable fields returns 400 Bad Request"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"Delete Audit Pipeline:"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"* Method: DELETE"},{"line_number":452,"context_line":"* URL: ``/v1/audit_pipelines/{uuid}``"}],"source_content_type":"text/x-rst","patch_set":9,"id":"357fb970_b8eeb19b","line":449,"in_reply_to":"63598911_f8c212ff","updated":"2026-04-29 14:27:07.000000000","message":"This is a valid point. The spec mentions that Audit Pipelines have similar states as Audits so I expect the same state transitions as Audits https://docs.openstack.org/watcher/latest/architecture.html . Only Audit Pipelines in SUCCEEDED, FAILED, CANCELLED and SUSPENDED can be Deleted.","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":486,"context_line":"  increases the memory footprint by caching metric values during the audit"},{"line_number":487,"context_line":"  pipeline execution."},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"Other deployer impact"},{"line_number":490,"context_line":"---------------------"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":9,"id":"71eb6d9c_a603e508","line":489,"in_reply_to":"4c52ad01_c33e67a5","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b8b0956fdc786ecf53dd8b2527e6239a9cb5a218","unresolved":true,"context_lines":[{"line_number":486,"context_line":"  increases the memory footprint by caching metric values during the audit"},{"line_number":487,"context_line":"  pipeline execution."},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"Other deployer impact"},{"line_number":490,"context_line":"---------------------"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":9,"id":"4c52ad01_c33e67a5","line":489,"in_reply_to":"8654d2b8_f45b46be","updated":"2026-04-29 14:27:07.000000000","message":"Watcher will provide safe defaults. The new option in the config will be automatically added to watcher docs in watcher.conf.","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b8b0956fdc786ecf53dd8b2527e6239a9cb5a218","unresolved":true,"context_lines":[{"line_number":491,"context_line":""},{"line_number":492,"context_line":"None"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"Developer impact"},{"line_number":495,"context_line":"----------------"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":9,"id":"10a22634_31ea29f0","line":494,"in_reply_to":"0aa27b39_79253be8","updated":"2026-04-29 14:27:07.000000000","message":"That\u0027s described in the entire spec, no need to add it here, imo.","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e3e604769f00c2f555f51a5708cd925e6b4b7136","unresolved":true,"context_lines":[{"line_number":491,"context_line":""},{"line_number":492,"context_line":"None"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"Developer impact"},{"line_number":495,"context_line":"----------------"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":9,"id":"22f96c0b_2be2bc3e","line":494,"in_reply_to":"10a22634_31ea29f0","updated":"2026-04-29 19:17:31.000000000","message":"Ack, I think that I can add something in this section, but the proposed changes should not affect third-party plugins as long as they use the correct interfaces :)","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":491,"context_line":""},{"line_number":492,"context_line":"None"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"Developer impact"},{"line_number":495,"context_line":"----------------"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1837c016_cadf972a","line":494,"in_reply_to":"22f96c0b_2be2bc3e","updated":"2026-05-30 09:50:24.000000000","message":"normally what this section is used for is to descibe the code to doing furture feature desgin and work, i.e. to call out things like, thou shall not use rest client to directly talk to a metrics backend or service api since that will bypas the simulation layer.\n\nor another example at some point we shouold add openapi schemas for all our rest apis, the spec for that would call out that openapi schemea would become mandtory for all future api changes.\n\nin this case im not sure we need to call out anything specificly","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b8b0956fdc786ecf53dd8b2527e6239a9cb5a218","unresolved":true,"context_lines":[{"line_number":557,"context_line":"* Update python-watcherclient with Audit Pipeline commands"},{"line_number":558,"context_line":"* Add unit tests for all new components"},{"line_number":559,"context_line":"* Add tempest scenario tests for full pipeline audit flow"},{"line_number":560,"context_line":"* Update documentation"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":9,"id":"ee27f204_180c0848","line":560,"range":{"start_line":560,"start_character":0,"end_line":560,"end_character":2},"updated":"2026-04-29 14:27:07.000000000","message":"We want to mention adding support in watcher-dashboard?","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"01e4d585bacd88ee8c798debe4760f7b56e9084a","unresolved":false,"context_lines":[{"line_number":557,"context_line":"* Update python-watcherclient with Audit Pipeline commands"},{"line_number":558,"context_line":"* Add unit tests for all new components"},{"line_number":559,"context_line":"* Add tempest scenario tests for full pipeline audit flow"},{"line_number":560,"context_line":"* Update documentation"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":9,"id":"d175ea14_98497e8f","line":560,"range":{"start_line":560,"start_character":0,"end_line":560,"end_character":2},"in_reply_to":"088d5d81_a569761b","updated":"2026-05-05 14:57:56.000000000","message":"Done","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"e99cfeb4ca7c4f27b92a25062c58a9f6ab384cfd","unresolved":true,"context_lines":[{"line_number":557,"context_line":"* Update python-watcherclient with Audit Pipeline commands"},{"line_number":558,"context_line":"* Add unit tests for all new components"},{"line_number":559,"context_line":"* Add tempest scenario tests for full pipeline audit flow"},{"line_number":560,"context_line":"* Update documentation"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":9,"id":"088d5d81_a569761b","line":560,"range":{"start_line":560,"start_character":0,"end_line":560,"end_character":2},"in_reply_to":"533af0f7_1c670103","updated":"2026-04-30 07:53:37.000000000","message":"works for me. I agree to not make this spec to depends on the watcher-dashboard part.","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e3e604769f00c2f555f51a5708cd925e6b4b7136","unresolved":true,"context_lines":[{"line_number":557,"context_line":"* Update python-watcherclient with Audit Pipeline commands"},{"line_number":558,"context_line":"* Add unit tests for all new components"},{"line_number":559,"context_line":"* Add tempest scenario tests for full pipeline audit flow"},{"line_number":560,"context_line":"* Update documentation"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":9,"id":"533af0f7_1c670103","line":560,"range":{"start_line":560,"start_character":0,"end_line":560,"end_character":2},"in_reply_to":"ee27f204_180c0848","updated":"2026-04-29 19:17:31.000000000","message":"It is not planned to be implemented as part of this spec, which means that after implementing the feature i would like to move this spec to *implemented* even without the dashboard piece.\nI think that we can have a new spec or a blueprint for the dashboard effort.\nBut if you folks disagree with that approach, I can add it here too.","commit_id":"063ef86d0a7413f502242f305ee18a258b85e893"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":33,"context_line":"Use Cases"},{"line_number":34,"context_line":"---------"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"As a cloud operator, I need to migrate the workload from specific hosts for a"},{"line_number":37,"context_line":"scheduled maintenance. After migration, I want this workload to be optimally"},{"line_number":38,"context_line":"distributed across the functioning nodes, using workload balancing strategies."},{"line_number":39,"context_line":"This requires coordinating multiple optimization strategies in sequence, where"},{"line_number":40,"context_line":"each strategy needs to operate on a scoped and updated state of the cluster"},{"line_number":41,"context_line":"based on future state created by the previous strategy."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"As a cloud operator, I want to save energy by consolidating workloads while"},{"line_number":44,"context_line":"also ensuring enough nodes remain online to support new workloads. To achieve"}],"source_content_type":"text/x-rst","patch_set":10,"id":"db3545cf_703dba12","line":41,"range":{"start_line":36,"start_character":0,"end_line":41,"end_character":55},"updated":"2026-05-25 15:45:13.000000000","message":"```suggestion\nAs a cloud operator, I need to perform scheduled maintenance on specific hosts\nwithout affecting the running workloads. As a result i need to migrate the workload\nwithout pessimisming the workload distribution by leveraging the workload balancing strategies.\nThis requires coordinating multiple optimization strategies in sequence, to achieve a composite goal that is the combination of both. Each strategy needs to operate on a scoped and updated state of the cluster based on future state created by the previous strategy.\n```","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":33,"context_line":"Use Cases"},{"line_number":34,"context_line":"---------"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"As a cloud operator, I need to migrate the workload from specific hosts for a"},{"line_number":37,"context_line":"scheduled maintenance. After migration, I want this workload to be optimally"},{"line_number":38,"context_line":"distributed across the functioning nodes, using workload balancing strategies."},{"line_number":39,"context_line":"This requires coordinating multiple optimization strategies in sequence, where"},{"line_number":40,"context_line":"each strategy needs to operate on a scoped and updated state of the cluster"},{"line_number":41,"context_line":"based on future state created by the previous strategy."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"As a cloud operator, I want to save energy by consolidating workloads while"},{"line_number":44,"context_line":"also ensuring enough nodes remain online to support new workloads. To achieve"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ae41bb9e_f7952301","line":41,"range":{"start_line":36,"start_character":0,"end_line":41,"end_character":55},"in_reply_to":"15c47822_a030d1df","updated":"2026-05-30 09:50:24.000000000","message":"Done","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":33,"context_line":"Use Cases"},{"line_number":34,"context_line":"---------"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"As a cloud operator, I need to migrate the workload from specific hosts for a"},{"line_number":37,"context_line":"scheduled maintenance. After migration, I want this workload to be optimally"},{"line_number":38,"context_line":"distributed across the functioning nodes, using workload balancing strategies."},{"line_number":39,"context_line":"This requires coordinating multiple optimization strategies in sequence, where"},{"line_number":40,"context_line":"each strategy needs to operate on a scoped and updated state of the cluster"},{"line_number":41,"context_line":"based on future state created by the previous strategy."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"As a cloud operator, I want to save energy by consolidating workloads while"},{"line_number":44,"context_line":"also ensuring enough nodes remain online to support new workloads. To achieve"}],"source_content_type":"text/x-rst","patch_set":10,"id":"15c47822_a030d1df","line":41,"range":{"start_line":36,"start_character":0,"end_line":41,"end_character":55},"in_reply_to":"db3545cf_703dba12","updated":"2026-05-27 20:00:26.000000000","message":"I changed this based on your inputs and with Claude\u0027s assistance.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Proposed change"},{"line_number":50,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"This spec proposes the introduction of ``Audit Pipeline``, which allows"},{"line_number":53,"context_line":"multiple strategies to be executed sequentially and based on a previous mutable"},{"line_number":54,"context_line":"cluster data model and/or on a metric data cache. This functionality will be"},{"line_number":55,"context_line":"implemented based on a new ``Audit Pipeline`` resource with dedicated APIs,"},{"line_number":56,"context_line":"and an extension to the existing Audit Template resource to support strategy"},{"line_number":57,"context_line":"input parameters. The ``Audit Pipeline`` will support its own executor and"},{"line_number":58,"context_line":"planner, that will define how each pipeline stage will be executed and which"},{"line_number":59,"context_line":"input data will be used by the related strategy. It will also define a new"},{"line_number":60,"context_line":"``Pipeline Planner`` that will merge and optimize the solutions proposed by"},{"line_number":61,"context_line":"the strategies in the pipeline."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Key Components"},{"line_number":64,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1d78f221_432b705e","line":61,"range":{"start_line":51,"start_character":1,"end_line":61,"end_character":31},"updated":"2026-05-25 15:45:13.000000000","message":"```suggestion\n\nThis spec proposes the introduction of an ``Audit Pipeline`` API resource,\nwhich models the compostion of multiple strategies, executed in a sequence,\nbased on the projected outcome of the pior stages. A mutable cluster data model and/or on a metric data cache will be pass to each stage to allow simulation\nof the future state.\n\nThis functionality will be implemented based on a new ``Audit Pipeline`` resource with dedicated APIs, and an extension to the existing Audit Template resource to support strategy input parameters.\n\nThe ``Audit Pipeline`` will use its own executor and planner, that will define how\neach pipeline stage will be executed and which input data will be used by the\nrelated strategy. It will also define a new ``Pipeline Planner`` that will merge\nand optimize the solutions proposed by the strategies in the pipeline.\n```","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Proposed change"},{"line_number":50,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"This spec proposes the introduction of ``Audit Pipeline``, which allows"},{"line_number":53,"context_line":"multiple strategies to be executed sequentially and based on a previous mutable"},{"line_number":54,"context_line":"cluster data model and/or on a metric data cache. This functionality will be"},{"line_number":55,"context_line":"implemented based on a new ``Audit Pipeline`` resource with dedicated APIs,"},{"line_number":56,"context_line":"and an extension to the existing Audit Template resource to support strategy"},{"line_number":57,"context_line":"input parameters. The ``Audit Pipeline`` will support its own executor and"},{"line_number":58,"context_line":"planner, that will define how each pipeline stage will be executed and which"},{"line_number":59,"context_line":"input data will be used by the related strategy. It will also define a new"},{"line_number":60,"context_line":"``Pipeline Planner`` that will merge and optimize the solutions proposed by"},{"line_number":61,"context_line":"the strategies in the pipeline."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Key Components"},{"line_number":64,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"412ed490_a3f32465","line":61,"range":{"start_line":51,"start_character":1,"end_line":61,"end_character":31},"in_reply_to":"1d78f221_432b705e","updated":"2026-05-27 20:00:26.000000000","message":"I changed this based on your inputs and with Claude\u0027s assistance.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Proposed change"},{"line_number":50,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"This spec proposes the introduction of ``Audit Pipeline``, which allows"},{"line_number":53,"context_line":"multiple strategies to be executed sequentially and based on a previous mutable"},{"line_number":54,"context_line":"cluster data model and/or on a metric data cache. This functionality will be"},{"line_number":55,"context_line":"implemented based on a new ``Audit Pipeline`` resource with dedicated APIs,"},{"line_number":56,"context_line":"and an extension to the existing Audit Template resource to support strategy"},{"line_number":57,"context_line":"input parameters. The ``Audit Pipeline`` will support its own executor and"},{"line_number":58,"context_line":"planner, that will define how each pipeline stage will be executed and which"},{"line_number":59,"context_line":"input data will be used by the related strategy. It will also define a new"},{"line_number":60,"context_line":"``Pipeline Planner`` that will merge and optimize the solutions proposed by"},{"line_number":61,"context_line":"the strategies in the pipeline."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Key Components"},{"line_number":64,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"8627f4d5_ba03eda8","line":61,"range":{"start_line":51,"start_character":1,"end_line":61,"end_character":31},"in_reply_to":"412ed490_a3f32465","updated":"2026-05-30 09:50:24.000000000","message":"Done","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":63,"context_line":"Key Components"},{"line_number":64,"context_line":"--------------"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"1. ``Audit Template Extension``"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"   The existing Audit Template resource will be extended to support input"},{"line_number":69,"context_line":"   parameters for the selected strategy. This allows operators to define"}],"source_content_type":"text/x-rst","patch_set":10,"id":"8d8e2c86_a72ba093","line":66,"range":{"start_line":66,"start_character":0,"end_line":66,"end_character":31},"updated":"2026-05-25 15:45:13.000000000","message":"as a meta comment rather then a numbered list this section shoudl really be a serise of prose paragraphs \n\nwe only really use lists in a spec in teh work items section\n\nthis isnt really an implementation order or sequence so the numbered list just adds indentaion without any real clarity.\n\nit woudl be better to have each topic be a sub section\n\n\n\n```suggestion\nAudit Template Extension\n~~~~~~~~~~~~~~~~~~~~~~~~\n```","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":63,"context_line":"Key Components"},{"line_number":64,"context_line":"--------------"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"1. ``Audit Template Extension``"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"   The existing Audit Template resource will be extended to support input"},{"line_number":69,"context_line":"   parameters for the selected strategy. This allows operators to define"}],"source_content_type":"text/x-rst","patch_set":10,"id":"cc47c834_ce64e299","line":66,"range":{"start_line":66,"start_character":0,"end_line":66,"end_character":31},"in_reply_to":"8d8e2c86_a72ba093","updated":"2026-05-27 20:00:26.000000000","message":"Ack, changes made in the following PS.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":63,"context_line":"Key Components"},{"line_number":64,"context_line":"--------------"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"1. ``Audit Template Extension``"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"   The existing Audit Template resource will be extended to support input"},{"line_number":69,"context_line":"   parameters for the selected strategy. This allows operators to define"}],"source_content_type":"text/x-rst","patch_set":10,"id":"d9f78de7_ef22397e","line":66,"range":{"start_line":66,"start_character":0,"end_line":66,"end_character":31},"in_reply_to":"cc47c834_ce64e299","updated":"2026-05-30 09:50:24.000000000","message":"Done","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":68,"context_line":"   The existing Audit Template resource will be extended to support input"},{"line_number":69,"context_line":"   parameters for the selected strategy. This allows operators to define"},{"line_number":70,"context_line":"   reusable templates with pre-configured strategy parameters that can be"},{"line_number":71,"context_line":"   used as stages in a pipeline."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"   New field:"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"4fecf3f7_1be531d6","line":71,"updated":"2026-05-25 15:45:13.000000000","message":"```suggestion\n   used as stages in a pipeline. This will be intoduced in a dedicated micro versions before the pipeline feature.\n```","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":false,"context_lines":[{"line_number":68,"context_line":"   The existing Audit Template resource will be extended to support input"},{"line_number":69,"context_line":"   parameters for the selected strategy. This allows operators to define"},{"line_number":70,"context_line":"   reusable templates with pre-configured strategy parameters that can be"},{"line_number":71,"context_line":"   used as stages in a pipeline."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"   New field:"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"bef85fe5_aa731c0e","line":71,"in_reply_to":"4fecf3f7_1be531d6","updated":"2026-05-27 20:00:26.000000000","message":"Done","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"   New field:"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"   * ``default_parameters``: Optional dict of input parameters for the strategy"},{"line_number":76,"context_line":"     defined in the template. The default parameters can still be overridden"},{"line_number":77,"context_line":"     by the operator when creating an audit from the template."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"e09f7f14_d378dfec","line":75,"in_reply_to":"49259ae6_f43f2e76","updated":"2026-05-27 20:00:26.000000000","message":"+1, in the same way that Audits are validated today in api. This is missing from spec indeed, adding in a new PS.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"   New field:"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"   * ``default_parameters``: Optional dict of input parameters for the strategy"},{"line_number":76,"context_line":"     defined in the template. The default parameters can still be overridden"},{"line_number":77,"context_line":"     by the operator when creating an audit from the template."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"49259ae6_f43f2e76","line":75,"in_reply_to":"bed25697_2caaebdd","updated":"2026-05-25 15:45:13.000000000","message":"we will have to do two levels fo validation. in the api scheme it will be a opace dict, however outside the schema we shoudl to api side validation and confirm the parameter that are pass are valid for the selected goal/stragey.\n\nif it does not pass that valiation we shoudl return a 400 and reject the rquest but we cant do that via the api schema since the goals and stragies are plugable.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"   New field:"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"   * ``default_parameters``: Optional dict of input parameters for the strategy"},{"line_number":76,"context_line":"     defined in the template. The default parameters can still be overridden"},{"line_number":77,"context_line":"     by the operator when creating an audit from the template."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"a6457d01_9fdf2856","line":75,"in_reply_to":"e09f7f14_d378dfec","updated":"2026-05-30 09:50:24.000000000","message":"Done","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"2. ``New Audit Pipeline Resource``"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"   A new ``Audit Pipeline`` resource will be introduced. Audit Pipeline works"},{"line_number":82,"context_line":"   similarly to the current Audit resource, supporting all existing audit"},{"line_number":83,"context_line":"   trigger (ONESHOT, CONTINUOUS, EVENT) and states (PENDING, ONGOING,"},{"line_number":84,"context_line":"   SUCCEEDED, FAILED, CANCELLED, SUSPENDED)."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   The Audit Pipeline state machine is identical to the existing Audit state"},{"line_number":87,"context_line":"   machine with the following valid state transitions:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"221ad2c5_b52f8bcb","line":84,"range":{"start_line":81,"start_character":0,"end_line":84,"end_character":44},"updated":"2026-05-25 15:45:13.000000000","message":"```suggestion\n   An Audit Pipeline works similarly to the current Audit resource,\n   supporting all existing audit trigger (ONESHOT, CONTINUOUS, EVENT)\n   and states (PENDING, ONGOING, SUCCEEDED, FAILED, CANCELLED, SUSPENDED, DELETED).\n```\n\ni am very tempered to de-scope this by stating we will only supprot oneshot for now and defer both continous and event based to future work or a strech goal.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"2. ``New Audit Pipeline Resource``"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"   A new ``Audit Pipeline`` resource will be introduced. Audit Pipeline works"},{"line_number":82,"context_line":"   similarly to the current Audit resource, supporting all existing audit"},{"line_number":83,"context_line":"   trigger (ONESHOT, CONTINUOUS, EVENT) and states (PENDING, ONGOING,"},{"line_number":84,"context_line":"   SUCCEEDED, FAILED, CANCELLED, SUSPENDED)."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   The Audit Pipeline state machine is identical to the existing Audit state"},{"line_number":87,"context_line":"   machine with the following valid state transitions:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"43f85123_b222726f","line":84,"range":{"start_line":81,"start_character":0,"end_line":84,"end_character":44},"in_reply_to":"221ad2c5_b52f8bcb","updated":"2026-05-27 20:00:26.000000000","message":"Yeah, I think that is more feasible to focus on ONESHOT only for now, not only for development but also thinking in the amount of testing. Event audit is also something that we may not have time to text/fix within this release. I will update to reduce the scope here if everybody and hope that everybody agree with that approach.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"2. ``New Audit Pipeline Resource``"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"   A new ``Audit Pipeline`` resource will be introduced. Audit Pipeline works"},{"line_number":82,"context_line":"   similarly to the current Audit resource, supporting all existing audit"},{"line_number":83,"context_line":"   trigger (ONESHOT, CONTINUOUS, EVENT) and states (PENDING, ONGOING,"},{"line_number":84,"context_line":"   SUCCEEDED, FAILED, CANCELLED, SUSPENDED)."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   The Audit Pipeline state machine is identical to the existing Audit state"},{"line_number":87,"context_line":"   machine with the following valid state transitions:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ade8feb7_274157f0","line":84,"range":{"start_line":81,"start_character":0,"end_line":84,"end_character":44},"in_reply_to":"43f85123_b222726f","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":86,"context_line":"   The Audit Pipeline state machine is identical to the existing Audit state"},{"line_number":87,"context_line":"   machine with the following valid state transitions:"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"   * PENDING → [ONGOING, CANCELLED]"},{"line_number":90,"context_line":"   * ONGOING → [SUCCEEDED, FAILED, CANCELLED, SUSPENDED]"},{"line_number":91,"context_line":"   * SUCCEEDED → [DELETED]"},{"line_number":92,"context_line":"   * FAILED → [DELETED]"}],"source_content_type":"text/x-rst","patch_set":10,"id":"01ab197d_9a96e60b","line":89,"in_reply_to":"7daeb998_6529e7df","updated":"2026-05-30 09:50:24.000000000","message":"Done cool that make sense to dedupe","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":86,"context_line":"   The Audit Pipeline state machine is identical to the existing Audit state"},{"line_number":87,"context_line":"   machine with the following valid state transitions:"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"   * PENDING → [ONGOING, CANCELLED]"},{"line_number":90,"context_line":"   * ONGOING → [SUCCEEDED, FAILED, CANCELLED, SUSPENDED]"},{"line_number":91,"context_line":"   * SUCCEEDED → [DELETED]"},{"line_number":92,"context_line":"   * FAILED → [DELETED]"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7daeb998_6529e7df","line":89,"in_reply_to":"a6a7a269_5a312024","updated":"2026-05-27 20:00:26.000000000","message":"Ack, it is duplicating content, so I will keep the states and transitions here only. It is going to be reduced too since it will support ONESHOT only for now.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":86,"context_line":"   The Audit Pipeline state machine is identical to the existing Audit state"},{"line_number":87,"context_line":"   machine with the following valid state transitions:"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"   * PENDING → [ONGOING, CANCELLED]"},{"line_number":90,"context_line":"   * ONGOING → [SUCCEEDED, FAILED, CANCELLED, SUSPENDED]"},{"line_number":91,"context_line":"   * SUCCEEDED → [DELETED]"},{"line_number":92,"context_line":"   * FAILED → [DELETED]"}],"source_content_type":"text/x-rst","patch_set":10,"id":"a6a7a269_5a312024","line":89,"in_reply_to":"fa594631_8c33b9e3","updated":"2026-05-25 15:45:13.000000000","message":"so thi is valid line 84 above should have deleted","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":93,"context_line":"   * CANCELLED → [DELETED]"},{"line_number":94,"context_line":"   * SUSPENDED → [ONGOING, DELETED]"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"   All pipelines start in PENDING state. The SUSPENDED state is the only"},{"line_number":97,"context_line":"   terminal state that allows returning to ONGOING. DELETED is the final"},{"line_number":98,"context_line":"   state with no transitions out. States CANCELLED, DELETED, FAILED, and"},{"line_number":99,"context_line":"   SUSPENDED are considered inactive states."},{"line_number":100,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"a9bb0b3b_21bc0b74","line":97,"range":{"start_line":96,"start_character":41,"end_line":97,"end_character":50},"updated":"2026-05-25 15:45:13.000000000","message":"SUSPENEDED is not a terminal state.\n\nits an intermediat state it just happens to be how we currently model pausing the execution.\n\nterminal state by defintion can never be left so only DELETED is a terminal state","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":93,"context_line":"   * CANCELLED → [DELETED]"},{"line_number":94,"context_line":"   * SUSPENDED → [ONGOING, DELETED]"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"   All pipelines start in PENDING state. The SUSPENDED state is the only"},{"line_number":97,"context_line":"   terminal state that allows returning to ONGOING. DELETED is the final"},{"line_number":98,"context_line":"   state with no transitions out. States CANCELLED, DELETED, FAILED, and"},{"line_number":99,"context_line":"   SUSPENDED are considered inactive states."},{"line_number":100,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"b89d2a90_83410746","line":97,"range":{"start_line":96,"start_character":41,"end_line":97,"end_character":50},"in_reply_to":"a9bb0b3b_21bc0b74","updated":"2026-05-27 20:00:26.000000000","message":"SUSPENDED is now suspended since CONTINUOUS and EVENT are not in the scope.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":93,"context_line":"   * CANCELLED → [DELETED]"},{"line_number":94,"context_line":"   * SUSPENDED → [ONGOING, DELETED]"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"   All pipelines start in PENDING state. The SUSPENDED state is the only"},{"line_number":97,"context_line":"   terminal state that allows returning to ONGOING. DELETED is the final"},{"line_number":98,"context_line":"   state with no transitions out. States CANCELLED, DELETED, FAILED, and"},{"line_number":99,"context_line":"   SUSPENDED are considered inactive states."},{"line_number":100,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"71534d42_9b3f3c09","line":97,"range":{"start_line":96,"start_character":41,"end_line":97,"end_character":50},"in_reply_to":"b89d2a90_83410746","updated":"2026-05-30 09:50:24.000000000","message":":)","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":92,"context_line":"   * FAILED → [DELETED]"},{"line_number":93,"context_line":"   * CANCELLED → [DELETED]"},{"line_number":94,"context_line":"   * SUSPENDED → [ONGOING, DELETED]"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"   All pipelines start in PENDING state. The SUSPENDED state is the only"},{"line_number":97,"context_line":"   terminal state that allows returning to ONGOING. DELETED is the final"},{"line_number":98,"context_line":"   state with no transitions out. States CANCELLED, DELETED, FAILED, and"},{"line_number":99,"context_line":"   SUSPENDED are considered inactive states."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"   Audit Pipeline will fundamentally have the same structure as the Audit"},{"line_number":102,"context_line":"   resource, with a few key differences:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"242839d6_9eb86af9","line":99,"range":{"start_line":95,"start_character":1,"end_line":99,"end_character":44},"updated":"2026-05-25 15:45:13.000000000","message":"```suggestion\n\n   All pipelines start in PENDING state. The SUSPENDED state is the only\n   transient state that allows returning to ONGOING. DELETED is the terminal\n   state of all piplines. CANCELLED, DELETED, FAILED,SUCCEEDED and\n   SUSPENDED are considered inactive states.\n```\nunless we are usign the concpet fo active and inactive states below im not sure we need to defien them here.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":92,"context_line":"   * FAILED → [DELETED]"},{"line_number":93,"context_line":"   * CANCELLED → [DELETED]"},{"line_number":94,"context_line":"   * SUSPENDED → [ONGOING, DELETED]"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"   All pipelines start in PENDING state. The SUSPENDED state is the only"},{"line_number":97,"context_line":"   terminal state that allows returning to ONGOING. DELETED is the final"},{"line_number":98,"context_line":"   state with no transitions out. States CANCELLED, DELETED, FAILED, and"},{"line_number":99,"context_line":"   SUSPENDED are considered inactive states."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"   Audit Pipeline will fundamentally have the same structure as the Audit"},{"line_number":102,"context_line":"   resource, with a few key differences:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"830afbc3_dcb69ed3","line":99,"range":{"start_line":95,"start_character":1,"end_line":99,"end_character":44},"in_reply_to":"242839d6_9eb86af9","updated":"2026-05-30 09:50:24.000000000","message":"this is not somewhat irrelevent due to the scope change but the current verson looks good","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":101,"context_line":"   Audit Pipeline will fundamentally have the same structure as the Audit"},{"line_number":102,"context_line":"   resource, with a few key differences:"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"   * It will accept a list of audit templates as input parameters, each entry"},{"line_number":105,"context_line":"     representing a stage in the pipeline. Audit\u0027s goal and strategy won\u0027t be"},{"line_number":106,"context_line":"     defined directly in the Audit Pipeline resource, but in each of the Audit"},{"line_number":107,"context_line":"     Templates instead."},{"line_number":108,"context_line":"   * It will support a pipeline execution mode, which will allow different"},{"line_number":109,"context_line":"     execution behaviors. Some execution modes (e.g., Cascade) simulate both"},{"line_number":110,"context_line":"     the cluster data model and metric cache between stages, so that each"}],"source_content_type":"text/x-rst","patch_set":10,"id":"20636bb9_180f31f1","line":107,"range":{"start_line":104,"start_character":3,"end_line":107,"end_character":23},"updated":"2026-05-25 15:45:13.000000000","message":"i woudl be tempted to make this a list of stage objects where each \nstage has a name, description and autit template uuid or name and optionaly other paramters in the future.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":101,"context_line":"   Audit Pipeline will fundamentally have the same structure as the Audit"},{"line_number":102,"context_line":"   resource, with a few key differences:"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"   * It will accept a list of audit templates as input parameters, each entry"},{"line_number":105,"context_line":"     representing a stage in the pipeline. Audit\u0027s goal and strategy won\u0027t be"},{"line_number":106,"context_line":"     defined directly in the Audit Pipeline resource, but in each of the Audit"},{"line_number":107,"context_line":"     Templates instead."},{"line_number":108,"context_line":"   * It will support a pipeline execution mode, which will allow different"},{"line_number":109,"context_line":"     execution behaviors. Some execution modes (e.g., Cascade) simulate both"},{"line_number":110,"context_line":"     the cluster data model and metric cache between stages, so that each"}],"source_content_type":"text/x-rst","patch_set":10,"id":"4db63045_91c7abc3","line":107,"range":{"start_line":104,"start_character":3,"end_line":107,"end_character":23},"in_reply_to":"20636bb9_180f31f1","updated":"2026-05-30 09:50:24.000000000","message":"Done","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":112,"context_line":"     previous stage. Other modes (e.g., Composite) execute stages sequentially"},{"line_number":113,"context_line":"     without simulation, simply merging the solutions into a single action"},{"line_number":114,"context_line":"     plan."},{"line_number":115,"context_line":"   * Unlike Audit, Audit Pipeline will not accept strategy ``input_parameters``"},{"line_number":116,"context_line":"     directly. Strategy parameters must be defined as ``default_parameters`` in"},{"line_number":117,"context_line":"     the Audit Template for each stage."},{"line_number":118,"context_line":"   * Audit Pipeline requires a minimum of 2 stages and supports a maximum"},{"line_number":119,"context_line":"     number of stages defined by the ``max_pipeline_stages`` configuration"},{"line_number":120,"context_line":"     option, which defaults to 5. This ensures that pipelines are meaningful"}],"source_content_type":"text/x-rst","patch_set":10,"id":"6af43186_ef17abc7","line":117,"range":{"start_line":115,"start_character":1,"end_line":117,"end_character":39},"updated":"2026-05-25 15:45:13.000000000","message":"if we make it a list of stage object we could optionally accpet input_parters in the stage object in the future.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":112,"context_line":"     previous stage. Other modes (e.g., Composite) execute stages sequentially"},{"line_number":113,"context_line":"     without simulation, simply merging the solutions into a single action"},{"line_number":114,"context_line":"     plan."},{"line_number":115,"context_line":"   * Unlike Audit, Audit Pipeline will not accept strategy ``input_parameters``"},{"line_number":116,"context_line":"     directly. Strategy parameters must be defined as ``default_parameters`` in"},{"line_number":117,"context_line":"     the Audit Template for each stage."},{"line_number":118,"context_line":"   * Audit Pipeline requires a minimum of 2 stages and supports a maximum"},{"line_number":119,"context_line":"     number of stages defined by the ``max_pipeline_stages`` configuration"},{"line_number":120,"context_line":"     option, which defaults to 5. This ensures that pipelines are meaningful"}],"source_content_type":"text/x-rst","patch_set":10,"id":"6a50808d_56431e95","line":117,"range":{"start_line":115,"start_character":1,"end_line":117,"end_character":39},"in_reply_to":"6af43186_ef17abc7","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":115,"context_line":"   * Unlike Audit, Audit Pipeline will not accept strategy ``input_parameters``"},{"line_number":116,"context_line":"     directly. Strategy parameters must be defined as ``default_parameters`` in"},{"line_number":117,"context_line":"     the Audit Template for each stage."},{"line_number":118,"context_line":"   * Audit Pipeline requires a minimum of 2 stages and supports a maximum"},{"line_number":119,"context_line":"     number of stages defined by the ``max_pipeline_stages`` configuration"},{"line_number":120,"context_line":"     option, which defaults to 5. This ensures that pipelines are meaningful"},{"line_number":121,"context_line":"     (require at least two strategies to be combined) while preventing"},{"line_number":122,"context_line":"     resource exhaustion from overly complex pipelines."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"3. ``Pipeline Execution Modes``"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"94ba18de_940245d9","line":122,"range":{"start_line":118,"start_character":5,"end_line":122,"end_character":55},"updated":"2026-05-25 15:45:13.000000000","message":"-1 we generally dont want to have any config driven api behvior so unless we can discuser this limit via the api via a request we shoudl not expose this as configurabel\n\ni would set it somewhere between 8-16 perhsse 10\n\nwe could actully use unified limits in keystone to confgiure this at a gloabl adn per project level\n\n\nhttps://docs.openstack.org/keystone/2026.1/admin/unified-limits.html\n\nthat woudl be a nice way to model this if we did want to make it configurable via a MAX_AUDIT_PIPLINE_STAGE registered limit.\n\nthat would likely need use to properly plan how to use unifed limits in watcher however so this could eb future work.\n\niw woudl hard code if for now.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":115,"context_line":"   * Unlike Audit, Audit Pipeline will not accept strategy ``input_parameters``"},{"line_number":116,"context_line":"     directly. Strategy parameters must be defined as ``default_parameters`` in"},{"line_number":117,"context_line":"     the Audit Template for each stage."},{"line_number":118,"context_line":"   * Audit Pipeline requires a minimum of 2 stages and supports a maximum"},{"line_number":119,"context_line":"     number of stages defined by the ``max_pipeline_stages`` configuration"},{"line_number":120,"context_line":"     option, which defaults to 5. This ensures that pipelines are meaningful"},{"line_number":121,"context_line":"     (require at least two strategies to be combined) while preventing"},{"line_number":122,"context_line":"     resource exhaustion from overly complex pipelines."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"3. ``Pipeline Execution Modes``"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"99184ef5_3c2e972a","line":122,"range":{"start_line":118,"start_character":5,"end_line":122,"end_character":55},"in_reply_to":"94ba18de_940245d9","updated":"2026-05-27 20:00:26.000000000","message":"10 should be enough I think. OK, removing the config option. Defer unified-limits configuration to another implementation and spec","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":115,"context_line":"   * Unlike Audit, Audit Pipeline will not accept strategy ``input_parameters``"},{"line_number":116,"context_line":"     directly. Strategy parameters must be defined as ``default_parameters`` in"},{"line_number":117,"context_line":"     the Audit Template for each stage."},{"line_number":118,"context_line":"   * Audit Pipeline requires a minimum of 2 stages and supports a maximum"},{"line_number":119,"context_line":"     number of stages defined by the ``max_pipeline_stages`` configuration"},{"line_number":120,"context_line":"     option, which defaults to 5. This ensures that pipelines are meaningful"},{"line_number":121,"context_line":"     (require at least two strategies to be combined) while preventing"},{"line_number":122,"context_line":"     resource exhaustion from overly complex pipelines."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"3. ``Pipeline Execution Modes``"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"d018dad2_756b8332","line":122,"range":{"start_line":118,"start_character":5,"end_line":122,"end_character":55},"in_reply_to":"99184ef5_3c2e972a","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":139,"context_line":"     plan, providing optimization and reducing the number of actions to be"},{"line_number":140,"context_line":"     executed."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":".. note::"},{"line_number":143,"context_line":"   The Cascade execution mode is the one that covers most of the use cases,"},{"line_number":144,"context_line":"   and will be the main focus of this specification. The Composite execution"},{"line_number":145,"context_line":"   mode may be added in the current one or in future implementations."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"5aadab85_11fad62f","line":145,"range":{"start_line":142,"start_character":0,"end_line":145,"end_character":69},"updated":"2026-05-25 15:45:13.000000000","message":"i would reinfoce this by rewqorkign this secht to descirbe only the cascade mode and move compisite to a future work \n\nby the way when we were orginally talking about compisote i was exepcteign it to produces mutlipel action plans one per stage and just executiong one after the other with no real optimisation. at all.\n\n\nthe main usecase i had for composite was running workload stablisation in 3 parallel stages each scoped to a seperate AZs \n\n\ni.e. for cases where you don\u0027t actually need any level of action optimisation but instead simplely wanted to schedule multiple audits to run as a group.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":139,"context_line":"     plan, providing optimization and reducing the number of actions to be"},{"line_number":140,"context_line":"     executed."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":".. note::"},{"line_number":143,"context_line":"   The Cascade execution mode is the one that covers most of the use cases,"},{"line_number":144,"context_line":"   and will be the main focus of this specification. The Composite execution"},{"line_number":145,"context_line":"   mode may be added in the current one or in future implementations."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3fd24d82_6b8bc50c","line":145,"range":{"start_line":142,"start_character":0,"end_line":145,"end_character":69},"in_reply_to":"0dfc2c44_8913851a","updated":"2026-05-30 09:50:24.000000000","message":"Done","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":139,"context_line":"     plan, providing optimization and reducing the number of actions to be"},{"line_number":140,"context_line":"     executed."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":".. note::"},{"line_number":143,"context_line":"   The Cascade execution mode is the one that covers most of the use cases,"},{"line_number":144,"context_line":"   and will be the main focus of this specification. The Composite execution"},{"line_number":145,"context_line":"   mode may be added in the current one or in future implementations."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"0dfc2c44_8913851a","line":145,"range":{"start_line":142,"start_character":0,"end_line":145,"end_character":69},"in_reply_to":"5aadab85_11fad62f","updated":"2026-05-27 20:00:26.000000000","message":"Ack, i will focus only in the Cascade Execution Mode here and move other execution modes to Future Work section.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"   The Pipeline Handler will manage CDM mutation between stages depending on"},{"line_number":150,"context_line":"   the execution mode selected. In Cascade execution mode, before each"},{"line_number":151,"context_line":"   stage (except the first), a copy of the CDM is updated based on the"},{"line_number":152,"context_line":"   previous stage\u0027s solution. Strategies will accept an optional pre-populated"},{"line_number":153,"context_line":"   cluster data model, instead of always getting it from the collectors."},{"line_number":154,"context_line":"   The lifecycle of the mutable CDM is tied to the Audit Pipeline execution,"},{"line_number":155,"context_line":"   being created at the start of the pipeline workflow and discarded after"},{"line_number":156,"context_line":"   the final action plan is generated. The CDM is not reused by any other"},{"line_number":157,"context_line":"   audit pipeline execution, not even for the same Audit Pipeline resource"},{"line_number":158,"context_line":"   (for CONTINUOUS types)."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"   Not all actions can be, or need to be, simulated in the mutable cluster"},{"line_number":161,"context_line":"   data model, and those may be ignored in future stages of the pipeline. For"}],"source_content_type":"text/x-rst","patch_set":10,"id":"cad0731a_5ef9aefc","line":158,"range":{"start_line":149,"start_character":2,"end_line":158,"end_character":26},"updated":"2026-05-25 15:45:13.000000000","message":"```suggestion\n   The Pipeline Handler will manage CDM mutation between stages depending on\n   the execution mode selected. In Cascade execution mode, before each stage,\n   a copy of the CDM is updated based on the previous stage\u0027s solution (with\n   the first stage effectively applying a null set of updates to the CDM).\n   Strategies will accept an optional pre-populated cluster data model,\n   instead of always getting it from the collectors.\n   The lifecycle of the mutable CDM is tied to the Audit Pipeline execution,\n   being created at the start of the pipeline workflow and discarded after\n   the final action plan is generated.\n   The CDM is not reused by any other audit pipeline execution,\n   not even for the same Audit Pipeline resource (for CONTINUOUS types).\n```","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"   The Pipeline Handler will manage CDM mutation between stages depending on"},{"line_number":150,"context_line":"   the execution mode selected. In Cascade execution mode, before each"},{"line_number":151,"context_line":"   stage (except the first), a copy of the CDM is updated based on the"},{"line_number":152,"context_line":"   previous stage\u0027s solution. Strategies will accept an optional pre-populated"},{"line_number":153,"context_line":"   cluster data model, instead of always getting it from the collectors."},{"line_number":154,"context_line":"   The lifecycle of the mutable CDM is tied to the Audit Pipeline execution,"},{"line_number":155,"context_line":"   being created at the start of the pipeline workflow and discarded after"},{"line_number":156,"context_line":"   the final action plan is generated. The CDM is not reused by any other"},{"line_number":157,"context_line":"   audit pipeline execution, not even for the same Audit Pipeline resource"},{"line_number":158,"context_line":"   (for CONTINUOUS types)."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"   Not all actions can be, or need to be, simulated in the mutable cluster"},{"line_number":161,"context_line":"   data model, and those may be ignored in future stages of the pipeline. For"}],"source_content_type":"text/x-rst","patch_set":10,"id":"75833b31_4b02542c","line":158,"range":{"start_line":149,"start_character":2,"end_line":158,"end_character":26},"in_reply_to":"9bd61f45_db51fd35","updated":"2026-05-30 09:50:24.000000000","message":"Done","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"4. ``Mutable Cluster Data Model``"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"   The Pipeline Handler will manage CDM mutation between stages depending on"},{"line_number":150,"context_line":"   the execution mode selected. In Cascade execution mode, before each"},{"line_number":151,"context_line":"   stage (except the first), a copy of the CDM is updated based on the"},{"line_number":152,"context_line":"   previous stage\u0027s solution. Strategies will accept an optional pre-populated"},{"line_number":153,"context_line":"   cluster data model, instead of always getting it from the collectors."},{"line_number":154,"context_line":"   The lifecycle of the mutable CDM is tied to the Audit Pipeline execution,"},{"line_number":155,"context_line":"   being created at the start of the pipeline workflow and discarded after"},{"line_number":156,"context_line":"   the final action plan is generated. The CDM is not reused by any other"},{"line_number":157,"context_line":"   audit pipeline execution, not even for the same Audit Pipeline resource"},{"line_number":158,"context_line":"   (for CONTINUOUS types)."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"   Not all actions can be, or need to be, simulated in the mutable cluster"},{"line_number":161,"context_line":"   data model, and those may be ignored in future stages of the pipeline. For"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9bd61f45_db51fd35","line":158,"range":{"start_line":149,"start_character":2,"end_line":158,"end_character":26},"in_reply_to":"cad0731a_5ef9aefc","updated":"2026-05-27 20:00:26.000000000","message":"I made some changes based on your suggestion and with Claude\u0027s assistance.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":157,"context_line":"   audit pipeline execution, not even for the same Audit Pipeline resource"},{"line_number":158,"context_line":"   (for CONTINUOUS types)."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"   Not all actions can be, or need to be, simulated in the mutable cluster"},{"line_number":161,"context_line":"   data model, and those may be ignored in future stages of the pipeline. For"},{"line_number":162,"context_line":"   example, an instance migration without a destination host may be removed"},{"line_number":163,"context_line":"   from the cluster data model since its destination is unknown, but it will"},{"line_number":164,"context_line":"   still be added to the final action plan. A more detailed section in user"},{"line_number":165,"context_line":"   documentation shall list the supported and unsupported strategies and"},{"line_number":166,"context_line":"   actions."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":".. note::"},{"line_number":169,"context_line":"   Some strategies fetch data directly from service clients (e.g., Nova,"},{"line_number":170,"context_line":"   Cinder) instead of using the cluster data model, which may invalidate"}],"source_content_type":"text/x-rst","patch_set":10,"id":"b3727bf0_e2642f92","line":167,"range":{"start_line":160,"start_character":2,"end_line":167,"end_character":1},"updated":"2026-05-25 15:45:13.000000000","message":"this is a little handwavy \n\nim not sure this logically works.\nif a previous stage such as a zone migration ahs determined the vm must be migrated away form the current host we need to ensure that later stages dontr undoe that by moving it back to the same host.\n\ni.e. the souce host in stage 1 has to be be removed form the valid candiate host for a vm in later stages. so we should probaly have some kidn of sentenla here so that later stage know it must mbe moved to a diffent host and that its invalid for a later sate or pipleine manger ot exlimate the migration entirly.\n\nfor example if we do a host maintance stage followed by workload blance and we allow nova nova to select the orginal migration we need to make sure the workload stablasiation satge does not move any vm to the maintance host.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":157,"context_line":"   audit pipeline execution, not even for the same Audit Pipeline resource"},{"line_number":158,"context_line":"   (for CONTINUOUS types)."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"   Not all actions can be, or need to be, simulated in the mutable cluster"},{"line_number":161,"context_line":"   data model, and those may be ignored in future stages of the pipeline. For"},{"line_number":162,"context_line":"   example, an instance migration without a destination host may be removed"},{"line_number":163,"context_line":"   from the cluster data model since its destination is unknown, but it will"},{"line_number":164,"context_line":"   still be added to the final action plan. A more detailed section in user"},{"line_number":165,"context_line":"   documentation shall list the supported and unsupported strategies and"},{"line_number":166,"context_line":"   actions."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":".. note::"},{"line_number":169,"context_line":"   Some strategies fetch data directly from service clients (e.g., Nova,"},{"line_number":170,"context_line":"   Cinder) instead of using the cluster data model, which may invalidate"}],"source_content_type":"text/x-rst","patch_set":10,"id":"c0873368_24a9d92d","line":167,"range":{"start_line":160,"start_character":2,"end_line":167,"end_character":1},"in_reply_to":"b3727bf0_e2642f92","updated":"2026-05-27 20:00:26.000000000","message":"right, that\u0027s what I tried to explain here. A migration without destination host can\u0027t be simulated in the mutable CDM, it can only be removed from the source host (in this case we should not worry about moving it back, since the server will be out of the CDM in the following stages). \nThere is a second scenario that you mentioned, which is the host maintenance/zone migration cases, where we need to exclude the source node/maintanence node from the mutable CDM in the following stages. In some cases, the node will have its service disabled, but in case of zone migration we need to exclude/disable the source node (this specific case is not covered here in the spec).\nGoing to update this in the new PS.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":157,"context_line":"   audit pipeline execution, not even for the same Audit Pipeline resource"},{"line_number":158,"context_line":"   (for CONTINUOUS types)."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"   Not all actions can be, or need to be, simulated in the mutable cluster"},{"line_number":161,"context_line":"   data model, and those may be ignored in future stages of the pipeline. For"},{"line_number":162,"context_line":"   example, an instance migration without a destination host may be removed"},{"line_number":163,"context_line":"   from the cluster data model since its destination is unknown, but it will"},{"line_number":164,"context_line":"   still be added to the final action plan. A more detailed section in user"},{"line_number":165,"context_line":"   documentation shall list the supported and unsupported strategies and"},{"line_number":166,"context_line":"   actions."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":".. note::"},{"line_number":169,"context_line":"   Some strategies fetch data directly from service clients (e.g., Nova,"},{"line_number":170,"context_line":"   Cinder) instead of using the cluster data model, which may invalidate"}],"source_content_type":"text/x-rst","patch_set":10,"id":"e55caac4_d19bbe90","line":167,"range":{"start_line":160,"start_character":2,"end_line":167,"end_character":1},"in_reply_to":"c0873368_24a9d92d","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"5. ``Metric Data Cache``"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"   The metric data cache will store resource metrics retrieved by strategies"},{"line_number":178,"context_line":"   within the same pipeline execution to simulate the mutable state of the"},{"line_number":179,"context_line":"   cluster. The cache can be used to simulate an expected load"},{"line_number":180,"context_line":"   after previous steps optimizations, as well as a simple cache to avoid"},{"line_number":181,"context_line":"   redundant calls to datasource APIs. If a metric data cache is available,"},{"line_number":182,"context_line":"   strategies will use it to get metrics for a resource before making a"},{"line_number":183,"context_line":"   datasource call. When retrieving metrics directly from the"},{"line_number":184,"context_line":"   datasource, the metric data cache will be updated with the new metrics. The"},{"line_number":185,"context_line":"   caching mechanism can be added without too many modifications due to"},{"line_number":186,"context_line":"   existing interfaces defined in BaseStrategy class. The lifecycle of the"},{"line_number":187,"context_line":"   metric data cache is tied to the Audit Pipeline workflow execution, being"},{"line_number":188,"context_line":"   created at the start of the pipeline and discarded after the final action"},{"line_number":189,"context_line":"   plan is generated. The cache is not reused by any other audit pipeline"},{"line_number":190,"context_line":"   execution, not even for the same Audit Pipeline resource (for CONTINUOUS"},{"line_number":191,"context_line":"   types)."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":".. note::"},{"line_number":194,"context_line":"   Some strategies generate solutions that don\u0027t depend on metrics to be"}],"source_content_type":"text/x-rst","patch_set":10,"id":"2755267f_26cdc229","line":191,"range":{"start_line":177,"start_character":0,"end_line":191,"end_character":10},"updated":"2026-05-25 15:45:13.000000000","message":"so the cache proably shoudl not be pipeline specific.\n\nideally stragies woudl not have to crea if they are beign evlaudate din a pipeline or an audit\n\nin the audit case we may decied to make the cache a noop but if its a trivial in memory dictionary cache we may not care.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"5. ``Metric Data Cache``"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"   The metric data cache will store resource metrics retrieved by strategies"},{"line_number":178,"context_line":"   within the same pipeline execution to simulate the mutable state of the"},{"line_number":179,"context_line":"   cluster. The cache can be used to simulate an expected load"},{"line_number":180,"context_line":"   after previous steps optimizations, as well as a simple cache to avoid"},{"line_number":181,"context_line":"   redundant calls to datasource APIs. If a metric data cache is available,"},{"line_number":182,"context_line":"   strategies will use it to get metrics for a resource before making a"},{"line_number":183,"context_line":"   datasource call. When retrieving metrics directly from the"},{"line_number":184,"context_line":"   datasource, the metric data cache will be updated with the new metrics. The"},{"line_number":185,"context_line":"   caching mechanism can be added without too many modifications due to"},{"line_number":186,"context_line":"   existing interfaces defined in BaseStrategy class. The lifecycle of the"},{"line_number":187,"context_line":"   metric data cache is tied to the Audit Pipeline workflow execution, being"},{"line_number":188,"context_line":"   created at the start of the pipeline and discarded after the final action"},{"line_number":189,"context_line":"   plan is generated. The cache is not reused by any other audit pipeline"},{"line_number":190,"context_line":"   execution, not even for the same Audit Pipeline resource (for CONTINUOUS"},{"line_number":191,"context_line":"   types)."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":".. note::"},{"line_number":194,"context_line":"   Some strategies generate solutions that don\u0027t depend on metrics to be"}],"source_content_type":"text/x-rst","patch_set":10,"id":"48976ee9_ba1f6f69","line":191,"range":{"start_line":177,"start_character":0,"end_line":191,"end_character":10},"in_reply_to":"17a027b3_0c4087db","updated":"2026-05-30 09:50:24.000000000","message":"i think if we can remove that direct oslo.cache usage that woudl also be a nice win based on the simplifcation","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"5. ``Metric Data Cache``"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"   The metric data cache will store resource metrics retrieved by strategies"},{"line_number":178,"context_line":"   within the same pipeline execution to simulate the mutable state of the"},{"line_number":179,"context_line":"   cluster. The cache can be used to simulate an expected load"},{"line_number":180,"context_line":"   after previous steps optimizations, as well as a simple cache to avoid"},{"line_number":181,"context_line":"   redundant calls to datasource APIs. If a metric data cache is available,"},{"line_number":182,"context_line":"   strategies will use it to get metrics for a resource before making a"},{"line_number":183,"context_line":"   datasource call. When retrieving metrics directly from the"},{"line_number":184,"context_line":"   datasource, the metric data cache will be updated with the new metrics. The"},{"line_number":185,"context_line":"   caching mechanism can be added without too many modifications due to"},{"line_number":186,"context_line":"   existing interfaces defined in BaseStrategy class. The lifecycle of the"},{"line_number":187,"context_line":"   metric data cache is tied to the Audit Pipeline workflow execution, being"},{"line_number":188,"context_line":"   created at the start of the pipeline and discarded after the final action"},{"line_number":189,"context_line":"   plan is generated. The cache is not reused by any other audit pipeline"},{"line_number":190,"context_line":"   execution, not even for the same Audit Pipeline resource (for CONTINUOUS"},{"line_number":191,"context_line":"   types)."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":".. note::"},{"line_number":194,"context_line":"   Some strategies generate solutions that don\u0027t depend on metrics to be"}],"source_content_type":"text/x-rst","patch_set":10,"id":"17a027b3_0c4087db","line":191,"range":{"start_line":177,"start_character":0,"end_line":191,"end_character":10},"in_reply_to":"2755267f_26cdc229","updated":"2026-05-27 20:00:26.000000000","message":"Yes, the cache can be used in both audit and audit pipelines. I tried to make clear here that in audit pipeline we will use a mutable metric data cache, but it will not be shared across pipeline executions. Today we also have some strategies using oslo_cache for metrics, so adding the data cache for audit may not be a improvement for these strategies in the end.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":189,"context_line":"   plan is generated. The cache is not reused by any other audit pipeline"},{"line_number":190,"context_line":"   execution, not even for the same Audit Pipeline resource (for CONTINUOUS"},{"line_number":191,"context_line":"   types)."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":".. note::"},{"line_number":194,"context_line":"   Some strategies generate solutions that don\u0027t depend on metrics to be"},{"line_number":195,"context_line":"   calculated, and in this case, the metric data cache will not be populated."},{"line_number":196,"context_line":"   Before each pipeline stage, the metric data cache may need to be"},{"line_number":197,"context_line":"   pre-fetched before being mutated, before executing the stage\u0027s strategy,"},{"line_number":198,"context_line":"   in order to properly simulate the expected state of the cluster."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"   The Metric Data Cache can be used by Strategies to avoid redundant"},{"line_number":201,"context_line":"   datasource API calls when calculating solutions. Its initial implementation"},{"line_number":202,"context_line":"   can be made without any Audit Pipeline resource proposed in this spec."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"6. ``Pipeline Planner``"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"5ce181a2_734ecf34","line":202,"range":{"start_line":192,"start_character":1,"end_line":202,"end_character":73},"updated":"2026-05-25 15:45:13.000000000","message":"so ideally the cache woudl be trasnparent to the stragies\n\nthey shoudl not need to be modifed to opt intoi useint the cache\n\ni wonder if we could wrap the interface to the datasocnes that they recive so that we can inject the cache into them without the stragies knowing?\n\nidealy stragies shoudl not need to be writen to wrk in a pipeline so we dont want to expose that the cache exists to them if at all posible.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":189,"context_line":"   plan is generated. The cache is not reused by any other audit pipeline"},{"line_number":190,"context_line":"   execution, not even for the same Audit Pipeline resource (for CONTINUOUS"},{"line_number":191,"context_line":"   types)."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":".. note::"},{"line_number":194,"context_line":"   Some strategies generate solutions that don\u0027t depend on metrics to be"},{"line_number":195,"context_line":"   calculated, and in this case, the metric data cache will not be populated."},{"line_number":196,"context_line":"   Before each pipeline stage, the metric data cache may need to be"},{"line_number":197,"context_line":"   pre-fetched before being mutated, before executing the stage\u0027s strategy,"},{"line_number":198,"context_line":"   in order to properly simulate the expected state of the cluster."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"   The Metric Data Cache can be used by Strategies to avoid redundant"},{"line_number":201,"context_line":"   datasource API calls when calculating solutions. Its initial implementation"},{"line_number":202,"context_line":"   can be made without any Audit Pipeline resource proposed in this spec."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"6. ``Pipeline Planner``"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"577bd003_e0ba3a80","line":202,"range":{"start_line":192,"start_character":1,"end_line":202,"end_character":73},"in_reply_to":"1742ef1c_f44b1d34","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":189,"context_line":"   plan is generated. The cache is not reused by any other audit pipeline"},{"line_number":190,"context_line":"   execution, not even for the same Audit Pipeline resource (for CONTINUOUS"},{"line_number":191,"context_line":"   types)."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":".. note::"},{"line_number":194,"context_line":"   Some strategies generate solutions that don\u0027t depend on metrics to be"},{"line_number":195,"context_line":"   calculated, and in this case, the metric data cache will not be populated."},{"line_number":196,"context_line":"   Before each pipeline stage, the metric data cache may need to be"},{"line_number":197,"context_line":"   pre-fetched before being mutated, before executing the stage\u0027s strategy,"},{"line_number":198,"context_line":"   in order to properly simulate the expected state of the cluster."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"   The Metric Data Cache can be used by Strategies to avoid redundant"},{"line_number":201,"context_line":"   datasource API calls when calculating solutions. Its initial implementation"},{"line_number":202,"context_line":"   can be made without any Audit Pipeline resource proposed in this spec."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"6. ``Pipeline Planner``"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"1742ef1c_f44b1d34","line":202,"range":{"start_line":192,"start_character":1,"end_line":202,"end_character":73},"in_reply_to":"5ce181a2_734ecf34","updated":"2026-05-27 20:00:26.000000000","message":"Correct, changes might be needed only at datasources side, to guarantee that metric cache is checked before querying datasources. No changes to the strategy is expected for this.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":206,"context_line":"   A new planner will be created to optimize and combine all solutions"},{"line_number":207,"context_line":"   into a single action plan. It will be responsible for:"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"   * Merge the solutions from all stages into a single one, tracking which"},{"line_number":210,"context_line":"     stage each action originated from"},{"line_number":211,"context_line":"   * Collapse migration chains (e.g., migrate A→B then B→C becomes A→C)"},{"line_number":212,"context_line":"   * Remove circular migrations (e.g., A→B followed by B→A, both eliminated)"},{"line_number":213,"context_line":"   * Maintain action dependencies and parallelization opportunities"}],"source_content_type":"text/x-rst","patch_set":10,"id":"f10869ba_45f98219","line":210,"range":{"start_line":209,"start_character":5,"end_line":210,"end_character":38},"updated":"2026-05-25 15:45:13.000000000","message":"so the pipeline handler or planner planner (which ever is the one that is executing the stragies to produce the next solution will need to update the cluster data model and host stats to siulate the action of the preior plan.\nbefore the next stage is exeduted in cascade mode.\n\nin compisite mode this is a no op as the assumetion in compiste mode is you are grouping indepented audits that do not interact.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":206,"context_line":"   A new planner will be created to optimize and combine all solutions"},{"line_number":207,"context_line":"   into a single action plan. It will be responsible for:"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"   * Merge the solutions from all stages into a single one, tracking which"},{"line_number":210,"context_line":"     stage each action originated from"},{"line_number":211,"context_line":"   * Collapse migration chains (e.g., migrate A→B then B→C becomes A→C)"},{"line_number":212,"context_line":"   * Remove circular migrations (e.g., A→B followed by B→A, both eliminated)"},{"line_number":213,"context_line":"   * Maintain action dependencies and parallelization opportunities"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ffe4af4e_22917b98","line":210,"range":{"start_line":209,"start_character":5,"end_line":210,"end_character":38},"in_reply_to":"4db6150b_fe97132b","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":206,"context_line":"   A new planner will be created to optimize and combine all solutions"},{"line_number":207,"context_line":"   into a single action plan. It will be responsible for:"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"   * Merge the solutions from all stages into a single one, tracking which"},{"line_number":210,"context_line":"     stage each action originated from"},{"line_number":211,"context_line":"   * Collapse migration chains (e.g., migrate A→B then B→C becomes A→C)"},{"line_number":212,"context_line":"   * Remove circular migrations (e.g., A→B followed by B→A, both eliminated)"},{"line_number":213,"context_line":"   * Maintain action dependencies and parallelization opportunities"}],"source_content_type":"text/x-rst","patch_set":10,"id":"4db6150b_fe97132b","line":210,"range":{"start_line":209,"start_character":5,"end_line":210,"end_character":38},"in_reply_to":"f10869ba_45f98219","updated":"2026-05-27 20:00:26.000000000","message":"Pipeline Handler is going to update CDM and Metric Cache at each iteration. The Planner (this section) is responsible for merging the solutions together at the end (similar to Audit workflow)","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":209,"context_line":"   * Merge the solutions from all stages into a single one, tracking which"},{"line_number":210,"context_line":"     stage each action originated from"},{"line_number":211,"context_line":"   * Collapse migration chains (e.g., migrate A→B then B→C becomes A→C)"},{"line_number":212,"context_line":"   * Remove circular migrations (e.g., A→B followed by B→A, both eliminated)"},{"line_number":213,"context_line":"   * Maintain action dependencies and parallelization opportunities"},{"line_number":214,"context_line":"   * Concatenate efficacy indicators from all stages"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"c66c851c_844082b8","line":212,"range":{"start_line":212,"start_character":1,"end_line":212,"end_character":76},"updated":"2026-05-25 15:45:13.000000000","message":"this is not generally allowed\n\nif the A-\u003eB migration was added by the host maintance stragy for example we need to ensure that we will never generate a B-\u003eA migration because host A should not be a vaild host for migration because its disabled.\n\nif we are doing a worload consoldiation followed by workload stablisation on the ohter hand its ok\n\nso we may need to anotate migration in some way as coalesceable or collapsible\notherwise we need to ensure that he simulation layer properly handels the case wehre it shoudl not be posibel to move a given host back to its startign host whne that woudl voidlate a prior requireemtn.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":209,"context_line":"   * Merge the solutions from all stages into a single one, tracking which"},{"line_number":210,"context_line":"     stage each action originated from"},{"line_number":211,"context_line":"   * Collapse migration chains (e.g., migrate A→B then B→C becomes A→C)"},{"line_number":212,"context_line":"   * Remove circular migrations (e.g., A→B followed by B→A, both eliminated)"},{"line_number":213,"context_line":"   * Maintain action dependencies and parallelization opportunities"},{"line_number":214,"context_line":"   * Concatenate efficacy indicators from all stages"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"e9b10ee3_86a3f717","line":212,"range":{"start_line":212,"start_character":1,"end_line":212,"end_character":76},"in_reply_to":"6ab447da_9c5a4acc","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":209,"context_line":"   * Merge the solutions from all stages into a single one, tracking which"},{"line_number":210,"context_line":"     stage each action originated from"},{"line_number":211,"context_line":"   * Collapse migration chains (e.g., migrate A→B then B→C becomes A→C)"},{"line_number":212,"context_line":"   * Remove circular migrations (e.g., A→B followed by B→A, both eliminated)"},{"line_number":213,"context_line":"   * Maintain action dependencies and parallelization opportunities"},{"line_number":214,"context_line":"   * Concatenate efficacy indicators from all stages"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"6ab447da_9c5a4acc","line":212,"range":{"start_line":212,"start_character":1,"end_line":212,"end_character":76},"in_reply_to":"c66c851c_844082b8","updated":"2026-05-27 20:00:26.000000000","message":"It is not expected to be solved at Planner phase, but during Pipeline execution loop. Iterations should have a CDM updated in a way that will not allow a workload_balancing strategy to move the instance back to a host for some strategies/goals (host maintenance, zone migration, etc)\nThe idea of the Planner is just to merge and optimize solutions from all stages of the pipeline. If B -\u003e A is not valid, it should be fixed in the pipeline loop phase.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":230,"context_line":"   provided by each strategy, and are not part of the Planner post-processing,"},{"line_number":231,"context_line":"   which makes it harder to implement a unified approach outside the"},{"line_number":232,"context_line":"   strategies."},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"Architecture Overview"},{"line_number":235,"context_line":"---------------------"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"The following diagram shows the sequence of processes that happen when an"},{"line_number":238,"context_line":"Audit Pipeline, using the Cascade execution mode, is triggered:"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"::"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    +---------------------------+"},{"line_number":243,"context_line":"    |  Audit Pipeline           |"},{"line_number":244,"context_line":"    |  execution_mode:          |"},{"line_number":245,"context_line":"    |   - cascade               |"},{"line_number":246,"context_line":"    |  stages:                  |"},{"line_number":247,"context_line":"    |   - [template1, template2]|"},{"line_number":248,"context_line":"    +------------+--------------+"},{"line_number":249,"context_line":"                 |"},{"line_number":250,"context_line":"                 | (Audit Pipeline trigger, type\u003dONESHOT)"},{"line_number":251,"context_line":"                 v"},{"line_number":252,"context_line":"    +------------+-------------+"},{"line_number":253,"context_line":"    |  Initialize CDM and      |"},{"line_number":254,"context_line":"    |  Metric Cache            |"},{"line_number":255,"context_line":"    +------------+-------------+"},{"line_number":256,"context_line":"                 |"},{"line_number":257,"context_line":"                 v"},{"line_number":258,"context_line":"    +------------+-------------+     +-------------------------+"},{"line_number":259,"context_line":"    | Stage 1                  |     | Strategy 1              |"},{"line_number":260,"context_line":"    | (Audit Template 1)       | --\u003e | input: CDM, MetricCache |"},{"line_number":261,"context_line":"    |                          |     | output: Solution1       |"},{"line_number":262,"context_line":"    +--------------------------+     +-------------------------+"},{"line_number":263,"context_line":"                 |"},{"line_number":264,"context_line":"                 v"},{"line_number":265,"context_line":"    +------------+-------------+"},{"line_number":266,"context_line":"    |  Update CDM based on     |"},{"line_number":267,"context_line":"    |  Solution1               |"},{"line_number":268,"context_line":"    +------------+-------------+"},{"line_number":269,"context_line":"                 |"},{"line_number":270,"context_line":"                 v"},{"line_number":271,"context_line":"    +------------+-------------+"},{"line_number":272,"context_line":"    |  Pre-fetch Metrics for   |"},{"line_number":273,"context_line":"    |  resources in Solution1  |"},{"line_number":274,"context_line":"    |  (on cache miss)         |"},{"line_number":275,"context_line":"    +------------+-------------+"},{"line_number":276,"context_line":"                 |"},{"line_number":277,"context_line":"                 v"},{"line_number":278,"context_line":"    +------------+-------------+"},{"line_number":279,"context_line":"    |  Update Metric Cache     |"},{"line_number":280,"context_line":"    |  based on Solution1      |"},{"line_number":281,"context_line":"    +------------+-------------+"},{"line_number":282,"context_line":"                 |"},{"line_number":283,"context_line":"                 v"},{"line_number":284,"context_line":"    +------------+-------------+     +--------------------------+"},{"line_number":285,"context_line":"    | Stage 2                  |     | Strategy 2               |"},{"line_number":286,"context_line":"    | (Audit Template 2)       | --\u003e | input: CDM\u0027, MetricCache\u0027|"},{"line_number":287,"context_line":"    |                          |     | output: Solution2        |"},{"line_number":288,"context_line":"    +--------------------------+     +--------------------------+"},{"line_number":289,"context_line":"                 |"},{"line_number":290,"context_line":"                 v"},{"line_number":291,"context_line":"    +------------+-------------+"},{"line_number":292,"context_line":"    | PipelinePlanner          |"},{"line_number":293,"context_line":"    | - Merge solutions        |"},{"line_number":294,"context_line":"    | - Optimize actions       |"},{"line_number":295,"context_line":"    | - Handle conflicts       |"},{"line_number":296,"context_line":"    +------------+-------------+"},{"line_number":297,"context_line":"                 |"},{"line_number":298,"context_line":"                 v"},{"line_number":299,"context_line":"    +------------+-------------+"},{"line_number":300,"context_line":"    |      Action Plan         |"},{"line_number":301,"context_line":"    +--------------------------+"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Alternatives"},{"line_number":304,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"4142c6c7_3af7b245","line":301,"range":{"start_line":233,"start_character":1,"end_line":301,"end_character":32},"updated":"2026-05-25 15:45:13.000000000","message":"so i think this is more like this\n\n```\n\nAudit Pipeline Execution (Cascade Mode)\n---------------------\n\nThe following diagram shows the sequence of processes that happen when an\nAudit Pipeline, using the Cascade execution mode, is triggered:\n\n::\n\n\n+-----------------------------------------------------------------------+\n|                          PIPELINE HANDLER                             |\n|                    (Orchestrator \u0026 Simulator)                         |\n+-----------------------------------------------------------------------+\n|                                                                       |\n|  (1) SETUP BASE ENVIRONMENT                                           |\n|      - Fetches initial CDM (Structural State)                         |\n|      - Initializes Metric Cache (Performance State)                   |\n|                                                                       |\n|  (2) EXTERNAL SIMULATION LOOP (For Stage 1 to N)                      |\n|      +-------------------------------------------------------------+  |\n|      |  a. SIMULATE PROJECTED WORLD (External to Strategy)         |  |\n|      |     1. Apply previous Solution to CDM (e.g. Move VM)        |  |\n|      |     2. Inject Synthetic Metrics to Cache (e.g. Adjust Load) |  |\n|      |     * Note: Stage 1 applies a \"Null Update\" here.           |  |\n|      |                                                             |  |\n|      |  b. EXECUTE ISOLATED STRATEGY                               |  |\n|      |     +-------------------------------------------------+     |  |\n|      |     |             WATCHER STRATEGY (Agnostic)         |     |  |\n|      |     |  - Reads CDM as the \"Current State\"             |     |  |\n|      |     |  - Requests Metrics from Provider               |     |  |\n|      |     +------------------------+------------------------+     |  |\n|      |                              |                              |  |\n|      |               (Query)        |      (Result)                |  |\n|      |               vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv                |  |\n|      |     +-------------------------------------------------+     |  |\n|      |     |       TRANSPARENT DATA PROVIDER (Caching)       |     |  |\n|      |     |                                                 |     |  |\n|      |     |  1. HIT: Returns Synthetic or Cached Metric     |     |  |\n|      |     |  2. MISS: Fetches from Backend \u0026 Stores in Cache|     |  |\n|      |     +-------------------------------------------------+     |  |\n|      |                              |                              |  |\n|      |  c. CAPTURE SOLUTION         v                              |  |\n|      |     - Solution is stored to drive the next simulation step  |  |\n|      +-------------------------------------------------------------+  |\n|                                                                       |\n|  (3) CONSOLIDATION                                                    |\n|      - Hands all solutions to the Pipeline Planner for final review.  |\n+----------------------------------+------------------------------------+\n                                   |\n                                   v\n+-----------------------------------------------------------------------+\n|                          PIPELINE PLANNER                             |\n|                                                                       |\n|  - Solution Consolidation: Merges S1 through Sn                       |\n|  - Global Optimization: orders operation for parallel execution       |\n|  - Result: Generates the cohesive Action Plan                         |\n+----------------------------------+------------------------------------+\n                                   |\n                                   v\n+-----------------------------------------------------------------------+\n|                         FINAL ACTION PLAN                             |\n|              (Ready for Database Persistence/Audit State)             |\n+-----------------------------------------------------------------------+\n```","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":230,"context_line":"   provided by each strategy, and are not part of the Planner post-processing,"},{"line_number":231,"context_line":"   which makes it harder to implement a unified approach outside the"},{"line_number":232,"context_line":"   strategies."},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"Architecture Overview"},{"line_number":235,"context_line":"---------------------"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"The following diagram shows the sequence of processes that happen when an"},{"line_number":238,"context_line":"Audit Pipeline, using the Cascade execution mode, is triggered:"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"::"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    +---------------------------+"},{"line_number":243,"context_line":"    |  Audit Pipeline           |"},{"line_number":244,"context_line":"    |  execution_mode:          |"},{"line_number":245,"context_line":"    |   - cascade               |"},{"line_number":246,"context_line":"    |  stages:                  |"},{"line_number":247,"context_line":"    |   - [template1, template2]|"},{"line_number":248,"context_line":"    +------------+--------------+"},{"line_number":249,"context_line":"                 |"},{"line_number":250,"context_line":"                 | (Audit Pipeline trigger, type\u003dONESHOT)"},{"line_number":251,"context_line":"                 v"},{"line_number":252,"context_line":"    +------------+-------------+"},{"line_number":253,"context_line":"    |  Initialize CDM and      |"},{"line_number":254,"context_line":"    |  Metric Cache            |"},{"line_number":255,"context_line":"    +------------+-------------+"},{"line_number":256,"context_line":"                 |"},{"line_number":257,"context_line":"                 v"},{"line_number":258,"context_line":"    +------------+-------------+     +-------------------------+"},{"line_number":259,"context_line":"    | Stage 1                  |     | Strategy 1              |"},{"line_number":260,"context_line":"    | (Audit Template 1)       | --\u003e | input: CDM, MetricCache |"},{"line_number":261,"context_line":"    |                          |     | output: Solution1       |"},{"line_number":262,"context_line":"    +--------------------------+     +-------------------------+"},{"line_number":263,"context_line":"                 |"},{"line_number":264,"context_line":"                 v"},{"line_number":265,"context_line":"    +------------+-------------+"},{"line_number":266,"context_line":"    |  Update CDM based on     |"},{"line_number":267,"context_line":"    |  Solution1               |"},{"line_number":268,"context_line":"    +------------+-------------+"},{"line_number":269,"context_line":"                 |"},{"line_number":270,"context_line":"                 v"},{"line_number":271,"context_line":"    +------------+-------------+"},{"line_number":272,"context_line":"    |  Pre-fetch Metrics for   |"},{"line_number":273,"context_line":"    |  resources in Solution1  |"},{"line_number":274,"context_line":"    |  (on cache miss)         |"},{"line_number":275,"context_line":"    +------------+-------------+"},{"line_number":276,"context_line":"                 |"},{"line_number":277,"context_line":"                 v"},{"line_number":278,"context_line":"    +------------+-------------+"},{"line_number":279,"context_line":"    |  Update Metric Cache     |"},{"line_number":280,"context_line":"    |  based on Solution1      |"},{"line_number":281,"context_line":"    +------------+-------------+"},{"line_number":282,"context_line":"                 |"},{"line_number":283,"context_line":"                 v"},{"line_number":284,"context_line":"    +------------+-------------+     +--------------------------+"},{"line_number":285,"context_line":"    | Stage 2                  |     | Strategy 2               |"},{"line_number":286,"context_line":"    | (Audit Template 2)       | --\u003e | input: CDM\u0027, MetricCache\u0027|"},{"line_number":287,"context_line":"    |                          |     | output: Solution2        |"},{"line_number":288,"context_line":"    +--------------------------+     +--------------------------+"},{"line_number":289,"context_line":"                 |"},{"line_number":290,"context_line":"                 v"},{"line_number":291,"context_line":"    +------------+-------------+"},{"line_number":292,"context_line":"    | PipelinePlanner          |"},{"line_number":293,"context_line":"    | - Merge solutions        |"},{"line_number":294,"context_line":"    | - Optimize actions       |"},{"line_number":295,"context_line":"    | - Handle conflicts       |"},{"line_number":296,"context_line":"    +------------+-------------+"},{"line_number":297,"context_line":"                 |"},{"line_number":298,"context_line":"                 v"},{"line_number":299,"context_line":"    +------------+-------------+"},{"line_number":300,"context_line":"    |      Action Plan         |"},{"line_number":301,"context_line":"    +--------------------------+"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Alternatives"},{"line_number":304,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"85500acc_3d6634f2","line":301,"range":{"start_line":233,"start_character":1,"end_line":301,"end_character":32},"in_reply_to":"4142c6c7_3af7b245","updated":"2026-05-27 20:00:26.000000000","message":"Ack, a new diagram was generated based on this proposal, thanks.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":230,"context_line":"   provided by each strategy, and are not part of the Planner post-processing,"},{"line_number":231,"context_line":"   which makes it harder to implement a unified approach outside the"},{"line_number":232,"context_line":"   strategies."},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"Architecture Overview"},{"line_number":235,"context_line":"---------------------"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"The following diagram shows the sequence of processes that happen when an"},{"line_number":238,"context_line":"Audit Pipeline, using the Cascade execution mode, is triggered:"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"::"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    +---------------------------+"},{"line_number":243,"context_line":"    |  Audit Pipeline           |"},{"line_number":244,"context_line":"    |  execution_mode:          |"},{"line_number":245,"context_line":"    |   - cascade               |"},{"line_number":246,"context_line":"    |  stages:                  |"},{"line_number":247,"context_line":"    |   - [template1, template2]|"},{"line_number":248,"context_line":"    +------------+--------------+"},{"line_number":249,"context_line":"                 |"},{"line_number":250,"context_line":"                 | (Audit Pipeline trigger, type\u003dONESHOT)"},{"line_number":251,"context_line":"                 v"},{"line_number":252,"context_line":"    +------------+-------------+"},{"line_number":253,"context_line":"    |  Initialize CDM and      |"},{"line_number":254,"context_line":"    |  Metric Cache            |"},{"line_number":255,"context_line":"    +------------+-------------+"},{"line_number":256,"context_line":"                 |"},{"line_number":257,"context_line":"                 v"},{"line_number":258,"context_line":"    +------------+-------------+     +-------------------------+"},{"line_number":259,"context_line":"    | Stage 1                  |     | Strategy 1              |"},{"line_number":260,"context_line":"    | (Audit Template 1)       | --\u003e | input: CDM, MetricCache |"},{"line_number":261,"context_line":"    |                          |     | output: Solution1       |"},{"line_number":262,"context_line":"    +--------------------------+     +-------------------------+"},{"line_number":263,"context_line":"                 |"},{"line_number":264,"context_line":"                 v"},{"line_number":265,"context_line":"    +------------+-------------+"},{"line_number":266,"context_line":"    |  Update CDM based on     |"},{"line_number":267,"context_line":"    |  Solution1               |"},{"line_number":268,"context_line":"    +------------+-------------+"},{"line_number":269,"context_line":"                 |"},{"line_number":270,"context_line":"                 v"},{"line_number":271,"context_line":"    +------------+-------------+"},{"line_number":272,"context_line":"    |  Pre-fetch Metrics for   |"},{"line_number":273,"context_line":"    |  resources in Solution1  |"},{"line_number":274,"context_line":"    |  (on cache miss)         |"},{"line_number":275,"context_line":"    +------------+-------------+"},{"line_number":276,"context_line":"                 |"},{"line_number":277,"context_line":"                 v"},{"line_number":278,"context_line":"    +------------+-------------+"},{"line_number":279,"context_line":"    |  Update Metric Cache     |"},{"line_number":280,"context_line":"    |  based on Solution1      |"},{"line_number":281,"context_line":"    +------------+-------------+"},{"line_number":282,"context_line":"                 |"},{"line_number":283,"context_line":"                 v"},{"line_number":284,"context_line":"    +------------+-------------+     +--------------------------+"},{"line_number":285,"context_line":"    | Stage 2                  |     | Strategy 2               |"},{"line_number":286,"context_line":"    | (Audit Template 2)       | --\u003e | input: CDM\u0027, MetricCache\u0027|"},{"line_number":287,"context_line":"    |                          |     | output: Solution2        |"},{"line_number":288,"context_line":"    +--------------------------+     +--------------------------+"},{"line_number":289,"context_line":"                 |"},{"line_number":290,"context_line":"                 v"},{"line_number":291,"context_line":"    +------------+-------------+"},{"line_number":292,"context_line":"    | PipelinePlanner          |"},{"line_number":293,"context_line":"    | - Merge solutions        |"},{"line_number":294,"context_line":"    | - Optimize actions       |"},{"line_number":295,"context_line":"    | - Handle conflicts       |"},{"line_number":296,"context_line":"    +------------+-------------+"},{"line_number":297,"context_line":"                 |"},{"line_number":298,"context_line":"                 v"},{"line_number":299,"context_line":"    +------------+-------------+"},{"line_number":300,"context_line":"    |      Action Plan         |"},{"line_number":301,"context_line":"    +--------------------------+"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"Alternatives"},{"line_number":304,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"34393acf_7893f8b9","line":301,"range":{"start_line":233,"start_character":1,"end_line":301,"end_character":32},"in_reply_to":"85500acc_3d6634f2","updated":"2026-05-30 09:50:24.000000000","message":"Done","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":326,"context_line":"Add a new optional field to the Audit Template model, that will be used to"},{"line_number":327,"context_line":"pass default parameters to the strategy::"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    default_parameters \u003d Dict (nullable)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"``New Audit Pipeline Resource``"},{"line_number":332,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"e6a5ab4e_1e0a5ff2","line":329,"updated":"2026-05-25 15:45:13.000000000","message":"what is the db datatype for this\n\nwill it be a TEXT field or an NVARCAR with  fixed size?\n\n\nthe diffent iss a text filed is sotread ad a seperate file on disk with just a pointor to the data in the row. thsi si good for large ro unbounded data that wont be used for filterign in queries. i think this is listly correct in this case.\n\na nvarcar is a fixed size colume that will take up that fixed size even if it empty in the db per row, becasue it stored inline in the row any queries that need to match on it are faster but it also is less efficent if tis not used\n\nso i would prefer this to be a text filed. at the db level.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":326,"context_line":"Add a new optional field to the Audit Template model, that will be used to"},{"line_number":327,"context_line":"pass default parameters to the strategy::"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    default_parameters \u003d Dict (nullable)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"``New Audit Pipeline Resource``"},{"line_number":332,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"0f73efe4_1266ed01","line":329,"in_reply_to":"5445da7f_f8f3cb92","updated":"2026-05-30 09:50:24.000000000","message":"Done","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":326,"context_line":"Add a new optional field to the Audit Template model, that will be used to"},{"line_number":327,"context_line":"pass default parameters to the strategy::"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    default_parameters \u003d Dict (nullable)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"``New Audit Pipeline Resource``"},{"line_number":332,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"5445da7f_f8f3cb92","line":329,"in_reply_to":"e6a5ab4e_1e0a5ff2","updated":"2026-05-27 20:00:26.000000000","message":"ack, it should be JSONEncodedDict that resolves to TEXT, i will update it","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    default_parameters \u003d Dict (nullable)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"``New Audit Pipeline Resource``"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"Create a new ``AuditPipeline`` model with the following fields. The model"},{"line_number":334,"context_line":"structure is similar to the existing ``Audit`` model, with trigger fields"},{"line_number":335,"context_line":"embedded directly in the resource:"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"* ``id``: Integer primary key"},{"line_number":338,"context_line":"* ``uuid``: UUID"},{"line_number":339,"context_line":"* ``name``: String (nullable)"},{"line_number":340,"context_line":"* ``execution_mode``: String (CASCADE, COMPOSITE)"},{"line_number":341,"context_line":"* ``state``: String (PENDING, ONGOING, SUCCEEDED, FAILED, CANCELLED, SUSPENDED)"},{"line_number":342,"context_line":"* ``stages``: List of Audit Template UUIDs (minimum 2, maximum defined by"},{"line_number":343,"context_line":"  configuration option ``max_pipeline_stages``, defaults to 5)"},{"line_number":344,"context_line":"* ``audit_type``: String (ONESHOT, CONTINUOUS, EVENT)"},{"line_number":345,"context_line":"* ``interval``: String (nullable)"},{"line_number":346,"context_line":"* ``auto_trigger``: Boolean"},{"line_number":347,"context_line":"* ``next_run_time``: DateTime (nullable)"},{"line_number":348,"context_line":"* ``start_time``: DateTime (nullable)"},{"line_number":349,"context_line":"* ``end_time``: DateTime (nullable)"},{"line_number":350,"context_line":"* ``hostname``: String (nullable)"},{"line_number":351,"context_line":"* ``status_message``: String (nullable)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"``Action Plan Changes``"},{"line_number":354,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"d8510e4d_02d7baf4","line":351,"range":{"start_line":331,"start_character":0,"end_line":351,"end_character":39},"updated":"2026-05-25 15:45:13.000000000","message":"same generail problem below you have specified the python types but not\nhow they will map to the db types\n\nname and hostnaem shoudl be fixed lenght strings.\n\ni would suggest 64 adn 128 charters respectivly or just keep both as 128 for simplicty.\n\nexecution mode is really a string ENUM again we shoudl chose a column with say 16-32 charters. same for state and auditi type\n\ninfact we likly shoudl align them to the sizes used in audit \n\n```\n\nclass Audit(Base):\n    \"\"\"Represents an audit.\"\"\"\n\n    __tablename__ \u003d \u0027audits\u0027\n    __table_args__ \u003d (\n        UniqueConstraint(\u0027uuid\u0027, name\u003d\u0027uniq_audits0uuid\u0027),\n        UniqueConstraint(\u0027name\u0027, \u0027deleted\u0027, name\u003d\u0027uniq_audits0name\u0027),\n        table_args(),\n    )\n    id \u003d Column(Integer, primary_key\u003dTrue, autoincrement\u003dTrue)\n    uuid \u003d Column(String(36))\n    name \u003d Column(String(63), nullable\u003dTrue)\n    audit_type \u003d Column(String(20))\n    state \u003d Column(String(20), nullable\u003dTrue)\n    parameters \u003d Column(JSONEncodedDict, nullable\u003dTrue)\n    interval \u003d Column(String(36), nullable\u003dTrue)\n    goal_id \u003d Column(Integer, ForeignKey(\u0027goals.id\u0027), nullable\u003dFalse)\n    strategy_id \u003d Column(Integer, ForeignKey(\u0027strategies.id\u0027), nullable\u003dTrue)\n    scope \u003d Column(JSONEncodedList, nullable\u003dTrue)\n    auto_trigger \u003d Column(Boolean, nullable\u003dFalse)\n    next_run_time \u003d Column(DateTime, nullable\u003dTrue)\n    hostname \u003d Column(String(255), nullable\u003dTrue)\n    start_time \u003d Column(DateTime, nullable\u003dTrue)\n    end_time \u003d Column(DateTime, nullable\u003dTrue)\n    force \u003d Column(Boolean, nullable\u003dFalse)\n    status_message \u003d Column(String(255), nullable\u003dTrue)\n\n    goal \u003d orm.relationship(Goal, foreign_keys\u003dgoal_id, lazy\u003dNone)\n    strategy \u003d orm.relationship(Strategy, foreign_keys\u003dstrategy_id, lazy\u003dNone)\n```\n\n\nhttps://github.com/openstack/watcher/blob/master/watcher/db/sqlalchemy/models.py#L163-L191\n\nin general the stages shoudl not be stored inline in the AuditPipeline table.\nthat denormallies the db schema.\n\nin the model its ok to encode it in a list but we shoudl put them in a PipelienStage mapping table\n\neffecitvly with 3 columes the pipeline_id audit_template_id and stage_postion.\nwith forenkes on both the template and pipeline tables joined on the internal integre ids rather the the uuids.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    default_parameters \u003d Dict (nullable)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"``New Audit Pipeline Resource``"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"Create a new ``AuditPipeline`` model with the following fields. The model"},{"line_number":334,"context_line":"structure is similar to the existing ``Audit`` model, with trigger fields"},{"line_number":335,"context_line":"embedded directly in the resource:"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"* ``id``: Integer primary key"},{"line_number":338,"context_line":"* ``uuid``: UUID"},{"line_number":339,"context_line":"* ``name``: String (nullable)"},{"line_number":340,"context_line":"* ``execution_mode``: String (CASCADE, COMPOSITE)"},{"line_number":341,"context_line":"* ``state``: String (PENDING, ONGOING, SUCCEEDED, FAILED, CANCELLED, SUSPENDED)"},{"line_number":342,"context_line":"* ``stages``: List of Audit Template UUIDs (minimum 2, maximum defined by"},{"line_number":343,"context_line":"  configuration option ``max_pipeline_stages``, defaults to 5)"},{"line_number":344,"context_line":"* ``audit_type``: String (ONESHOT, CONTINUOUS, EVENT)"},{"line_number":345,"context_line":"* ``interval``: String (nullable)"},{"line_number":346,"context_line":"* ``auto_trigger``: Boolean"},{"line_number":347,"context_line":"* ``next_run_time``: DateTime (nullable)"},{"line_number":348,"context_line":"* ``start_time``: DateTime (nullable)"},{"line_number":349,"context_line":"* ``end_time``: DateTime (nullable)"},{"line_number":350,"context_line":"* ``hostname``: String (nullable)"},{"line_number":351,"context_line":"* ``status_message``: String (nullable)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"``Action Plan Changes``"},{"line_number":354,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"f780df44_1f037853","line":351,"range":{"start_line":331,"start_character":0,"end_line":351,"end_character":39},"in_reply_to":"d1ca7bbf_7addeff2","updated":"2026-05-30 09:50:24.000000000","message":"Done","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    default_parameters \u003d Dict (nullable)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"``New Audit Pipeline Resource``"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"Create a new ``AuditPipeline`` model with the following fields. The model"},{"line_number":334,"context_line":"structure is similar to the existing ``Audit`` model, with trigger fields"},{"line_number":335,"context_line":"embedded directly in the resource:"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"* ``id``: Integer primary key"},{"line_number":338,"context_line":"* ``uuid``: UUID"},{"line_number":339,"context_line":"* ``name``: String (nullable)"},{"line_number":340,"context_line":"* ``execution_mode``: String (CASCADE, COMPOSITE)"},{"line_number":341,"context_line":"* ``state``: String (PENDING, ONGOING, SUCCEEDED, FAILED, CANCELLED, SUSPENDED)"},{"line_number":342,"context_line":"* ``stages``: List of Audit Template UUIDs (minimum 2, maximum defined by"},{"line_number":343,"context_line":"  configuration option ``max_pipeline_stages``, defaults to 5)"},{"line_number":344,"context_line":"* ``audit_type``: String (ONESHOT, CONTINUOUS, EVENT)"},{"line_number":345,"context_line":"* ``interval``: String (nullable)"},{"line_number":346,"context_line":"* ``auto_trigger``: Boolean"},{"line_number":347,"context_line":"* ``next_run_time``: DateTime (nullable)"},{"line_number":348,"context_line":"* ``start_time``: DateTime (nullable)"},{"line_number":349,"context_line":"* ``end_time``: DateTime (nullable)"},{"line_number":350,"context_line":"* ``hostname``: String (nullable)"},{"line_number":351,"context_line":"* ``status_message``: String (nullable)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"``Action Plan Changes``"},{"line_number":354,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"d1ca7bbf_7addeff2","line":351,"range":{"start_line":331,"start_character":0,"end_line":351,"end_character":39},"in_reply_to":"d8510e4d_02d7baf4","updated":"2026-05-27 20:00:26.000000000","message":"Yes, the idea was to be implemented as Audit is today, but I can update with expected sizes and types.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":364,"context_line":"  Audit or Audit Pipeline resources. This allows the field to be dropped in"},{"line_number":365,"context_line":"  future releases once the deprecation period has ended. Note that single"},{"line_number":366,"context_line":"  strategy audits will continue to be supported; this change only affects"},{"line_number":367,"context_line":"  the action plan data model."},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"A check constraint can be added to ensure data integrity: exactly one of"},{"line_number":370,"context_line":"``audit_id`` or ``audit_pipeline_id`` must be set (both cannot be null, and"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3c81bc70_b5d719fa","line":367,"updated":"2026-05-25 15:45:13.000000000","message":"so we dont often use db triggers in openstack but we could add one that will reject an insert/update if both audit_id and audit_pipeline_id are null to enforece this.\n\notherwise we need to enfoce this at the object save level in python.\n\nin reality this shoudl never happen and it would be a programing error if it ever did.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":379,"context_line":"REST API impact"},{"line_number":380,"context_line":"---------------"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"``Audit Template - Add default_parameters``"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"Update the Audit Template API to support the new ``default_parameters`` field:"},{"line_number":385,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"4f7ef99d_7385ec2c","line":382,"in_reply_to":"8c2f6b43_177378ea","updated":"2026-05-30 09:50:24.000000000","message":"the fact you have to reason abot things like that for nested stucutres is part fo the reason i hate using json patch syntax in a rest api.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":383,"context_line":""},{"line_number":384,"context_line":"Update the Audit Template API to support the new ``default_parameters`` field:"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"* Method: POST, PATCH"},{"line_number":387,"context_line":"* URL: ``/v1/audit_templates``, ``/v1/audit_templates/{uuid}``"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"Request body (create/update)::"}],"source_content_type":"text/x-rst","patch_set":10,"id":"508782b6_7cfa5b74","line":386,"range":{"start_line":386,"start_character":16,"end_line":386,"end_character":21},"updated":"2026-05-25 15:45:13.000000000","message":"patch is what we use today but its actully recommened that we dont use patch for any api in opentack.\n\nwe shoudl use put for updates","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":383,"context_line":""},{"line_number":384,"context_line":"Update the Audit Template API to support the new ``default_parameters`` field:"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"* Method: POST, PATCH"},{"line_number":387,"context_line":"* URL: ``/v1/audit_templates``, ``/v1/audit_templates/{uuid}``"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"Request body (create/update)::"}],"source_content_type":"text/x-rst","patch_set":10,"id":"fbaded3f_3c537c7a","line":386,"range":{"start_line":386,"start_character":16,"end_line":386,"end_character":21},"in_reply_to":"508782b6_7cfa5b74","updated":"2026-05-27 20:00:26.000000000","message":"ack, I remember that you mention this before. Do you have a link to this recommentation? Since there is already a PATCH for audit_template, I was planning to go with PATCH, instead of having both PATCH and PUT for updates. If we go with PUT here, then we should allow all other fields to be updated too.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":383,"context_line":""},{"line_number":384,"context_line":"Update the Audit Template API to support the new ``default_parameters`` field:"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"* Method: POST, PATCH"},{"line_number":387,"context_line":"* URL: ``/v1/audit_templates``, ``/v1/audit_templates/{uuid}``"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"Request body (create/update)::"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1dae83e5_cef76ce8","line":386,"range":{"start_line":386,"start_character":16,"end_line":386,"end_character":21},"in_reply_to":"fbaded3f_3c537c7a","updated":"2026-05-30 09:50:24.000000000","message":"we discussed this on irc and decieded to defer changign existing patch usage to a future spec","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":395,"context_line":"        \"default_parameters\": {"},{"line_number":396,"context_line":"            \"compute_nodes\": [{\"src_node\": \"compute-1\"}]"},{"line_number":397,"context_line":"        }"},{"line_number":398,"context_line":"    }"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"A new API micro-version will be introduced to support the new"},{"line_number":401,"context_line":"``default_parameters`` field, which may not include other new APIs defined"}],"source_content_type":"text/x-rst","patch_set":10,"id":"683fd9aa_1d9264df","line":398,"updated":"2026-05-25 15:45:13.000000000","message":"what that means is while this woudl be the request shap for create\n\nfor update it would look like\n```\n[\n    {\n        \"op\": \"add\",\n        \"value\": {\n            \"compute_nodes\": [{\"src_node\": \"compute-1\"}]\n        },\n        \"path\": \"/default_parameters\"\n    }\n]\n```\n\nhow would we feel about adding PUT `/v1/audit_templates/{uuid}`` to allow updting  in the new microversion and removing patch for this resouce?\n\nhttps://docs.openstack.org/api-ref/resource-optimization/#audit-templates\n\ni think we shoudl do that forall all useage of patch in the future.\nbut we can start with the audit_tempelate\n\nput woudl take the saem shape as create instead of json patch format","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":395,"context_line":"        \"default_parameters\": {"},{"line_number":396,"context_line":"            \"compute_nodes\": [{\"src_node\": \"compute-1\"}]"},{"line_number":397,"context_line":"        }"},{"line_number":398,"context_line":"    }"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"A new API micro-version will be introduced to support the new"},{"line_number":401,"context_line":"``default_parameters`` field, which may not include other new APIs defined"}],"source_content_type":"text/x-rst","patch_set":10,"id":"d1c6305e_d32bc870","line":398,"in_reply_to":"683fd9aa_1d9264df","updated":"2026-05-27 20:00:26.000000000","message":"Ack, lets try using PUT for newer changes, but we should still keep PATCH for a while. We can discuss a igration to PUT in the next PTG or in a weekly meeting.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        \"default_parameters\": {"},{"line_number":396,"context_line":"            \"compute_nodes\": [{\"src_node\": \"compute-1\"}]"},{"line_number":397,"context_line":"        }"},{"line_number":398,"context_line":"    }"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"A new API micro-version will be introduced to support the new"},{"line_number":401,"context_line":"``default_parameters`` field, which may not include other new APIs defined"}],"source_content_type":"text/x-rst","patch_set":10,"id":"b61d4545_ac78ccfe","line":398,"in_reply_to":"d1c6305e_d32bc870","updated":"2026-05-30 09:50:24.000000000","message":"Done","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":397,"context_line":"        }"},{"line_number":398,"context_line":"    }"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"A new API micro-version will be introduced to support the new"},{"line_number":401,"context_line":"``default_parameters`` field, which may not include other new APIs defined"},{"line_number":402,"context_line":"in this spec."},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"``Audit Pipeline - New Resource APIs``"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"Create Audit Pipeline:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"08b1d666_6103b0ac","line":403,"range":{"start_line":400,"start_character":0,"end_line":403,"end_character":1},"updated":"2026-05-25 15:45:13.000000000","message":"```suggestion\nA new API micro-version will be introduced to support the new\n``default_parameters`` field, independently of  other new APIs changes introduced\nin this spec.\n\n```","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":397,"context_line":"        }"},{"line_number":398,"context_line":"    }"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"A new API micro-version will be introduced to support the new"},{"line_number":401,"context_line":"``default_parameters`` field, which may not include other new APIs defined"},{"line_number":402,"context_line":"in this spec."},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"``Audit Pipeline - New Resource APIs``"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"Create Audit Pipeline:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"d5e996ff_fc43f05f","line":403,"range":{"start_line":400,"start_character":0,"end_line":403,"end_character":1},"in_reply_to":"08b1d666_6103b0ac","updated":"2026-05-30 09:50:24.000000000","message":"Done","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":401,"context_line":"``default_parameters`` field, which may not include other new APIs defined"},{"line_number":402,"context_line":"in this spec."},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"``Audit Pipeline - New Resource APIs``"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"Create Audit Pipeline:"},{"line_number":407,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"7a2fe5a7_4ca3524c","line":404,"in_reply_to":"a7e30908_ebe2c320","updated":"2026-05-30 09:50:24.000000000","message":"Done","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":401,"context_line":"``default_parameters`` field, which may not include other new APIs defined"},{"line_number":402,"context_line":"in this spec."},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"``Audit Pipeline - New Resource APIs``"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"Create Audit Pipeline:"},{"line_number":407,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"a7e30908_ebe2c320","line":404,"in_reply_to":"c66a2404_b6e15246","updated":"2026-05-25 15:45:13.000000000","message":"this is valid it would be nice to include examples.\n\nwe will need to do that in the api ref and test butthe respocne shap can mostly be infered.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":435,"context_line":"* Normal response: 200 OK"},{"line_number":436,"context_line":"* Error responses: 404 Not Found"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"Update Audit Pipeline:"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"* Method: PATCH"},{"line_number":441,"context_line":"* URL: ``/v1/audit_pipelines/{uuid}``"}],"source_content_type":"text/x-rst","patch_set":10,"id":"67ccfeb4_76535891","line":438,"range":{"start_line":438,"start_character":0,"end_line":438,"end_character":2},"updated":"2026-05-25 15:45:13.000000000","message":"so as noted above i woudl personally prefer if we did nto intoduce any new patch metods to the api and instead only supproted full update via PUT\n\ni also woudl prefer if state transtation liek cancled were `POST /v1/audit_pipelines/{uuid}/cancel\n\nrather then direct mutation fo the state.\n\nthat i think is a much cleaner api and hte current patch approch with direct muataiton of the state really feels like a hack.\n\nbaisclly woudl prefer of \"action endpoint\" were dedicated routs not sideffect fo an update.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":435,"context_line":"* Normal response: 200 OK"},{"line_number":436,"context_line":"* Error responses: 404 Not Found"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"Update Audit Pipeline:"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"* Method: PATCH"},{"line_number":441,"context_line":"* URL: ``/v1/audit_pipelines/{uuid}``"}],"source_content_type":"text/x-rst","patch_set":10,"id":"dd7e8336_c7608e40","line":438,"range":{"start_line":438,"start_character":0,"end_line":438,"end_character":2},"in_reply_to":"67ccfeb4_76535891","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":459,"context_line":""},{"line_number":460,"context_line":"* The following fields are **updatable**: ``state``, ``interval``,"},{"line_number":461,"context_line":"  ``auto_trigger``, ``start_time``, ``end_time``"},{"line_number":462,"context_line":"* The following fields **cannot be updated**:"},{"line_number":463,"context_line":"  ``name``, ``execution_mode``, ``stages``, ``audit_type``"},{"line_number":464,"context_line":"* The following fields **cannot be updated** (system-managed): ``id``,"},{"line_number":465,"context_line":"  ``uuid``, ``created_at``, ``updated_at``, ``deleted_at``, ``links``,"},{"line_number":466,"context_line":"  ``status_message``, ``hostname``, ``next_run_time``"},{"line_number":467,"context_line":"* State updates must follow valid state machine transitions"},{"line_number":468,"context_line":"* Attempting to update immutable fields returns 400 Bad Request"},{"line_number":469,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"a1c3ec7d_a86dd8c9","line":466,"range":{"start_line":462,"start_character":0,"end_line":466,"end_character":52},"updated":"2026-05-25 15:45:13.000000000","message":"i think we could simplfy this by only liting the mutable fields and deleting these two lines of comining them","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":464,"context_line":"* The following fields **cannot be updated** (system-managed): ``id``,"},{"line_number":465,"context_line":"  ``uuid``, ``created_at``, ``updated_at``, ``deleted_at``, ``links``,"},{"line_number":466,"context_line":"  ``status_message``, ``hostname``, ``next_run_time``"},{"line_number":467,"context_line":"* State updates must follow valid state machine transitions"},{"line_number":468,"context_line":"* Attempting to update immutable fields returns 400 Bad Request"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"Delete Audit Pipeline:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"2cbc0654_d872ab99","line":467,"range":{"start_line":467,"start_character":2,"end_line":467,"end_character":59},"updated":"2026-05-25 15:45:13.000000000","message":"if we have dedicated endpoint this is a litte more clear cut as w3e just have the pre-conditiona and post contiaon for each resouce sub endpoint\n\n``/v1/audit_pipelines/{uuid}/cancel`` is only valid if the precondition is met and the post condtion is also fixed\n\nwe can return a 409 if the precondtion is not met","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":465,"context_line":"  ``uuid``, ``created_at``, ``updated_at``, ``deleted_at``, ``links``,"},{"line_number":466,"context_line":"  ``status_message``, ``hostname``, ``next_run_time``"},{"line_number":467,"context_line":"* State updates must follow valid state machine transitions"},{"line_number":468,"context_line":"* Attempting to update immutable fields returns 400 Bad Request"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"Delete Audit Pipeline:"},{"line_number":471,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"e0d6dc98_0aa372e5","line":468,"updated":"2026-05-25 15:45:13.000000000","message":"400 is ok in this case but 409 is requried for the state machine mismatch.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":474,"context_line":"* Normal response: 204 No Content"},{"line_number":475,"context_line":"* Error responses: 404 Not Found, 409 Conflict"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"Accepted states for DELETE: SUCCEEDED, FAILED, CANCELLED, SUSPENDED."},{"line_number":478,"context_line":"Audit Pipelines in ONGOING state cannot be deleted and will return 409"},{"line_number":479,"context_line":"Conflict. To delete an ONGOING pipeline, it must first be cancelled via PATCH."},{"line_number":480,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"608bc720_7822f896","line":477,"in_reply_to":"0294f6d5_1574ffa7","updated":"2026-05-27 20:00:26.000000000","message":"Suspended is being removed in favor of ONESHOT only scope, it should be added again for CONTINUOUS audit pipeline.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":474,"context_line":"* Normal response: 204 No Content"},{"line_number":475,"context_line":"* Error responses: 404 Not Found, 409 Conflict"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"Accepted states for DELETE: SUCCEEDED, FAILED, CANCELLED, SUSPENDED."},{"line_number":478,"context_line":"Audit Pipelines in ONGOING state cannot be deleted and will return 409"},{"line_number":479,"context_line":"Conflict. To delete an ONGOING pipeline, it must first be cancelled via PATCH."},{"line_number":480,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"b6d62bc3_c533d7c5","line":477,"in_reply_to":"608bc720_7822f896","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":474,"context_line":"* Normal response: 204 No Content"},{"line_number":475,"context_line":"* Error responses: 404 Not Found, 409 Conflict"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"Accepted states for DELETE: SUCCEEDED, FAILED, CANCELLED, SUSPENDED."},{"line_number":478,"context_line":"Audit Pipelines in ONGOING state cannot be deleted and will return 409"},{"line_number":479,"context_line":"Conflict. To delete an ONGOING pipeline, it must first be cancelled via PATCH."},{"line_number":480,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"0294f6d5_1574ffa7","line":477,"in_reply_to":"bdded47b_451c96cf","updated":"2026-05-25 15:45:13.000000000","message":"so this is calling out a valid inconsitenty in the spec but this is correct.\n\nearlier when suspeneded is described as a terminal state it incorerct\n\nand transation form suspended to deelted is allowed.\n\nhttps://docs.openstack.org/watcher/latest/architecture.html#audit-state-machine","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":476,"context_line":""},{"line_number":477,"context_line":"Accepted states for DELETE: SUCCEEDED, FAILED, CANCELLED, SUSPENDED."},{"line_number":478,"context_line":"Audit Pipelines in ONGOING state cannot be deleted and will return 409"},{"line_number":479,"context_line":"Conflict. To delete an ONGOING pipeline, it must first be cancelled via PATCH."},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"A new API micro-version will be introduced to support Audit Pipeline."},{"line_number":482,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f0be3bf_ca512bac","line":479,"updated":"2026-05-25 15:45:13.000000000","message":"ya this is kind of a UX smell but that is how it work today.\n\nit may be nice to allwo this in the future but we can condieer that out os scope for now.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":476,"context_line":""},{"line_number":477,"context_line":"Accepted states for DELETE: SUCCEEDED, FAILED, CANCELLED, SUSPENDED."},{"line_number":478,"context_line":"Audit Pipelines in ONGOING state cannot be deleted and will return 409"},{"line_number":479,"context_line":"Conflict. To delete an ONGOING pipeline, it must first be cancelled via PATCH."},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"A new API micro-version will be introduced to support Audit Pipeline."},{"line_number":482,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"269041b4_b0faf18d","line":479,"in_reply_to":"3f0be3bf_ca512bac","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":false,"context_lines":[{"line_number":480,"context_line":""},{"line_number":481,"context_line":"A new API micro-version will be introduced to support Audit Pipeline."},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"Security impact"},{"line_number":484,"context_line":"---------------"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"A new policy file will be added for the Audit Pipeline API endpoints. The"}],"source_content_type":"text/x-rst","patch_set":10,"id":"5ec35a16_2a849486","line":483,"in_reply_to":"895b1a39_dc83e4d0","updated":"2026-05-25 15:45:13.000000000","message":"there basiclly is no securfity impact to this feature as the secuirty postrue remaisn the same as a normal auit","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":533,"context_line":"Work Items"},{"line_number":534,"context_line":"----------"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"``Phase 1: Audit Pipeline Proof of Concept``"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"* Implement a proof of concept for the Audit Pipeline resource and a draft"},{"line_number":539,"context_line":"  implementation of the Cascade execution mode."}],"source_content_type":"text/x-rst","patch_set":10,"id":"eb22286e_55f68b2f","line":536,"in_reply_to":"486d57ed_7a2158f3","updated":"2026-05-25 15:45:13.000000000","message":"while it may be fine to do the poc first i think we shodul wite this in merge order\n\nand i think we woudl want to fully implemtne and merge the Audit Template Enhancement as phase 1 before any of the work related to the pipeline.\n\nthe piplein api chagne will be th last changes to merge after\n\ni woudl break it down like this\n\nphase 1 Audit Template Enhancement\nphase 2 Metric Data Cache\nphase 3 audit pipeline db changes\nphase 4 object and rpc changes\nphase 5 pipeline planner and execution chagnes\nphase 6 pipeline api changes and integration test.\n\nthe api chages for the pipeline cant merge until the feature is functional end to end and we shoudl have workign tempest test at that point\n\nwe also need to include updating the SDK and watcher plugin for this new api endpoint as part of the work items as a phase 7.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":533,"context_line":"Work Items"},{"line_number":534,"context_line":"----------"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"``Phase 1: Audit Pipeline Proof of Concept``"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"* Implement a proof of concept for the Audit Pipeline resource and a draft"},{"line_number":539,"context_line":"  implementation of the Cascade execution mode."}],"source_content_type":"text/x-rst","patch_set":10,"id":"886efa8f_b5d75759","line":536,"in_reply_to":"5488dd0c_e5b55c04","updated":"2026-05-30 09:50:24.000000000","message":"Done","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":533,"context_line":"Work Items"},{"line_number":534,"context_line":"----------"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"``Phase 1: Audit Pipeline Proof of Concept``"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"* Implement a proof of concept for the Audit Pipeline resource and a draft"},{"line_number":539,"context_line":"  implementation of the Cascade execution mode."}],"source_content_type":"text/x-rst","patch_set":10,"id":"5488dd0c_e5b55c04","line":536,"in_reply_to":"eb22286e_55f68b2f","updated":"2026-05-27 20:00:26.000000000","message":"Yeah, works for me. I asked Claude to analyse and rework this section. In the end, phases 3-6 would be implemented together to test end-to-end.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":568,"context_line":"``Phase 5: Pipeline Execution Infrastructure``"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"* Implement Cascade execution mode with mutating CDM and Metric Cache"},{"line_number":571,"context_line":"* Extend BaseStrategy with model setter methods"},{"line_number":572,"context_line":"* Implement ``AuditPipelineHandler`` for orchestrating pipeline execution"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"``Phase 6: Pipeline Planner``"}],"source_content_type":"text/x-rst","patch_set":10,"id":"c0ba15ad_35908d80","line":571,"range":{"start_line":571,"start_character":2,"end_line":571,"end_character":47},"updated":"2026-05-25 15:45:13.000000000","message":"any changes to the stragies have to be discussed and defiend in the propsoed changes section espcilly if your modifying the public api of the baseStragey or its behvior as obseved by concerte stragies.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":568,"context_line":"``Phase 5: Pipeline Execution Infrastructure``"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"* Implement Cascade execution mode with mutating CDM and Metric Cache"},{"line_number":571,"context_line":"* Extend BaseStrategy with model setter methods"},{"line_number":572,"context_line":"* Implement ``AuditPipelineHandler`` for orchestrating pipeline execution"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"``Phase 6: Pipeline Planner``"}],"source_content_type":"text/x-rst","patch_set":10,"id":"08fb67d5_87054285","line":571,"range":{"start_line":571,"start_character":2,"end_line":571,"end_character":47},"in_reply_to":"9489b701_0880fcb3","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":568,"context_line":"``Phase 5: Pipeline Execution Infrastructure``"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"* Implement Cascade execution mode with mutating CDM and Metric Cache"},{"line_number":571,"context_line":"* Extend BaseStrategy with model setter methods"},{"line_number":572,"context_line":"* Implement ``AuditPipelineHandler`` for orchestrating pipeline execution"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"``Phase 6: Pipeline Planner``"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9489b701_0880fcb3","line":571,"range":{"start_line":571,"start_character":2,"end_line":571,"end_character":47},"in_reply_to":"c0ba15ad_35908d80","updated":"2026-05-27 20:00:26.000000000","message":"It will extend the public API with a new setter methods. I added this change to previous implementation details sections.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":580,"context_line":"``Phase 7: Integration and Testing``"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"* Update python-watcherclient with Audit Pipeline commands"},{"line_number":583,"context_line":"* Add unit tests for all new components"},{"line_number":584,"context_line":"* Add tempest scenario tests for full pipeline audit flow"},{"line_number":585,"context_line":"* Update documentation"},{"line_number":586,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"4a739134_a14d8688","line":583,"range":{"start_line":583,"start_character":2,"end_line":583,"end_character":39},"updated":"2026-05-25 15:45:13.000000000","message":"the unit test need to part of the implementation change not something that is added at the end. we shoudl also have the doc changes inlien as we progress as well.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":580,"context_line":"``Phase 7: Integration and Testing``"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"* Update python-watcherclient with Audit Pipeline commands"},{"line_number":583,"context_line":"* Add unit tests for all new components"},{"line_number":584,"context_line":"* Add tempest scenario tests for full pipeline audit flow"},{"line_number":585,"context_line":"* Update documentation"},{"line_number":586,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"86eb986e_9b162d4a","line":583,"range":{"start_line":583,"start_character":2,"end_line":583,"end_character":39},"in_reply_to":"4a739134_a14d8688","updated":"2026-05-27 20:00:26.000000000","message":"yeah for sure","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":580,"context_line":"``Phase 7: Integration and Testing``"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"* Update python-watcherclient with Audit Pipeline commands"},{"line_number":583,"context_line":"* Add unit tests for all new components"},{"line_number":584,"context_line":"* Add tempest scenario tests for full pipeline audit flow"},{"line_number":585,"context_line":"* Update documentation"},{"line_number":586,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3ce4c69f_93351df4","line":583,"range":{"start_line":583,"start_character":2,"end_line":583,"end_character":39},"in_reply_to":"86eb986e_9b162d4a","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":595,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"Unit tests, integration tests, and tempest scenario tests will be added to"},{"line_number":598,"context_line":"validate the new components and the full pipeline execution flow."},{"line_number":599,"context_line":""},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":10,"id":"5d7ebb0a_f7066fb1","line":598,"updated":"2026-05-25 15:45:13.000000000","message":"so we also need to add api sample tests to cover all the request/repoce format chagne at the api level\n\nif we happen to have gabbi functional test it woudl be good to exersise the endpoint there as well but i would not make that a hard requrieemtn.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":595,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"Unit tests, integration tests, and tempest scenario tests will be added to"},{"line_number":598,"context_line":"validate the new components and the full pipeline execution flow."},{"line_number":599,"context_line":""},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":10,"id":"88020adf_446edf0a","line":598,"in_reply_to":"13c22831_46775958","updated":"2026-05-30 09:50:24.000000000","message":"Done","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":595,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"Unit tests, integration tests, and tempest scenario tests will be added to"},{"line_number":598,"context_line":"validate the new components and the full pipeline execution flow."},{"line_number":599,"context_line":""},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":10,"id":"13c22831_46775958","line":598,"in_reply_to":"5d7ebb0a_f7066fb1","updated":"2026-05-27 20:00:26.000000000","message":"Added in last PS","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2d8f8a91950d09f9915d0658314372242447131a","unresolved":true,"context_lines":[{"line_number":617,"context_line":""},{"line_number":618,"context_line":"``Developer Documentation``"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"* Guide for making strategies pipeline-compatible"},{"line_number":621,"context_line":"* Metric Data Cache usage and integration"},{"line_number":622,"context_line":"* PipelinePlanner optimization algorithm description"},{"line_number":623,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"63addadf_062ef191","line":620,"range":{"start_line":620,"start_character":0,"end_line":620,"end_character":49},"updated":"2026-05-25 15:45:13.000000000","message":"so this is not something that should be requried as i dotn want use to have to modify stages to make them pipelien compatiable\n\nall strages shoudl work in an audit or in a pipeline without modifciation.\n\nat no point in the propsoed changes section of this spec have you described changeing any existing stragies to make them compatable of defiend requirement for that so as it stand unless we can implemnt this desgine without modfiy the strages it would not be compataible with the spec as written.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4514c0e15ff0791da117b490c7d14c7ddc666c57","unresolved":true,"context_lines":[{"line_number":617,"context_line":""},{"line_number":618,"context_line":"``Developer Documentation``"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"* Guide for making strategies pipeline-compatible"},{"line_number":621,"context_line":"* Metric Data Cache usage and integration"},{"line_number":622,"context_line":"* PipelinePlanner optimization algorithm description"},{"line_number":623,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"fbfdfdb3_3c657337","line":620,"range":{"start_line":620,"start_character":0,"end_line":620,"end_character":49},"in_reply_to":"63addadf_062ef191","updated":"2026-05-27 20:00:26.000000000","message":"Indeed there is no change in Strategies, but there is a small changes in the Datasource public/private methods, which may require doc updates.","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":617,"context_line":""},{"line_number":618,"context_line":"``Developer Documentation``"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"* Guide for making strategies pipeline-compatible"},{"line_number":621,"context_line":"* Metric Data Cache usage and integration"},{"line_number":622,"context_line":"* PipelinePlanner optimization algorithm description"},{"line_number":623,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"c50763a3_7eff609f","line":620,"range":{"start_line":620,"start_character":0,"end_line":620,"end_character":49},"in_reply_to":"fbfdfdb3_3c657337","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"2d72a76273a35c664345eca0e866886ca17954f2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"cc196654648c8e21da4069797ef1fe54e7918db6","unresolved":true,"context_lines":[{"line_number":8,"context_line":"Audit Pipeline"},{"line_number":9,"context_line":"\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/audit-pipeline"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This specification proposes the introduction of ``Audit Pipeline``, a new"},{"line_number":14,"context_line":"feature that allows administrators to define an ordered set of strategy stages"}],"source_content_type":"text/x-rst","patch_set":11,"id":"e175296a_30bc7905","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":61},"updated":"2026-05-28 19:12:40.000000000","message":"this is available now: https://blueprints.launchpad.net/watcher/+spec/audit-pipeline","commit_id":"73c2c59b7eeb965919c649d0b73edb9410ce3a91"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Audit Pipeline"},{"line_number":9,"context_line":"\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/audit-pipeline"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This specification proposes the introduction of ``Audit Pipeline``, a new"},{"line_number":14,"context_line":"feature that allows administrators to define an ordered set of strategy stages"}],"source_content_type":"text/x-rst","patch_set":11,"id":"03be934b_5ee68528","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":61},"in_reply_to":"e175296a_30bc7905","updated":"2026-05-30 09:50:24.000000000","message":"Acknowledged","commit_id":"73c2c59b7eeb965919c649d0b73edb9410ce3a91"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":true,"context_lines":[{"line_number":91,"context_line":"The ``default_parameters`` field can be updated via the existing PATCH API."},{"line_number":92,"context_line":"If an Audit Template has a non-null ``default_parameters`` and a PATCH request"},{"line_number":93,"context_line":"updates ``goal`` or ``strategy`` without also providing an updated"},{"line_number":94,"context_line":"``default_parameters``, the API will return ``409 Conflict``. This prevents"},{"line_number":95,"context_line":"stale parameters from silently becoming invalid after a goal or strategy"},{"line_number":96,"context_line":"change."},{"line_number":97,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"4c3f2ed9_8b98a54e","line":94,"range":{"start_line":94,"start_character":24,"end_line":94,"end_character":60},"updated":"2026-05-30 09:50:24.000000000","message":"this should only return a 409 if the default parmaters are incorrect for the new combination. but sure this is valid if the paramters would be incorrect.","commit_id":"abc4191ebab4ee4299af861abde1bafd00244d1e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":165,"context_line":"know whether they are being evaluated as part of a normal Audit or an Audit"},{"line_number":166,"context_line":"Pipeline. The pipeline implementation is responsible for injecting the scoped"},{"line_number":167,"context_line":"CDM used by each stage and for pre-populating the metric cache with projected"},{"line_number":168,"context_line":"values before each stage executes."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Mutable Cluster Data Model"},{"line_number":171,"context_line":"--------------------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"7f50bac0_0c762f35","line":168,"updated":"2026-05-30 09:50:24.000000000","message":"+1","commit_id":"abc4191ebab4ee4299af861abde1bafd00244d1e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":182,"context_line":"maintenance host, later stages must not move those instances back to that host"},{"line_number":183,"context_line":"or eliminate the required migration. The simulation layer will mark such hosts"},{"line_number":184,"context_line":"or actions as constrained so that later stages and the Pipeline Planner can"},{"line_number":185,"context_line":"distinguish required moves from collapsible optimization moves."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"Metric Data Cache"},{"line_number":188,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"bc43b9aa_e34392d5","line":185,"updated":"2026-05-30 09:50:24.000000000","message":"+1","commit_id":"abc4191ebab4ee4299af861abde1bafd00244d1e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"The metric data cache is an in-memory data structure scoped to one Audit"},{"line_number":191,"context_line":"Pipeline execution. It is not stored in the database and is discarded after"},{"line_number":192,"context_line":"the final Action Plan is generated or the pipeline planning run fails."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"The cache will be implemented transparently inside the datasource layer without"},{"line_number":195,"context_line":"requiring any changes to existing strategies. The public"}],"source_content_type":"text/x-rst","patch_set":12,"id":"aeabdc6c_ca1fd65f","line":192,"updated":"2026-05-30 09:50:24.000000000","message":"much clearer about the lifetime","commit_id":"abc4191ebab4ee4299af861abde1bafd00244d1e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":false,"context_lines":[{"line_number":247,"context_line":"sequence such as A -\u003e B followed by B -\u003e C may be collapsed to A -\u003e C only when"},{"line_number":248,"context_line":"no earlier stage constraint is violated. A B -\u003e A move must not be generated or"},{"line_number":249,"context_line":"kept if A was removed from the valid candidate set by a host maintenance stage."},{"line_number":250,"context_line":"If the planner cannot prove that a collapse is safe, it must keep the required"},{"line_number":251,"context_line":"actions or fail planning with a clear status message."},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"RPC and Service Routing"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dba6e53d_b50b7f92","line":250,"updated":"2026-05-30 09:50:24.000000000","message":"+1","commit_id":"abc4191ebab4ee4299af861abde1bafd00244d1e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":true,"context_lines":[{"line_number":443,"context_line":"            table_args()"},{"line_number":444,"context_line":"        )"},{"line_number":445,"context_line":"        id \u003d Column(Integer, primary_key\u003dTrue, autoincrement\u003dTrue)"},{"line_number":446,"context_line":"        uuid \u003d Column(String(36))"},{"line_number":447,"context_line":"        audit_pipeline_id \u003d Column("},{"line_number":448,"context_line":"            Integer, ForeignKey(\u0027audit_pipelines.id\u0027), nullable\u003dFalse)"},{"line_number":449,"context_line":"        position \u003d Column(Integer, nullable\u003dFalse)"}],"source_content_type":"text/x-rst","patch_set":12,"id":"fc539ceb_67e75b6f","line":446,"range":{"start_line":446,"start_character":9,"end_line":446,"end_character":33},"updated":"2026-05-30 09:50:24.000000000","message":"we dont actully need a uuid field on the stage.","commit_id":"abc4191ebab4ee4299af861abde1bafd00244d1e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":true,"context_lines":[{"line_number":444,"context_line":"        )"},{"line_number":445,"context_line":"        id \u003d Column(Integer, primary_key\u003dTrue, autoincrement\u003dTrue)"},{"line_number":446,"context_line":"        uuid \u003d Column(String(36))"},{"line_number":447,"context_line":"        audit_pipeline_id \u003d Column("},{"line_number":448,"context_line":"            Integer, ForeignKey(\u0027audit_pipelines.id\u0027), nullable\u003dFalse)"},{"line_number":449,"context_line":"        position \u003d Column(Integer, nullable\u003dFalse)"},{"line_number":450,"context_line":"        name \u003d Column(String(63), nullable\u003dTrue)"},{"line_number":451,"context_line":"        description \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":452,"context_line":"        source_audit_template_id \u003d Column("}],"source_content_type":"text/x-rst","patch_set":12,"id":"0e9a5562_1d8a59a7","line":449,"range":{"start_line":447,"start_character":8,"end_line":449,"end_character":50},"updated":"2026-05-30 09:50:24.000000000","message":"so the unique key should be the pipline id and position","commit_id":"abc4191ebab4ee4299af861abde1bafd00244d1e"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"bdac0fd25bc266064285a54b1257b76a9b5457ec","unresolved":true,"context_lines":[{"line_number":449,"context_line":"        position \u003d Column(Integer, nullable\u003dFalse)"},{"line_number":450,"context_line":"        name \u003d Column(String(63), nullable\u003dTrue)"},{"line_number":451,"context_line":"        description \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":452,"context_line":"        source_audit_template_id \u003d Column("},{"line_number":453,"context_line":"            Integer, ForeignKey(\u0027audit_templates.id\u0027), nullable\u003dTrue)"},{"line_number":454,"context_line":"        goal_id \u003d Column(Integer, ForeignKey(\u0027goals.id\u0027), nullable\u003dFalse)"},{"line_number":455,"context_line":"        strategy_id \u003d Column("},{"line_number":456,"context_line":"            Integer, ForeignKey(\u0027strategies.id\u0027), nullable\u003dTrue)"},{"line_number":457,"context_line":"        scope \u003d Column(Text, nullable\u003dTrue)"},{"line_number":458,"context_line":"        parameters \u003d Column(Text, nullable\u003dTrue)"},{"line_number":459,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"7ae52adf_837eb244","line":456,"range":{"start_line":452,"start_character":0,"end_line":456,"end_character":64},"updated":"2026-06-03 13:43:05.000000000","message":"Something to consider in implementation, (just adding it here just as reminder), is if how to manage stale auditstemplates and audittemplatestages for a strategy when its definition is updated (so it\u0027s soft-deleted). See https://github.com/openstack/watcher/blob/master/watcher/decision_engine/sync.py#L276-L286","commit_id":"abc4191ebab4ee4299af861abde1bafd00244d1e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":true,"context_lines":[{"line_number":457,"context_line":"        scope \u003d Column(Text, nullable\u003dTrue)"},{"line_number":458,"context_line":"        parameters \u003d Column(Text, nullable\u003dTrue)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        audit_pipeline \u003d orm.relationship("},{"line_number":461,"context_line":"            AuditPipeline, foreign_keys\u003daudit_pipeline_id, lazy\u003dNone)"},{"line_number":462,"context_line":"        goal \u003d orm.relationship(Goal, foreign_keys\u003dgoal_id, lazy\u003dNone)"},{"line_number":463,"context_line":"        strategy \u003d orm.relationship("},{"line_number":464,"context_line":"            Strategy, foreign_keys\u003dstrategy_id, lazy\u003dNone)"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"The stage stores a snapshot of the referenced Audit Template\u0027s goal, strategy,"},{"line_number":467,"context_line":"scope, and default parameters at pipeline creation time. Later edits or deletes"}],"source_content_type":"text/x-rst","patch_set":12,"id":"8e18d5e3_d903e6bf","line":464,"range":{"start_line":460,"start_character":8,"end_line":464,"end_character":58},"updated":"2026-05-30 09:50:24.000000000","message":"technially  thses dont need foreign keys.\nwe have enforced the data integrety via the ids.","commit_id":"abc4191ebab4ee4299af861abde1bafd00244d1e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":true,"context_lines":[{"line_number":482,"context_line":"        audit_pipeline_id \u003d Column("},{"line_number":483,"context_line":"            Integer, ForeignKey(\u0027audit_pipelines.id\u0027), nullable\u003dTrue)"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"        audit_pipeline \u003d orm.relationship("},{"line_number":486,"context_line":"            AuditPipeline, foreign_keys\u003daudit_pipeline_id, lazy\u003dNone)"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"For normal Audit-created Action Plans, ``audit_id`` and ``strategy_id`` remain"},{"line_number":489,"context_line":"populated. This feature does not deprecate ``strategy_id`` for normal Audits."}],"source_content_type":"text/x-rst","patch_set":12,"id":"1bd3812f_eb14f877","line":486,"range":{"start_line":485,"start_character":0,"end_line":486,"end_character":69},"updated":"2026-05-30 09:50:24.000000000","message":"again i don tthink we need the foreign key here","commit_id":"abc4191ebab4ee4299af861abde1bafd00244d1e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cff652c72f55b536ea4c7a006169fdb303054949","unresolved":true,"context_lines":[{"line_number":604,"context_line":"        \"auto_trigger\": true,"},{"line_number":605,"context_line":"        \"stages\": ["},{"line_number":606,"context_line":"            {"},{"line_number":607,"context_line":"                \"uuid\": \"stage-uuid-1\","},{"line_number":608,"context_line":"                \"position\": 0,"},{"line_number":609,"context_line":"                \"name\": \"maintenance\","},{"line_number":610,"context_line":"                \"description\": \"Move workloads from compute-1\","}],"source_content_type":"text/x-rst","patch_set":12,"id":"75b8b0eb_ae4110f8","line":607,"range":{"start_line":607,"start_character":16,"end_line":607,"end_character":39},"updated":"2026-05-30 09:50:24.000000000","message":"we can have the uuid if this simplifies things just not that as the stage object is not directly refencable via the api its not stricktly needed.\n\nif we add it now however it does allow use to add /pipeline/\u003cuuid\u003e/stage/\u003cstage uuid\u003e","commit_id":"abc4191ebab4ee4299af861abde1bafd00244d1e"}]}
