)]}'
{"id":"openstack%2Fwatcher-dashboard~978307","triplet_id":"openstack%2Fwatcher-dashboard~master~Ib2e6df60d9427e914d0f30ec4e296b0254b6ef22","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 20:42:49.000000000","reason":"Vote got outdated and was removed: Workflow-1"},"26471":{"account":{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"},"last_update":"2026-04-30 20:42:49.000000000","reason":"Vote got outdated and was removed: Code-Review+1"}},"removed_from_attention_set":{},"hashtags":[],"change_id":"Ib2e6df60d9427e914d0f30ec4e296b0254b6ef22","subject":"Add mypy tox target with application-grade type check settings","status":"NEW","created":"2026-02-28 12:22:05.000000000","updated":"2026-04-30 20:53:35.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":false,"submittable":false,"total_comment_count":1,"unresolved_comment_count":1,"has_review_started":true,"meta_rev_id":"9c7b232502a3c315fb8fe70ea024c0e33130bcaf","_number":978307,"virtual_id_number":978307,"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":[{"_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"},{"tag":"autogenerated:zuul:check","value":1,"date":"2026-04-30 20:53:35.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":{"all":[{"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"},{"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":"","default_value":0,"optional":true},"Workflow":{"all":[{"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"},{"_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":2},"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},{"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":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"}],"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-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:39:33.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 13:53:27.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":"e721085fb2775d607bbb75a55ea1acf6433cd6c7","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":"0786637d142f84c278ea3ce37a0cb1a6ac315f37","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":"193a757f36d545fee0010c119b1bbd84db7db432","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:26.000000000","message":"Patch Set 1:\n\n(3 comments)\n\nBuild succeeded (automatic-ci pipeline).\nhttps://zuul.teim.app/t/main/buildset/553ceccd6b414ca385a880b6ba182f4e\n\n- teim-code-review https://zuul.teim.app/t/main/build/94ea190131b944fd94af80afd711fa62 : SUCCESS in 11m 33s\n\nWarning:\n  Comments left for invalid file .pre-commit-config.yaml\n  Comments left for invalid file watcher_dashboard/config.py","accounts_in_message":[],"_revision_number":1},{"id":"eaafa98324177425102eeab13af67a97e96e2e6d","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-02-28 12:39:33.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/036fa5796a7445e1bd4416aff1e1ce4a\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/d091ccf9de3e45b597203b3cab26773b : SUCCESS in 5m 19s\n- requirements-check https://zuul.opendev.org/t/openstack/build/8dbcd4e2c57f4d6ea80787437eb49540 : SUCCESS in 2m 26s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/0cb878cf6e2a42a58dda9d0d43f57b28 : SUCCESS in 4m 03s\n- horizon-tox-python3-django42 https://zuul.opendev.org/t/openstack/build/4ac1301c093045188b331822862eae52 : SUCCESS in 4m 11s\n- horizon-tox-python3-django52 https://zuul.opendev.org/t/openstack/build/b84c8aba70d84ad8afcaa8d27ccaf623 : SUCCESS in 6m 09s (non-voting)\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/ad890c298ab7436598c5881a830f89b7 : SUCCESS in 2m 47s\n- openstack-tox-py310 https://zuul.opendev.org/t/openstack/build/c55d3576950c42c5bc1517f9ccf1c0af : SUCCESS in 2m 21s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/54724c9495b44334850840212dfeedf7 : FAILURE in 6m 16s (non-voting)\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/95b2e2fb8d334e24b04932f9f3b1b021 : SUCCESS in 4m 59s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/a2ea02ad68744d33ac5d6c215de0a62a : SUCCESS in 9m 14s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/59010c3eb7604f52993ecbe341eb2668 : SUCCESS in 2m 35s","accounts_in_message":[],"_revision_number":1},{"id":"e595d55341d1653acfcdbcec06a933f9d8a752b0","author":{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"},"date":"2026-02-28 13:53:27.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://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/191eb7298ade4e05ae6058538cae8137\n\n- openstack-meta-content-provider-master https://softwarefactory-project.io/zuul/t/rdoproject.org/build/3fd4e8d42ed04743bf47851afe4e0571 : SUCCESS in 1h 29m 40s\n- watcher-operator-validation-master https://softwarefactory-project.io/zuul/t/rdoproject.org/build/663e247b6d9a48a6a8c6ab0cd4f661f5 : FAILURE in 40m 27s","accounts_in_message":[],"_revision_number":1},{"id":"344f964d4e0ef9a1173f34e37c5ad16cb6137062","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":"7ad3d52702fdddc56e7b3092f088ae1c5d5effea","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:07.000000000","message":"Patch Set 2:\n\nStarting automatic-ci jobs.","accounts_in_message":[],"_revision_number":2},{"id":"1665c42eaff3107528cbbb2aef032930a030dcce","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:11.000000000","message":"Topic service-layer-pattern removed","accounts_in_message":[],"_revision_number":2},{"id":"4553cb04b7de846b1c95fa92007da196ab2c2e0d","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:27.000000000","message":"Topic set to typing","accounts_in_message":[],"_revision_number":2},{"id":"1c803c7b3f85924f6fb96a256635a8b0c1db04a8","author":{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"},"date":"2026-03-30 14:01:18.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/8a42873baea44f6c9709892480580753\n\n- openstack-meta-content-provider-master https://softwarefactory-project.io/zuul/t/rdoproject.org/build/83c664d51e384d79847a53bae2776f1e : FAILURE in 7m 49s\n- watcher-operator-validation-master https://softwarefactory-project.io/zuul/t/rdoproject.org/build/da7f91d3964d4754a613c5547ecf7912 : SKIPPED Skipped due to failed job openstack-meta-content-provider-master","accounts_in_message":[],"_revision_number":2},{"id":"8bab0000fc8c96bb5b7989df91644e8a8ee40140","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-30 14:18:29.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/07e6333059ab4409bd2b6db36afa16a1\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/a761651fabb540e0b4c98712dd773aa4 : SUCCESS in 2m 48s\n- requirements-check https://zuul.opendev.org/t/openstack/build/417267ef0c68441ca47db0569c6c408c : SUCCESS in 2m 09s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/2b1aa73455bf411da04dad3ee22affdd : SUCCESS in 4m 32s\n- horizon-tox-python3-django42 https://zuul.opendev.org/t/openstack/build/9de5ab9b264a41bd84655073e2fc4863 : SUCCESS in 3m 56s\n- horizon-tox-python3-django52 https://zuul.opendev.org/t/openstack/build/df754b8414904c70be2d34500a2511d4 : SUCCESS in 6m 31s (non-voting)\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/b30b33c63ed749648c189c7186a9c7cc : FAILURE in 3m 49s\n- openstack-tox-py310 https://zuul.opendev.org/t/openstack/build/da34fafd5ac14b0d8e2a61361bc0d4c8 : SUCCESS in 5m 00s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/897adcded34946d994fb5d9461900e7e : FAILURE in 8m 44s (non-voting)\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/ec4ab3fb18f443fb872e2a5eed3b4783 : SUCCESS in 4m 23s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/f862ae364c8f41ceaa49c355e3dcc414 : FAILURE in 6m 03s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/a7d25526463348c4af1f9e20c0e18cf9 : SUCCESS in 3m 09s","accounts_in_message":[],"_revision_number":2},{"id":"93c764f33529c05f7e978b368b6cfb4e70aeaec9","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 16:08:40.000000000","message":"Patch Set 2:\n\n(4 comments)\n\nBuild succeeded (automatic-ci pipeline).\nhttps://zuul.teim.app/t/main/buildset/307b173f3a2842c59c88d7264c930c20\n\n- teim-code-review https://zuul.teim.app/t/main/build/5a91e60185de46d1977d7a89a78d6cd2 : SUCCESS in 12m 06s","accounts_in_message":[],"_revision_number":2},{"id":"ab5718bbcf85be6e96f31fb7331e123a259fb86e","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":"13609d208923ee1413f6744aaf9e91722e45457d","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:54.000000000","message":"Patch Set 3:\n\nStarting automatic-ci jobs.","accounts_in_message":[],"_revision_number":3},{"id":"ea392aaccadd803f9de28fa4cb47c6ad93d8439d","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-04-04 01:11:02.000000000","message":"Patch Set 3: 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/c75b9ed35b0d4ade97f6661d43435710\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/e0763cdbccbd4425b232720aea0dbcad : SUCCESS in 3m 06s\n- requirements-check https://zuul.opendev.org/t/openstack/build/fe93b656f2ee419280bde2d124efeeb6 : SUCCESS in 2m 13s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/9e738bca1b5c4b22ae90b1a1eb58ff92 : SUCCESS in 4m 02s\n- horizon-tox-python3-django42 https://zuul.opendev.org/t/openstack/build/2010fe57204a4bebb27a1d4f638b0f05 : SUCCESS in 4m 10s\n- horizon-tox-python3-django52 https://zuul.opendev.org/t/openstack/build/6b51e2517833494a80756635e840946f : SUCCESS in 4m 30s (non-voting)\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/12d1032eaf6241a4a30374c7a9d0e139 : FAILURE in 4m 49s\n- openstack-tox-py310 https://zuul.opendev.org/t/openstack/build/43975f18e7cc4bf1be8d119a401c3e66 : SUCCESS in 2m 33s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/153112dd0740443dafa9b995876c9122 : FAILURE in 6m 42s (non-voting)\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/caa28b7412cf4806a52c43c67bd678a4 : SUCCESS in 2m 19s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/0827ab9eb70145dcb2e8b022bc0295d3 : SUCCESS in 7m 22s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/080b15d5c50a488dadfad234e5633b58 : SUCCESS in 3m 05s\n\nWarning:\n  Comments left for invalid file watcher_dashboard/api/watcher.py\n  Comments left for invalid file watcher_dashboard/config.py","accounts_in_message":[],"_revision_number":3},{"id":"c6231a1873b45de659dbd89ec06e142b274e193e","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:13:41.000000000","message":"Patch Set 3:\n\n(5 comments)\n\nBuild succeeded (automatic-ci pipeline).\nhttps://zuul.teim.app/t/main/buildset/327038856b2546178ae4a3a49ee1a46d\n\n- teim-code-review https://zuul.teim.app/t/main/build/94545016d7e74843b9be844690cc63a6 : SUCCESS in 7m 47s","accounts_in_message":[],"_revision_number":3},{"id":"6063fffaa7d3907bca3efcff4448b9cabd18ac9e","author":{"_account_id":26471,"name":"Software Factory CI","email":"softwarefactory-operations-team@redhat.com","username":"sf-project-io"},"date":"2026-04-04 04:00:03.000000000","message":"Patch Set 3: Code-Review+1\n\nBuild succeeded (check pipeline).\nhttps://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/a3d8c2dbb38f4046981e8e4deb3918af\n\n- openstack-meta-content-provider-master https://softwarefactory-project.io/zuul/t/rdoproject.org/build/c5e70ef6d7ce4f6182be6bc6dd70d94b : SUCCESS in 3h 05m 50s\n- watcher-operator-validation-master https://softwarefactory-project.io/zuul/t/rdoproject.org/build/64642a37336d4aa0b6f64c13b18cd22a : SUCCESS in 2h 10m 07s","accounts_in_message":[],"_revision_number":3},{"id":"a0f8c56840a4aea0ac2d10a1f75ea595afe4085c","author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"date":"2026-04-30 18:45:40.000000000","message":"Patch Set 3: Workflow-1\n\n(1 comment)","accounts_in_message":[],"_revision_number":3},{"id":"7db598f68dbb4943287987c32fc44bac085f5f14","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 4.\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":4},{"id":"9c7b232502a3c315fb8fe70ea024c0e33130bcaf","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-04-30 20:53:35.000000000","message":"Patch Set 4: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/fc23b92f60364f62bfe0a23d491677ce\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/2dd7a1795e784d6baf59f7b9970ae4aa : SUCCESS in 2m 02s\n- requirements-check https://zuul.opendev.org/t/openstack/build/1a96ef64abff4139a0579e0db9fdc8f0 : SUCCESS in 2m 20s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/a8146d76768e4e8aafaf266ca0ca45a4 : SUCCESS in 3m 51s\n- horizon-tox-python3-django42 https://zuul.opendev.org/t/openstack/build/1cd51f1f67dd42f0abc98f1f003c07f4 : SUCCESS in 2m 26s\n- horizon-tox-python3-django52 https://zuul.opendev.org/t/openstack/build/184aeed56f9c4692afd779fd19c7019e : SUCCESS in 3m 37s (non-voting)\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/b9be7ca909f74dea9ce2124ddc0040b8 : SUCCESS in 4m 04s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/d01b37d827a34d6683ba0622f86ea35b : SUCCESS in 4m 55s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/12e266f8097a4770a9c3f16b3cdc9cbd : FAILURE in 7m 40s (non-voting)\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/8ad5952291f64791b0331cc3c85fbb94 : SUCCESS in 5m 08s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/280dec6abc3a4c5abf6b4411e4a75fd3 : SUCCESS in 5m 05s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/7e932f7fedf7403096edc7a17ebc7b54 : SUCCESS in 2m 35s","accounts_in_message":[],"_revision_number":4}],"current_revision_number":4,"current_revision":"d083e7cf305601eabd070eafa32a560753dd2eb3","revisions":{"c4bdb0e3ff176fc3f1481c92514d2e407cbce75e":{"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/07/978307/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher-dashboard","ref":"refs/changes/07/978307/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/07/978307/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/07/978307/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/07/978307/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher-dashboard refs/changes/07/978307/1"}}},"commit":{"parents":[{"commit":"a4c24b6b9287289e98a1436d840d398714ab41d4","subject":"feat(A5-1): add PEP 484 type annotations to api/watcher.py and errors.py","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/a4c24b6b9287289e98a1436d840d398714ab41d4"}]}],"author":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-27 23:03:18.000000000","tz":0},"committer":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-28 12:19:21.000000000","tz":0},"subject":"feat(A5-2): add mypy strict configuration and tox target","message":"feat(A5-2): add mypy strict configuration and tox target\n\n- Add [tool.mypy] section: strict\u003dtrue, disable_error_code\u003d[\"import-untyped\"],\n  exclude doc/releasenotes\n- Suppress untyped modules (content, utils, common, local, test) via\n  ignore_errors\u003dtrue overrides\n- Add disallow_subclassing_any\u003dfalse for api.* (APIDictWrapper base is untyped)\n- Add [testenv:mypy] to tox.ini using -p watcher_dashboard package syntax\n- Add \"Typing :: Typed\" classifier to pyproject.toml\n- Add \"future\" to ruff isort section-order so from __future__ imports sort first\n- Fix config.get_policy_files() return type: dict -\u003e dict[str, str]\n- Suppress no-untyped-call for wv.get_client() (common.* is not yet typed)\n\nGenerated-By: claude-code sonnet 4.6\nChange-Id: Ib2e6df60d9427e914d0f30ec4e296b0254b6ef22\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/c4bdb0e3ff176fc3f1481c92514d2e407cbce75e"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/c4bdb0e3ff176fc3f1481c92514d2e407cbce75e"}]},"branch":"refs/heads/master"},"53604025652e1885d88f574ede324d3199871f76":{"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/07/978307/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher-dashboard","ref":"refs/changes/07/978307/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/07/978307/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/07/978307/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/07/978307/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher-dashboard refs/changes/07/978307/2"}}},"commit":{"parents":[{"commit":"d92f9e0aff9df98aca202c959f849dc086ea9db0","subject":"feat(A5-1): add PEP 484 type annotations to api/watcher.py and errors.py","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/d92f9e0aff9df98aca202c959f849dc086ea9db0"}]}],"author":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-27 23:03:18.000000000","tz":0},"committer":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-03-30 13:51:08.000000000","tz":60},"subject":"feat(A5-2): add mypy strict configuration and tox target","message":"feat(A5-2): add mypy strict configuration and tox target\n\n- Add [tool.mypy] section: strict\u003dtrue, disable_error_code\u003d[\"import-untyped\"],\n  exclude doc/releasenotes\n- Suppress untyped modules (content, utils, common, local, test) via\n  ignore_errors\u003dtrue overrides\n- Add disallow_subclassing_any\u003dfalse for api.* (APIDictWrapper base is untyped)\n- Add [testenv:mypy] to tox.ini using -p watcher_dashboard package syntax\n- Add \"Typing :: Typed\" classifier to pyproject.toml\n- Add \"future\" to ruff isort section-order so from __future__ imports sort first\n- Fix config.get_policy_files() return type: dict -\u003e dict[str, str]\n- Suppress no-untyped-call for wv.get_client() (common.* is not yet typed)\n\nGenerated-By: claude-code sonnet 4.6\nChange-Id: Ib2e6df60d9427e914d0f30ec4e296b0254b6ef22\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/53604025652e1885d88f574ede324d3199871f76"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/53604025652e1885d88f574ede324d3199871f76"}]},"branch":"refs/heads/master"},"97b556b078ec9abf8434fac2ec39be57b49af8b6":{"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/07/978307/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher-dashboard","ref":"refs/changes/07/978307/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/07/978307/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/07/978307/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/07/978307/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher-dashboard refs/changes/07/978307/3"}}},"commit":{"parents":[{"commit":"1835bd0304c604ff3783f9b0ec6f7d1435cb555a","subject":"feat(A5-1): add PEP 484 type annotations to api/watcher.py and errors.py","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/1835bd0304c604ff3783f9b0ec6f7d1435cb555a"}]}],"author":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-27 23:03:18.000000000","tz":0},"committer":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-04-04 00:49:03.000000000","tz":60},"subject":"feat(A5-2): add mypy strict configuration and tox target","message":"feat(A5-2): add mypy strict configuration and tox target\n\n- Add [tool.mypy] section: strict\u003dtrue, disable_error_code\u003d[\"import-untyped\"],\n  exclude doc/releasenotes\n- Suppress untyped modules (content, utils, common, local, test) via\n  ignore_errors\u003dtrue overrides\n- Add disallow_subclassing_any\u003dfalse for api.* (APIDictWrapper base is untyped)\n- Add [testenv:mypy] to tox.ini using -p watcher_dashboard package syntax\n- Add \"Typing :: Typed\" classifier to pyproject.toml\n- Add \"future\" to ruff isort section-order so from __future__ imports sort first\n- Fix config.get_policy_files() return type: dict -\u003e dict[str, str]\n- Suppress no-untyped-call for wv.get_client() (common.* is not yet typed)\n\nGenerated-By: claude-code sonnet 4.6\nChange-Id: Ib2e6df60d9427e914d0f30ec4e296b0254b6ef22\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/97b556b078ec9abf8434fac2ec39be57b49af8b6"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/97b556b078ec9abf8434fac2ec39be57b49af8b6"}]},"branch":"refs/heads/master"},"d083e7cf305601eabd070eafa32a560753dd2eb3":{"kind":"REWORK","_number":4,"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/07/978307/4","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher-dashboard","ref":"refs/changes/07/978307/4","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/07/978307/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/07/978307/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/07/978307/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher-dashboard refs/changes/07/978307/4"}}},"commit":{"parents":[{"commit":"8485b31f75a5844425f9336f708be27f449ff9f7","subject":"Add PEP 484 type annotations to api/watcher.py and errors.py","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/8485b31f75a5844425f9336f708be27f449ff9f7"}]}],"author":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-27 23:03:18.000000000","tz":0},"committer":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-04-30 20:27:11.000000000","tz":60},"subject":"Add mypy tox target with application-grade type check settings","message":"Add mypy tox target with application-grade type check settings\n\nwatcher-dashboard is a Horizon plugin (an application), not a typed\nlibrary. The mypy configuration is therefore scoped to checks that are\nuseful for catching annotation errors in the service layer without\nrequiring the full annotation coverage that strict mode demands from\nlibrary authors. The chosen flags are:\n\n- disallow_untyped_defs: require annotations on functions in typed modules\n- check_untyped_defs: still type-check bodies of unannotated functions\n- warn_return_any: catch accidental Any leakage through return values\n- warn_unused_ignores: keep type: ignore comments tidy\n- no_implicit_optional: x: str \u003d None must be declared as x: str | None\n- disable_error_code \u003d [\"import-untyped\"]: suppress noise from the\n  untyped OpenStack UI ecosystem (Horizon, Django, watcherclient)\n\nPer-module ignore_errors overrides exclude the untyped layers from\nchecking (content.*, utils.*, common.*, local.*, tests.*) so mypy focuses\non api.* and config.py, which carry PEP 484 annotations. The tox target\nruns mypy -p watcher_dashboard with a per-environment cache directory and\nis also integrated into the pep8 gate.\n\nThree annotation corrections are included to satisfy the checker on the\nalready-typed modules:\n- Audit.create() interval is typed as str | int | None; the API accepts\n  either form and the existing docstring already said so\n- handle_errors() error_default is typed as object (not T | None) so\n  that mypy infers T from the decorated function\u0027s return type rather\n  than binding T to None when the default is omitted\n- get_strategy_display_name() wraps its return in cast(str, ...) because\n  APIDictWrapper attribute access returns Any\n\nAssisted-By: claude-code sonnet 4.6\nChange-Id: Ib2e6df60d9427e914d0f30ec4e296b0254b6ef22\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/d083e7cf305601eabd070eafa32a560753dd2eb3"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/d083e7cf305601eabd070eafa32a560753dd2eb3"}]},"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"},{"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":""}}}]}
