)]}'
{"id":"openstack%2Fwatcher-dashboard~978306","triplet_id":"openstack%2Fwatcher-dashboard~master~Iebcb20cb415822d46391dd73d6b1aaeac386857d","project":"openstack/watcher-dashboard","branch":"master","topic":"service-layer-refactor","attention_set":{"11604":{"account":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"last_update":"2026-04-30 21:42:40.000000000","reason":"Someone else replied on the change"},"26471":{"account":{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"},"last_update":"2026-04-30 21:42:40.000000000","reason":"Some votes were not copied to the current patch set"}},"removed_from_attention_set":{},"hashtags":[],"change_id":"Iebcb20cb415822d46391dd73d6b1aaeac386857d","subject":"Add PEP 484 type annotations to api/watcher.py and errors.py","status":"NEW","created":"2026-02-28 12:22:05.000000000","updated":"2026-04-30 21:42:40.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":true,"submittable":false,"total_comment_count":24,"unresolved_comment_count":1,"has_review_started":true,"meta_rev_id":"fc22c34d15c149fa84e9c660eb15fe3989bccdf4","_number":978306,"virtual_id_number":978306,"owner":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:zuul:check","value":1,"date":"2026-04-30 20:53:47.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"}],"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":{"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"permitted_voting_range":{"min":-2,"max":2},"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"}],"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":"","default_value":0,"optional":true},"Workflow":{"all":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"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"}],"REVIEWER":[{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},{"_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"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-02-28 12:24:38.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-02-28 12:49:05.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"},{"updated":"2026-02-28 15:24:04.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"}],"messages":[{"id":"aca44e1f4bc58912f52d0e7b38293cfd9709f964","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"date":"2026-02-28 12:22:05.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"0a3c0eb1bab31c2e291e44dca936d6b66df12837","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-02-28 12:24:38.000000000","message":"Patch Set 1:\n\nStarting automatic-ci jobs.","accounts_in_message":[],"_revision_number":1},{"id":"bf865f8fc241fa74fdabb340625ddbb7b1ac60c1","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-02-28 12:36:15.000000000","message":"Patch Set 1:\n\n(1 comment)\n\nBuild succeeded (automatic-ci pipeline).\nhttps://zuul.teim.app/t/main/buildset/3eb2c513b7ab4b588c6e0ba9212c69b9\n\n- teim-code-review https://zuul.teim.app/t/main/build/5b16596011cd47d9ba0d6015583266f9 : SUCCESS in 11m 24s","accounts_in_message":[],"_revision_number":1},{"id":"381ebb3f7353e8fa2e44eace6800edc670bdb33f","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-02-28 12:49:05.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/3d1c782f32104905931e9de3d592fb91\n\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/690cc4dfb466461fb00fb860b8c0683c : SUCCESS in 2m 23s\n- horizon-tox-python3-django42 https://zuul.opendev.org/t/openstack/build/101d225f59fa471db9f75d337a39e69e : SUCCESS in 4m 12s\n- horizon-tox-python3-django52 https://zuul.opendev.org/t/openstack/build/f9af51dc610d45a79b5cb54ae882b748 : SUCCESS in 4m 27s (non-voting)\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/9dea07d354a34e55b3050e67dcfe270c : SUCCESS in 4m 53s\n- openstack-tox-py310 https://zuul.opendev.org/t/openstack/build/f57b36a3bb474a358e29d0018829d43a : SUCCESS in 4m 10s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/aef4b66b533d403a9ba1127f7a6f9405 : FAILURE in 6m 53s (non-voting)\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/74c646a82c884297aed9b5a63f41742d : SUCCESS in 4m 02s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/4808d5019e9b4beeb51b11ca400c0f72 : SUCCESS in 6m 51s","accounts_in_message":[],"_revision_number":1},{"id":"7186ba13c34b25ff77edfb133e1e6632c97ff2de","author":{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"},"date":"2026-02-28 15:24:04.000000000","message":"Patch Set 1: Code-Review+1\n\nBuild succeeded (check pipeline).\nhttps://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/f05057e43b514d1bb38864b037690965\n\n- openstack-meta-content-provider-master https://softwarefactory-project.io/zuul/t/rdoproject.org/build/a41d488524e54c5899322cd771e0ea89 : SUCCESS in 3h 00m 17s\n- watcher-operator-validation-master https://softwarefactory-project.io/zuul/t/rdoproject.org/build/aef98b33bbd24ac4be37e2f47a3c839b : SUCCESS in 2h 10m 24s","accounts_in_message":[],"_revision_number":1},{"id":"0964795d8725445d69a165db646d212f92c8cc0a","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"date":"2026-03-30 13:51:26.000000000","message":"Uploaded patch set 2.\n\nOutdated Votes:\n* Code-Review+1 (copy condition: \"changekind:TRIVIAL_REBASE OR is:MIN\")\n* Verified+1\n","accounts_in_message":[],"_revision_number":2},{"id":"04deb51af5b9445ad9aefcd2a661b59fe4808bea","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-03-30 13:53:06.000000000","message":"Patch Set 2:\n\nStarting automatic-ci jobs.","accounts_in_message":[],"_revision_number":2},{"id":"a58727be2a05e6224ec4f2d1802e321ad0c10435","tag":"autogenerated:gerrit:setTopic","author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"date":"2026-03-30 13:53:36.000000000","message":"Topic service-layer-pattern removed","accounts_in_message":[],"_revision_number":2},{"id":"6b4d7c5f7f6db73278741d942fea3ca9269c86d3","tag":"autogenerated:gerrit:setTopic","author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"date":"2026-03-30 13:54:05.000000000","message":"Topic set to typing","accounts_in_message":[],"_revision_number":2},{"id":"f96a5e6f18aec097890ae6728c19b5f0c4641690","author":{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"},"date":"2026-03-30 14:00:55.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://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/dd654a2b69ac4ab79ea97690e24df092\n\n- openstack-meta-content-provider-master https://softwarefactory-project.io/zuul/t/rdoproject.org/build/b1e167131e1e480aa34180f44fa5818a : FAILURE in 7m 40s\n- watcher-operator-validation-master https://softwarefactory-project.io/zuul/t/rdoproject.org/build/b5810b8e8e0747e483b57444ce3a6055 : SKIPPED Skipped due to failed job openstack-meta-content-provider-master","accounts_in_message":[],"_revision_number":2},{"id":"60f6bce0b8c05ac47613f39ab3d178136200de4e","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-30 14:13:12.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/b760a1e965f94b48904f6e2da2cc251b\n\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/50b24ea20bd74b44b1c35254af443025 : SUCCESS in 5m 58s\n- horizon-tox-python3-django42 https://zuul.opendev.org/t/openstack/build/5b2384594fe44d4492ad46520955ced9 : SUCCESS in 5m 54s\n- horizon-tox-python3-django52 https://zuul.opendev.org/t/openstack/build/cc464a41a8634476a7e2646ff8a234a5 : SUCCESS in 6m 23s (non-voting)\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/9f42bf9356ad44caac182fc4033d5e69 : FAILURE in 2m 35s\n- openstack-tox-py310 https://zuul.opendev.org/t/openstack/build/ccb1bf91b3d54995869332202a7e93f2 : SUCCESS in 7m 16s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/a9334a9f8863461a86571e5c43537c6a : FAILURE in 6m 56s (non-voting)\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/9d7dcd6c00da4a26a11bcf494d4c2043 : SUCCESS in 4m 43s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/a2d6db3b3bd1429fb3bd780a162d2c97 : FAILURE in 3m 55s","accounts_in_message":[],"_revision_number":2},{"id":"827396959410460a0e8055b924c5a556e4cb9d2a","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-03-30 15:56:18.000000000","message":"Patch Set 2:\n\n(8 comments)\n\nBuild succeeded (automatic-ci pipeline).\nhttps://zuul.teim.app/t/main/buildset/1d8b84a0a84d42c192b0877df3e775ee\n\n- teim-code-review https://zuul.teim.app/t/main/build/018151df5b304699911579582cc80fb6 : SUCCESS in 8m 45s","accounts_in_message":[],"_revision_number":2},{"id":"5ab077145e64c0da3a6e9ec3771e3cd6dea61a66","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"date":"2026-04-04 00:52:13.000000000","message":"Uploaded patch set 3.\n\nOutdated Votes:\n* Code-Review-1 (copy condition: \"changekind:TRIVIAL_REBASE OR is:MIN\")\n* Verified-1\n","accounts_in_message":[],"_revision_number":3},{"id":"bf87aad379461316e9a00760a74a352c38fb0e81","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-04-04 00:53:35.000000000","message":"Patch Set 3:\n\nStarting automatic-ci jobs.","accounts_in_message":[],"_revision_number":3},{"id":"03951240283942c0d9516683cae93868366402d8","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-04-04 01:10:59.000000000","message":"Patch Set 3: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/5ecf3ba28a954f7d8a63605eb6d16832\n\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/5e933a97ed434e31b6c47a397a877edc : SUCCESS in 3m 50s\n- horizon-tox-python3-django42 https://zuul.opendev.org/t/openstack/build/02299cee9f914fc4a01638c39ab8a892 : SUCCESS in 2m 30s\n- horizon-tox-python3-django52 https://zuul.opendev.org/t/openstack/build/4f275faf9c06427ca61211133d5c923f : SUCCESS in 4m 29s (non-voting)\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/953f096a5d9044e4b22917ea80f46e52 : SUCCESS in 3m 06s\n- openstack-tox-py310 https://zuul.opendev.org/t/openstack/build/ec7c6cdf66394b50bb5cd5b98b4c8d97 : SUCCESS in 4m 19s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/31b1a4a25ea14d1d8fd1df1f4de345ca : FAILURE in 6m 38s (non-voting)\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/df3e86abef474d53ab18cc1329f65398 : SUCCESS in 3m 59s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/c4893d92d9b64720a09cd1ac14da423d : SUCCESS in 6m 07s","accounts_in_message":[],"_revision_number":3},{"id":"e74d38e95e8d410c41952dd6ddd3961e78be1240","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-04-04 02:05:43.000000000","message":"Patch Set 3:\n\n(6 comments)\n\nBuild succeeded (automatic-ci pipeline).\nhttps://zuul.teim.app/t/main/buildset/d8f77a24e890499d84f27326db76f54d\n\n- teim-code-review https://zuul.teim.app/t/main/build/2de889783b474920b692d31061747a30 : SUCCESS in 9m 12s","accounts_in_message":[],"_revision_number":3},{"id":"c552fb41e6c8db9fcb7cfa092b1a8fe846e1f11e","author":{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"},"date":"2026-04-04 04:06:17.000000000","message":"Patch Set 3: Code-Review+1\n\nBuild succeeded (check pipeline).\nhttps://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/9b67364cdd6a4faab340d4d3313ca879\n\n- openstack-meta-content-provider-master https://softwarefactory-project.io/zuul/t/rdoproject.org/build/ff0f23dd34c045e8b0bf5e76ab1b581f : SUCCESS in 3h 12m 08s\n- watcher-operator-validation-master https://softwarefactory-project.io/zuul/t/rdoproject.org/build/7b16c28b333c4ce5a0b485c32629a349 : SUCCESS in 2h 15m 22s","accounts_in_message":[],"_revision_number":3},{"id":"496b871f9463e1b43526aef984b35afc0b7c715f","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"date":"2026-04-30 17:31:42.000000000","message":"Uploaded patch set 4: Patch Set 3 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":4},{"id":"fdac4f07b5d28b02807bdee7400a054bc632f3c7","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-04-30 17:32:41.000000000","message":"Patch Set 4:\n\nStarting automatic-ci jobs.","accounts_in_message":[],"_revision_number":4},{"id":"8dea9c47f650a16ebdf14f75d376898cbb9614da","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-04-30 17:46:58.000000000","message":"Patch Set 4: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/4a001c41865e457ab1041b9e51e9437b\n\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/dbe6bc8186b04729a43f172739fac51e : SUCCESS in 4m 08s\n- horizon-tox-python3-django42 https://zuul.opendev.org/t/openstack/build/c0574d294a0149158ab3c0c8f88614f7 : SUCCESS in 4m 28s\n- horizon-tox-python3-django52 https://zuul.opendev.org/t/openstack/build/11a15e88d10149fcb5d1766ef9fc03aa : SUCCESS in 4m 27s (non-voting)\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/67de8fb52b6740ad8d46efc846109f10 : SUCCESS in 3m 45s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/2ef13d7d7c5a4411ab63121ce90729da : SUCCESS in 4m 23s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/a24dc4e7064840189f4012d079b38c24 : FAILURE in 6m 56s (non-voting)\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/40b35e8ab94a4904a3d888cdbab582f5 : SUCCESS in 4m 23s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/2bda966dcaea42aead860c41474eb539 : SUCCESS in 7m 22s","accounts_in_message":[],"_revision_number":4},{"id":"a176d0ed85f71b7d39ddd22d15a45785b8319a38","author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"date":"2026-04-30 18:40:20.000000000","message":"Patch Set 4: Workflow-1\n\n(2 comments)","accounts_in_message":[],"_revision_number":4},{"id":"c7a51bd6cd8df1af4f31850092867f504a53815f","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-04-30 19:06:40.000000000","message":"Patch Set 4:\n\n(7 comments)\n\nBuild succeeded (automatic-ci pipeline).\nhttps://zuul.teim.app/t/main/buildset/cc3ad90ee96f4052b8087b86b3db17db\n\n- teim-code-review https://zuul.teim.app/t/main/build/777f0875ed0345199e5e1ec4a1e95382 : SUCCESS in 13m 15s","accounts_in_message":[],"_revision_number":4},{"id":"fb657bcbcc7f7c8c7cbe3a8fc3cd79507fe260d8","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"date":"2026-04-30 20:42:49.000000000","message":"Uploaded patch set 5.\n\nOutdated Votes:\n* Code-Review+1 (copy condition: \"changekind:TRIVIAL_REBASE OR is:MIN\")\n* Verified+1 (copy condition: \"NEVER\")\n* Workflow-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":5},{"id":"d33bd48ad3942e329ca76b80db46b5df32a2e245","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-04-30 20:53:47.000000000","message":"Patch Set 5: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/f429afcc02414cbaa20e45dd4d78e6bf\n\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/12d8ec52f4c64c8eb0076c5153bf25ea : SUCCESS in 4m 02s\n- horizon-tox-python3-django42 https://zuul.opendev.org/t/openstack/build/b2b1fa29602d44b1b505d90ba2330864 : SUCCESS in 2m 32s\n- horizon-tox-python3-django52 https://zuul.opendev.org/t/openstack/build/430da3e373de4b7798764ebc66baae29 : SUCCESS in 2m 33s (non-voting)\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/4b98fc7f45914042a0cafc7384d8c6aa : SUCCESS in 4m 05s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/f358900f35574ca4af31309c7fdc9361 : SUCCESS in 3m 46s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/15842d1d2794454195139ad820e3458e : FAILURE in 7m 17s (non-voting)\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/d0219d10fb6c4d8f9e4a0139a0152837 : SUCCESS in 4m 26s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/8ac9fdfc1f0648519b1efe53254bea5c : SUCCESS in 7m 50s","accounts_in_message":[],"_revision_number":5},{"id":"b766ac1981cdd4ddb3acd22ac1b757a08014e5d1","author":{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"},"date":"2026-04-30 21:42:40.000000000","message":"Patch Set 4: Code-Review+1\n\nBuild succeeded (check pipeline).\nhttps://gateway-cloud-softwarefactory.apps.ocp.cloud.ci.centos.org/zuul/t/rdo/buildset/0a6fe1014d5d4455890eec6e950e63d3\n\n- openstack-meta-content-provider-master https://gateway-cloud-softwarefactory.apps.ocp.cloud.ci.centos.org/zuul/t/rdo/build/98ddd06cc6184df6b0cbdbdca8dbcd3c : SUCCESS in 4h 08m 23s\n- watcher-operator-validation-master https://gateway-cloud-softwarefactory.apps.ocp.cloud.ci.centos.org/zuul/t/rdo/build/3d2ee3ba3e7d4796beb29a9d9494f07d : SUCCESS in 2h 10m 53s","accounts_in_message":[],"_revision_number":4}],"current_revision_number":5,"current_revision":"8485b31f75a5844425f9336f708be27f449ff9f7","revisions":{"a4c24b6b9287289e98a1436d840d398714ab41d4":{"kind":"REWORK","_number":1,"created":"2026-02-28 12:22:05.000000000","uploader":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"ref":"refs/changes/06/978306/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher-dashboard","ref":"refs/changes/06/978306/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/1"}}},"commit":{"parents":[{"commit":"f79d35325aea826656558d3631c520f6a183654c","subject":"test: fix efficacy_specifications fixture to be a list","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/f79d35325aea826656558d3631c520f6a183654c"}]}],"author":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-27 23:03:06.000000000","tz":0},"committer":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-28 12:18:04.000000000","tz":0},"subject":"feat(A5-1): add PEP 484 type annotations to api/watcher.py and errors.py","message":"feat(A5-1): add PEP 484 type annotations to api/watcher.py and errors.py\n\n- Create watcher_dashboard/py.typed marker (PEP 561)\n- Add typed public signature to utils/errors.handle_errors: TypeVar T,\n  Callable return type, str/int parameter types\n- Add TYPE_CHECKING guard for django.http.HttpRequest (string-literal\n  annotations throughout for runtime safety on Python 3.10+)\n- Annotate all classmethods in Audit, AuditTemplate, ActionPlan, Action,\n  Goal, Strategy: HttpRequest params, typed filters **kwargs, typed returns\n- Use cast() at every watcherclient chain return to bridge untyped library\n  results to typed wrapper classes\n- Annotate __init__, id property, and EfficacyIndicator/__init__\n- Remove implicit returns from delete/cancel (now -\u003e None)\n\nGenerated-By: claude-code sonnet 4.6\nChange-Id: Iebcb20cb415822d46391dd73d6b1aaeac386857d\nSigned-off-by: Sean Mooney \u003cwork@seanmooney.info\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/a4c24b6b9287289e98a1436d840d398714ab41d4"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/a4c24b6b9287289e98a1436d840d398714ab41d4"}]},"branch":"refs/heads/master"},"d92f9e0aff9df98aca202c959f849dc086ea9db0":{"kind":"REWORK","_number":2,"created":"2026-03-30 13:51:26.000000000","uploader":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"ref":"refs/changes/06/978306/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher-dashboard","ref":"refs/changes/06/978306/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/2"}}},"commit":{"parents":[{"commit":"75b22d92f9972014a62e3085dd95c370628f5c3b","subject":"refactor: replace/annotate reflection helpers (A2-1)","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/75b22d92f9972014a62e3085dd95c370628f5c3b"}]}],"author":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-27 23:03:06.000000000","tz":0},"committer":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-03-30 13:51:08.000000000","tz":60},"subject":"feat(A5-1): add PEP 484 type annotations to api/watcher.py and errors.py","message":"feat(A5-1): add PEP 484 type annotations to api/watcher.py and errors.py\n\n- Create watcher_dashboard/py.typed marker (PEP 561)\n- Add typed public signature to utils/errors.handle_errors: TypeVar T,\n  Callable return type, str/int parameter types\n- Add TYPE_CHECKING guard for django.http.HttpRequest (string-literal\n  annotations throughout for runtime safety on Python 3.10+)\n- Annotate all classmethods in Audit, AuditTemplate, ActionPlan, Action,\n  Goal, Strategy: HttpRequest params, typed filters **kwargs, typed returns\n- Use cast() at every watcherclient chain return to bridge untyped library\n  results to typed wrapper classes\n- Annotate __init__, id property, and EfficacyIndicator/__init__\n- Remove implicit returns from delete/cancel (now -\u003e None)\n\nGenerated-By: claude-code sonnet 4.6\nChange-Id: Iebcb20cb415822d46391dd73d6b1aaeac386857d\nSigned-off-by: Sean Mooney \u003cwork@seanmooney.info\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/d92f9e0aff9df98aca202c959f849dc086ea9db0"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/d92f9e0aff9df98aca202c959f849dc086ea9db0"}]},"branch":"refs/heads/master"},"1835bd0304c604ff3783f9b0ec6f7d1435cb555a":{"kind":"REWORK","_number":3,"created":"2026-04-04 00:52:13.000000000","uploader":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"ref":"refs/changes/06/978306/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher-dashboard","ref":"refs/changes/06/978306/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/3"}}},"commit":{"parents":[{"commit":"343dfb82b7c1a4840c4b4c7c5839e254dc99f85f","subject":"refactor: replace/annotate reflection helpers (A2-1)","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/343dfb82b7c1a4840c4b4c7c5839e254dc99f85f"}]}],"author":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-27 23:03:06.000000000","tz":0},"committer":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-04-04 00:49:03.000000000","tz":60},"subject":"feat(A5-1): add PEP 484 type annotations to api/watcher.py and errors.py","message":"feat(A5-1): add PEP 484 type annotations to api/watcher.py and errors.py\n\n- Create watcher_dashboard/py.typed marker (PEP 561)\n- Add typed public signature to utils/errors.handle_errors: TypeVar T,\n  Callable return type, str/int parameter types\n- Add TYPE_CHECKING guard for django.http.HttpRequest (string-literal\n  annotations throughout for runtime safety on Python 3.10+)\n- Annotate all classmethods in Audit, AuditTemplate, ActionPlan, Action,\n  Goal, Strategy: HttpRequest params, typed filters **kwargs, typed returns\n- Use cast() at every watcherclient chain return to bridge untyped library\n  results to typed wrapper classes\n- Annotate __init__, id property, and EfficacyIndicator/__init__\n- Remove implicit returns from delete/cancel (now -\u003e None)\n\nGenerated-By: claude-code sonnet 4.6\nChange-Id: Iebcb20cb415822d46391dd73d6b1aaeac386857d\nSigned-off-by: Sean Mooney \u003cwork@seanmooney.info\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/1835bd0304c604ff3783f9b0ec6f7d1435cb555a"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/1835bd0304c604ff3783f9b0ec6f7d1435cb555a"}]},"branch":"refs/heads/master"},"c751dea942fbb77b72465cd2416bcfa7ef210f93":{"kind":"TRIVIAL_REBASE","_number":4,"created":"2026-04-30 17:31:42.000000000","uploader":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"ref":"refs/changes/06/978306/4","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher-dashboard","ref":"refs/changes/06/978306/4","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/4"}}},"commit":{"parents":[{"commit":"3557a8f7087a95d689b2f26f9e8833ba3d5dc68e","subject":"refactor: replace/annotate reflection helpers (A2-1)","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/3557a8f7087a95d689b2f26f9e8833ba3d5dc68e"}]}],"author":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-27 23:03:06.000000000","tz":0},"committer":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-04-30 16:56:11.000000000","tz":60},"subject":"feat(A5-1): add PEP 484 type annotations to api/watcher.py and errors.py","message":"feat(A5-1): add PEP 484 type annotations to api/watcher.py and errors.py\n\n- Create watcher_dashboard/py.typed marker (PEP 561)\n- Add typed public signature to utils/errors.handle_errors: TypeVar T,\n  Callable return type, str/int parameter types\n- Add TYPE_CHECKING guard for django.http.HttpRequest (string-literal\n  annotations throughout for runtime safety on Python 3.10+)\n- Annotate all classmethods in Audit, AuditTemplate, ActionPlan, Action,\n  Goal, Strategy: HttpRequest params, typed filters **kwargs, typed returns\n- Use cast() at every watcherclient chain return to bridge untyped library\n  results to typed wrapper classes\n- Annotate __init__, id property, and EfficacyIndicator/__init__\n- Remove implicit returns from delete/cancel (now -\u003e None)\n\nGenerated-By: claude-code sonnet 4.6\nChange-Id: Iebcb20cb415822d46391dd73d6b1aaeac386857d\nSigned-off-by: Sean Mooney \u003cwork@seanmooney.info\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/c751dea942fbb77b72465cd2416bcfa7ef210f93"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/c751dea942fbb77b72465cd2416bcfa7ef210f93"}]},"branch":"refs/heads/master"},"8485b31f75a5844425f9336f708be27f449ff9f7":{"kind":"REWORK","_number":5,"created":"2026-04-30 20:42:49.000000000","uploader":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"ref":"refs/changes/06/978306/5","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher-dashboard","ref":"refs/changes/06/978306/5","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/5 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/5 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/5 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher-dashboard refs/changes/06/978306/5"}}},"commit":{"parents":[{"commit":"3557a8f7087a95d689b2f26f9e8833ba3d5dc68e","subject":"refactor: replace/annotate reflection helpers (A2-1)","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/3557a8f7087a95d689b2f26f9e8833ba3d5dc68e"}]}],"author":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-27 23:03:06.000000000","tz":0},"committer":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-04-30 20:04:36.000000000","tz":60},"subject":"Add PEP 484 type annotations to api/watcher.py and errors.py","message":"Add PEP 484 type annotations to api/watcher.py and errors.py\n\nThe classmethods on each resource class (Audit, AuditTemplate, etc.)\nreturned raw watcherclient resource objects rather than watcher_dashboard\nwrapper instances. Because APIDictWrapper indexes via self._apidict[key]\nand watcherclient resources implement neither __contains__ nor\n__getitem__, any caller relying on APIDictWrapper behaviour received a\nsilently broken object. This commit adds PEP 484 annotations throughout\nand fixes each classmethod to construct and return real wrapper instances.\n\n- Create watcher_dashboard/py.typed marker (PEP 561)\n- Add typed public signature to utils/errors.handle_errors: TypeVar T,\n  Callable return type, str/int parameter types\n- Add TYPE_CHECKING guard for django.http.HttpRequest (string-literal\n  annotations throughout for runtime safety on Python 3.10+)\n- Annotate all classmethods in Audit, AuditTemplate, ActionPlan,\n  Action, Goal, Strategy: HttpRequest params, typed **kwargs, returns\n- list(), get(), create() and patch() classmethods return dashboard\n  wrapper instances; cls(raw.to_dict()) constructs each from the\n  watcherclient result -- to_dict() returns a plain dict that\n  APIDictWrapper can index safely\n- Annotate Action.update() and get_strategy_display_name(); all\n  @handle_errors-decorated get() methods return T | None (the decorator\n  returns None on error paths)\n- Annotate __init__, id property, and EfficacyIndicator/__init__\n- Remove implicit returns from delete/cancel (now -\u003e None)\n- Tests construct real dashboard class instances as watcherclient mock\n  returns; assertions use isinstance(n, api.watcher.ClassName)\n\nAssisted-By: claude-code sonnet 4.6\nChange-Id: Iebcb20cb415822d46391dd73d6b1aaeac386857d\nSigned-off-by: Sean Mooney \u003cwork@seanmooney.info\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/8485b31f75a5844425f9336f708be27f449ff9f7"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/8485b31f75a5844425f9336f708be27f449ff9f7"}]},"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"},{"label":"Workflow","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":"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":""}}}]}
