)]}'
{"watcher/applier/workflow_engine/default.py":[{"robot_id":"zuul","robot_run_id":"97594c4098bc4313b6198cfd1580f499","url":"https://zuul.teim.app/t/main/buildset/97594c4098bc4313b6198cfd1580f499","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"26f51ff2f577b1ff0d1943d97d81965d4578fd0f","patch_set":1,"id":"c26abcab_a3848817","line":212,"updated":"2026-03-24 13:21:42.000000000","message":"In _cancel_remaining_actions, when abort() fails the action is set to FAILED but a normal CANCEL/END notification is sent instead of an ERROR notification. base.py revert() sends CANCEL/ERROR with NotificationPriority.ERROR on abort failure. This inconsistency misleads operators.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: Operators miss cancellation failures in linear flow. FAILED state with CANCEL/END notification causes incorrect monitoring and automated remediation.\n\n**Priority**: Before merge\n**Why This Matters**: Notification consistency between flow modes is critical for operational observability. Abort failure is an error condition matching base.py revert().\n\n**Recommendation**:\nSend CANCEL/ERROR notification with NotificationPriority.ERROR when abort() raises, matching base.py revert() pattern (lines 309-317).","commit_id":"a8d4fa29ddf0b9fd4c520bbe837f3bc3ff451533"},{"robot_id":"zuul","robot_run_id":"97594c4098bc4313b6198cfd1580f499","url":"https://zuul.teim.app/t/main/buildset/97594c4098bc4313b6198cfd1580f499","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"26f51ff2f577b1ff0d1943d97d81965d4578fd0f","patch_set":1,"id":"f40ddd56_1d47d558","line":240,"updated":"2026-03-24 13:21:42.000000000","message":"No runtime validation rejects flow_type\u003d\u0027linear\u0027 with execution_rule\u003d\u0027ANY\u0027. The docstring says linear doesn\u0027t support ANY, but execute() silently ignores this - the decider callback is never wired so all actions execute instead of skip-on-success.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Operators configuring flow_type\u003d\u0027linear\u0027 with ANY-rule strategies get unexpected behavior: all actions execute without warning.\n\n**Suggestion**:\nAdd a runtime check in execute() raising WorkflowExecutionException when flow_type\u003d\u003d\u0027linear\u0027 and execution_rule\u003d\u003d\u0027ANY\u0027.","commit_id":"a8d4fa29ddf0b9fd4c520bbe837f3bc3ff451533"},{"robot_id":"zuul","robot_run_id":"97594c4098bc4313b6198cfd1580f499","url":"https://zuul.teim.app/t/main/buildset/97594c4098bc4313b6198cfd1580f499","author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"26f51ff2f577b1ff0d1943d97d81965d4578fd0f","patch_set":1,"id":"326b0842_1632943b","line":265,"updated":"2026-03-24 13:21:42.000000000","message":"flow_type is stored in a local variable at line 240 but lines 265 and 271 re-read self.config.flow_type directly. Dynamic config reload could cause the cancellation check to use a different value than flow construction.\n\n**Severity**: SUGGESTION | **Confidence**: 0.9\n\n**Benefit**: Eliminates theoretical TOCTOU inconsistency; uses local variable consistently captured at method start.\n\n**Recommendation**:\nReplace self.config.flow_type with the local flow_type variable at lines 265 and 271.","commit_id":"a8d4fa29ddf0b9fd4c520bbe837f3bc3ff451533"}]}
