)]}'
{"id":"openstack%2Fwatcher~1000031","triplet_id":"openstack%2Fwatcher~master~Ie4520858302ed726da3d2b415f7827e2f57b788d","project":"openstack/watcher","branch":"master","topic":"bp/audit-pipeline","attention_set":{"30002":{"account":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"last_update":"2026-08-07 21:13:18.000000000","reason":"A robot voted negatively on a label"}},"removed_from_attention_set":{},"hashtags":[],"change_id":"Ie4520858302ed726da3d2b415f7827e2f57b788d","subject":"Add AuditPipeline execution handler and cascade execution mode","status":"NEW","created":"2026-08-06 19:13:47.000000000","updated":"2026-08-07 21:13:18.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":true,"submittable":false,"total_comment_count":6,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"c27f908dee05482e15639441a02ce6987040c63e","_number":1000031,"virtual_id_number":1000031,"owner":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"actions":{},"labels":{"Verified":{"disliked":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"},{"tag":"autogenerated:zuul:check","value":-1,"date":"2026-08-07 21:13:18.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","value":-1,"default_value":0,"optional":true},"Code-Review":{"disliked":{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"},"all":[{"value":-1,"date":"2026-08-07 19:40:30.000000000","permitted_voting_range":{"min":-1,"max":1},"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","value":-1,"default_value":0,"optional":true},"Workflow":{"all":[{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true},"Review-Priority":{"all":[{"value":0,"permitted_voting_range":{"min":0,"max":1},"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"},{"value":0,"permitted_voting_range":{"min":0,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{" 0":"Standard Change","+1":"Important Change","+2":"High Priority Change"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"}],"CC":[{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-08-06 19:14:03.000000000","updated_by":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"reviewer":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"state":"CC"},{"updated":"2026-08-06 19:25:33.000000000","updated_by":{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"},"reviewer":{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"},"state":"REVIEWER"},{"updated":"2026-08-06 20:29:48.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"REVIEWER"}],"messages":[{"id":"6993db7f6b5a3c4e1a9099dbe5b9a90a6735c4e1","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"date":"2026-08-06 19:13:47.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"70a69d46eb3b09f5743bfe166eab931a773a1eb6","tag":"autogenerated:zuul:automatic-ci","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"date":"2026-08-06 19:14:03.000000000","message":"Patch Set 1:\n\nStarting automatic-ci jobs.","accounts_in_message":[],"_revision_number":1},{"id":"c337a1e72c74907ad5beafaeac7d81029973eea0","tag":"autogenerated:zuul:automatic-ci","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"date":"2026-08-06 19:24:16.000000000","message":"Patch Set 1:\n\n(2 comments)\n\nBuild succeeded (automatic-ci pipeline).\nhttps://zuul.teim.app/t/main/buildset/83d5c2291d394d948e6bb37fd29021b9\n\n- teim-code-review https://zuul.teim.app/t/main/build/d3d45b24a63649ae987d4aa7c5e75564 : SUCCESS in 10m 04s","accounts_in_message":[],"_revision_number":1},{"id":"8ad045e1d5fadae54fe27f8a81da6a96db128797","author":{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"},"date":"2026-08-06 19:25:33.000000000","message":"Patch Set 1: Code-Review-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\nhttps://gateway-cloud-softwarefactory.apps.ocp.cloud.ci.centos.org/zuul/t/rdoproject.org/buildset/02eb7a0b791143aabbde9b8522374a7b\n\n- openstack-meta-content-provider-master https://gateway-cloud-softwarefactory.apps.ocp.cloud.ci.centos.org/zuul/t/rdoproject.org/build/a3d94a4259d9483a85e80590966b8a44 : FAILURE in 9m 23s\n- watcher-operator-validation-master https://gateway-cloud-softwarefactory.apps.ocp.cloud.ci.centos.org/zuul/t/rdoproject.org/build/3b849702a26d4204a208c86fca3b5b78 : SKIPPED Skipped due to failed job openstack-meta-content-provider-master","accounts_in_message":[],"_revision_number":1},{"id":"915f40c7efb15ac4059ef2bf6d13b01e740dde1f","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-06 20:29:48.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/77dae17e605a43509a6e2e88c76d19b6\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/32292cbbe1464a8e9cc5107d7b4c9e03 : SUCCESS in 2m 21s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/917e6304279a4fc19d5ff5a7b1539e17 : SUCCESS in 5m 40s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/fa643682961740b4b775d305cecc41e6 : SUCCESS in 2m 25s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/0f4986ac2cd24f14b3591a54d73a3807 : SUCCESS in 5m 33s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/81a0f710a30445848c33a5ab01ec287a : SUCCESS in 4m 18s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/ba2ed5450be745649272468fc3887b1c : SUCCESS in 6m 46s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/7379cc5b7f694654bcc7f06276450a3a : SUCCESS in 6m 17s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/ebb7bd58ad13487fa16c181044b27b0f : SUCCESS in 5m 53s\n- openstack-tox-py313-eventlet https://zuul.opendev.org/t/openstack/build/5b5d1e1a16ae46869a09401841fca48b : SUCCESS in 6m 38s\n- watcher-grenade https://zuul.opendev.org/t/openstack/build/ae75ed09375642478877c810b82f5579 : SUCCESS in 1h 00m 15s\n- watcher-grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/40c8563ae0714ac6a986179ccfc87361 : SUCCESS in 47m 09s\n- watcher-tempest-api-ipv6-only https://zuul.opendev.org/t/openstack/build/9165e55b3315413bb52d9b3ab42b9131 : SUCCESS in 37m 36s\n- watcher-tempest-gnocchi https://zuul.opendev.org/t/openstack/build/52df9f8cf4924358bb4e9fdeb8495db5 : SUCCESS in 52m 52s\n- watcher-tempest-prometheus https://zuul.opendev.org/t/openstack/build/9ab35aca487f401ebb7d2063be365f2a : SUCCESS in 45m 23s\n- watcher-tempest-prometheus-eventlet https://zuul.opendev.org/t/openstack/build/d6b117d61d874ecb9f9e2ff78549017d : SUCCESS in 1h 08m 17s\n- watcher-tempest-aetos https://zuul.opendev.org/t/openstack/build/625f2cc3d11c41f8bcca5c70474b1642 : SUCCESS in 56m 23s","accounts_in_message":[],"_revision_number":1},{"id":"74d678547c5431bd66646b28eb193d413298b9d5","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"date":"2026-08-07 19:29:33.000000000","message":"Uploaded patch set 2: Patch Set 1 was rebased.\n\nCopied Votes:\n* Code-Review-1 (copy condition: \"**changekind:TRIVIAL_REBASE** OR is:MIN\")\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":2},{"id":"cc7b828e58bc82310d82a3765b7e6d4d3c83ddb2","tag":"autogenerated:zuul:automatic-ci","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"date":"2026-08-07 19:30:05.000000000","message":"Patch Set 2:\n\nStarting automatic-ci jobs.","accounts_in_message":[],"_revision_number":2},{"id":"938f836ba9e5f48d4081979718360f520856fa96","author":{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"},"date":"2026-08-07 19:40:30.000000000","message":"Patch Set 2: Code-Review-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\nhttps://gateway-cloud-softwarefactory.apps.ocp.cloud.ci.centos.org/zuul/t/rdoproject.org/buildset/eeec1d361add4124bddfbfa0c35a70ad\n\n- openstack-meta-content-provider-master https://gateway-cloud-softwarefactory.apps.ocp.cloud.ci.centos.org/zuul/t/rdoproject.org/build/5777d85c75e14735ad099bf55bac1ec5 : FAILURE in 9m 16s\n- watcher-operator-validation-master https://gateway-cloud-softwarefactory.apps.ocp.cloud.ci.centos.org/zuul/t/rdoproject.org/build/6d74d42a24b84cb3935d52d7e3d6b07e : SKIPPED Skipped due to failed job openstack-meta-content-provider-master","accounts_in_message":[],"_revision_number":2},{"id":"c456c8681bc5769da9535c4c2d21b01ba25cb1aa","tag":"autogenerated:zuul:automatic-ci","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"date":"2026-08-07 20:09:52.000000000","message":"Patch Set 2:\n\n(4 comments)\n\nBuild succeeded (automatic-ci pipeline).\nhttps://zuul.teim.app/t/main/buildset/253fc843469a4a4ab8ea9973675e89ec\n\n- teim-code-review https://zuul.teim.app/t/main/build/09efa075fe9449fa8d506c4172af5386 : SUCCESS in 7m 59s","accounts_in_message":[],"_revision_number":2},{"id":"c27f908dee05482e15639441a02ce6987040c63e","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-08-07 21:13:18.000000000","message":"Patch Set 2: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\nand https://docs.openstack.org/project-team-guide/testing.html#how-to-handle-test-failures\n\nhttps://zuul.opendev.org/t/openstack/buildset/48e6a81a4eeb4f11a04dc071a7a1e597\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/2b039b583528497e837f0312af0788c2 : SUCCESS in 3m 21s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/0ca052877b0b4f4f896a1c512fe3fc54 : SUCCESS in 6m 27s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/58f2f721998340d1b4e60253f06e34b9 : SUCCESS in 6m 53s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/d20e8e85cf5e42cca848ac3ef1209196 : SUCCESS in 6m 49s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/6e4140b6c03a4b2c9a39134aa3cc1ced : SUCCESS in 6m 26s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/2301508b7eee443a9a1945dcbda43690 : SUCCESS in 9m 01s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/d8df1c43ed6c48e6be165a06f9e9b903 : SUCCESS in 7m 49s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/e3a16bea30e141b0afbdecfb5eb4c2cd : SUCCESS in 4m 33s\n- openstack-tox-py313-eventlet https://zuul.opendev.org/t/openstack/build/4b927266834245dfa0900127df3135b1 : SUCCESS in 6m 15s\n- watcher-grenade https://zuul.opendev.org/t/openstack/build/769be51cd95e4590ad227e359520cdd9 : SUCCESS in 54m 52s\n- watcher-grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/48b54fb5c2314f189b4b015951a100ce : SUCCESS in 51m 52s\n- watcher-tempest-api-ipv6-only https://zuul.opendev.org/t/openstack/build/44bdc5bfe76b422f8386c2dee0e364c7 : SUCCESS in 44m 44s\n- watcher-tempest-gnocchi https://zuul.opendev.org/t/openstack/build/2d2d579ade0c4d699b93d3f89294f910 : SUCCESS in 1h 39m 42s\n- watcher-tempest-prometheus https://zuul.opendev.org/t/openstack/build/368551de57a54c42908503f85042224a : FAILURE in 48m 35s\n- watcher-tempest-prometheus-eventlet https://zuul.opendev.org/t/openstack/build/405e4b2edd5a4e088844b28342590a28 : SUCCESS in 1h 39m 52s\n- watcher-tempest-aetos https://zuul.opendev.org/t/openstack/build/fcb16615214c4d5a99aad095955c09b0 : SUCCESS in 1h 26m 11s","accounts_in_message":[],"_revision_number":2}],"current_revision_number":2,"current_revision":"5000eb5318e616f8ecebd2b3cd8f9f8ae856cc34","revisions":{"811bd92cc4b9dab05660464ccfe2e143e2ef2d62":{"kind":"REWORK","_number":1,"created":"2026-08-06 19:13:47.000000000","uploader":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"ref":"refs/changes/31/1000031/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher","ref":"refs/changes/31/1000031/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher refs/changes/31/1000031/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher refs/changes/31/1000031/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher refs/changes/31/1000031/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher refs/changes/31/1000031/1"}}},"commit":{"parents":[{"commit":"8e665e1a3e40d56d9da97fc2aa206d77d11625d6","subject":"Add AuditPipeline lifecycle notifications","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher/commit/8e665e1a3e40d56d9da97fc2aa206d77d11625d6"}]}],"author":{"name":"Douglas Viroel","email":"viroel@gmail.com","date":"2026-08-05 12:54:13.000000000","tz":-180},"committer":{"name":"Douglas Viroel","email":"viroel@gmail.com","date":"2026-08-06 19:10:04.000000000","tz":-180},"subject":"Add AuditPipeline execution handler and cascade execution mode","message":"Add AuditPipeline execution handler and cascade execution mode\n\nImplements the decision engine components that drive AuditPipeline\nexecution:\n\n- PipelineHandler: orchestrates the full pipeline lifecycle\n(PENDING → ONGOING → SUCCEEDED/FAILED/CANCELLED), iterates stages\nin position order with cancellation checks between each, and\ndelegates CDM/cache management to the execution context.\n- CascadePipelineContext: executes each stage sequentially against\nthe CDM produced by the previous stage, simulating metric changes\nbetween stages so later strategies plan against the projected\ncluster state.\n- WeightedSchedulingMixin (planner/common.py): extracts the\nweight-based DAG scheduling logic shared by WeightPlanner and\nPipelinePlanner into a reusable mixin.\n- PipelinePlanner: merges solutions from all stages, optionally\ncollapses migration chains (A→B→C becomes A→C) and removes\ncircular round-trips (A→B then B→A), then schedules the merged\nactions using the weight-based DAG inherited from\nWeightedSchedulingMixin.\n- Wires the new handler into the decision engine RPC endpoint and\naudit messaging layer.\n- Adds unit tests for PipelineHandler, CascadePipelineContext and\nPipelinePlanner.\n\nPartially-implements: bp audit-pipeline\nAssisted-By: Claude Code (Sonnet 4.6)\nChange-Id: Ie4520858302ed726da3d2b415f7827e2f57b788d\nSigned-off-by: Douglas Viroel \u003cviroel@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher/commit/811bd92cc4b9dab05660464ccfe2e143e2ef2d62"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher/commit/811bd92cc4b9dab05660464ccfe2e143e2ef2d62"}]},"branch":"refs/heads/master"},"5000eb5318e616f8ecebd2b3cd8f9f8ae856cc34":{"kind":"TRIVIAL_REBASE","_number":2,"created":"2026-08-07 19:29:33.000000000","uploader":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"ref":"refs/changes/31/1000031/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher","ref":"refs/changes/31/1000031/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher refs/changes/31/1000031/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher refs/changes/31/1000031/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher refs/changes/31/1000031/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher refs/changes/31/1000031/2"}}},"commit":{"parents":[{"commit":"7989e41162d0f75321cb23b1f6bae2e717069668","subject":"Add AuditPipeline lifecycle notifications","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher/commit/7989e41162d0f75321cb23b1f6bae2e717069668"}]}],"author":{"name":"Douglas Viroel","email":"viroel@gmail.com","date":"2026-08-05 12:54:13.000000000","tz":-180},"committer":{"name":"Douglas Viroel","email":"viroel@gmail.com","date":"2026-08-07 19:28:11.000000000","tz":-180},"subject":"Add AuditPipeline execution handler and cascade execution mode","message":"Add AuditPipeline execution handler and cascade execution mode\n\nImplements the decision engine components that drive AuditPipeline\nexecution:\n\n- PipelineHandler: orchestrates the full pipeline lifecycle\n(PENDING → ONGOING → SUCCEEDED/FAILED/CANCELLED), iterates stages\nin position order with cancellation checks between each, and\ndelegates CDM/cache management to the execution context.\n- CascadePipelineContext: executes each stage sequentially against\nthe CDM produced by the previous stage, simulating metric changes\nbetween stages so later strategies plan against the projected\ncluster state.\n- WeightedSchedulingMixin (planner/common.py): extracts the\nweight-based DAG scheduling logic shared by WeightPlanner and\nPipelinePlanner into a reusable mixin.\n- PipelinePlanner: merges solutions from all stages, optionally\ncollapses migration chains (A→B→C becomes A→C) and removes\ncircular round-trips (A→B then B→A), then schedules the merged\nactions using the weight-based DAG inherited from\nWeightedSchedulingMixin.\n- Wires the new handler into the decision engine RPC endpoint and\naudit messaging layer.\n- Adds unit tests for PipelineHandler, CascadePipelineContext and\nPipelinePlanner.\n\nPartially-implements: bp audit-pipeline\nAssisted-By: Claude Code (Sonnet 4.6)\nChange-Id: Ie4520858302ed726da3d2b415f7827e2f57b788d\nSigned-off-by: Douglas Viroel \u003cviroel@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher/commit/5000eb5318e616f8ecebd2b3cd8f9f8ae856cc34"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher/commit/5000eb5318e616f8ecebd2b3cd8f9f8ae856cc34"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"OK","labels":[{"label":"Verified","status":"MAY","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"MAY","applied_by":{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"}},{"label":"Workflow","status":"MAY"},{"label":"Review-Priority","status":"MAY"}]}],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Verified\u003dMAX","label:Verified\u003dMIN"],"atom_explanations":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Code-Review\u003dMAX","label:Code-Review\u003dMIN"],"atom_explanations":{"label:Code-Review\u003dMAX":"","label:Code-Review\u003dMIN":""}}},{"name":"Review-Priority","description":"Review Priority","status":"NOT_APPLICABLE","is_legacy":false,"applicability_expression_result":{"fulfilled":false,"status":"FAIL"},"submittability_expression_result":{"expression":"is:true","fulfilled":true,"status":"NOT_EVALUATED","passing_atoms":[],"failing_atoms":[],"atom_explanations":{}}},{"name":"Workflow","description":"Approved for gate by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Workflow\u003dMAX AND -label:Workflow\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Workflow\u003dMAX","label:Workflow\u003dMIN"],"atom_explanations":{"label:Workflow\u003dMAX":"","label:Workflow\u003dMIN":""}}}]}
