)]}'
{"id":"openstack%2Fwatcher-dashboard~978239","triplet_id":"openstack%2Fwatcher-dashboard~master~I3ff52ee5e76cb4fbf9a1889b9d60446967f6fda9","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:58:52.000000000","reason":"A robot voted negatively on a label"}},"removed_from_attention_set":{},"hashtags":[],"change_id":"I3ff52ee5e76cb4fbf9a1889b9d60446967f6fda9","subject":"docs: document UI-layer contribution patterns","status":"NEW","created":"2026-02-27 16:46:40.000000000","updated":"2026-04-30 20:58:52.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":false,"submittable":false,"total_comment_count":3,"unresolved_comment_count":1,"has_review_started":true,"meta_rev_id":"820ba380586b2047ee8bac394440b41724aa5cbb","_number":978239,"virtual_id_number":978239,"owner":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"actions":{},"labels":{"Verified":{"disliked":{"_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"},{"tag":"autogenerated:zuul:check","value":-1,"date":"2026-04-30 20:58:52.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":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":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":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"]}],"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-27 16:46:47.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-27 17:00:11.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":"38f2caf263c49fb5a3fd52d359342d1db6905996","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"date":"2026-02-27 16:46:40.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"732ab1f75b441147304b267cb9e031feaa0e4332","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-27 16:46:47.000000000","message":"Patch Set 1:\n\nStarting automatic-ci jobs.","accounts_in_message":[],"_revision_number":1},{"id":"a3eefc983c90effa3e592cb128cfaedd8ad8d22b","author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"date":"2026-02-27 16:51:27.000000000","message":"Patch Set 1: Workflow-1\n\n(2 comments)","accounts_in_message":[],"_revision_number":1},{"id":"15dc745f1bdbff89a5679892749e49da00b5779b","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-27 16:55:29.000000000","message":"Patch Set 1:\n\n(6 comments)\n\nBuild succeeded (automatic-ci pipeline).\nhttps://zuul.teim.app/t/main/buildset/ad2c5aab9660470986e06b0b987b880e\n\n- teim-code-review https://zuul.teim.app/t/main/build/e5e3282809df417a86cd7fa8328abe18 : SUCCESS in 8m 32s\n\nWarning:\n  Comments left for invalid file pyproject.toml","accounts_in_message":[],"_revision_number":1},{"id":"327c0d2285bab5a67d92d1a7ace26be7ac3c4095","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-02-27 17:00:11.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/d9c38ce5e5cb489d9c8df0b4df44dd7a\n\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/96e7433402b54c33a9c400a601bdf802 : SUCCESS in 3m 39s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/efee397d40ca48b69fde7814ff6d5ce1 : SUCCESS in 7m 32s","accounts_in_message":[],"_revision_number":1},{"id":"21e454cc94447e1ef590d9695afe453e4a0c87bf","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"date":"2026-02-27 17:16:40.000000000","message":"Uploaded patch set 2.\n\nOutdated Votes:\n* Verified+1\n* Workflow-1\n","accounts_in_message":[],"_revision_number":2},{"id":"3a6080b957f5bdede3d3d20e97035f806ef382ea","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-27 17:16:46.000000000","message":"Patch Set 2:\n\nStarting automatic-ci jobs.","accounts_in_message":[],"_revision_number":2},{"id":"5c27d59b2d8709a09e6c31e751cae7fd11881424","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-02-27 17:22:44.000000000","message":"Patch Set 2: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/2ff7bf0552104fc9b9fc6e10bafff525\n\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/112533bbb91e425192ae5f1993c4f02c : SUCCESS in 2m 38s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/4baa96a2a73840e4a8a18696e9d7754c : SUCCESS in 5m 07s","accounts_in_message":[],"_revision_number":2},{"id":"dc4b351d2214efdfa016fbb880a9f1e64748b97b","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-27 17:28:52.000000000","message":"Patch Set 2:\n\n(12 comments)\n\nBuild succeeded (automatic-ci pipeline).\nhttps://zuul.teim.app/t/main/buildset/8d3ea780a37b4606bdaea5a379e6da33\n\n- teim-code-review https://zuul.teim.app/t/main/build/bd64115ebf284612b8d2e052304b595e : SUCCESS in 11m 57s","accounts_in_message":[],"_revision_number":2},{"id":"03e14c38729453d11ceee35cb6323007fd2a7e60","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 3: New patch set was added with same tree, parent tree, and commit message as Patch Set 2.\n\nOutdated Votes:\n* Verified+1\n","accounts_in_message":[],"_revision_number":3},{"id":"63c0b1ed273d3dbe5cd69cee98ff6eb24cb8c190","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:22:46.000000000","message":"Patch Set 3:\n\nStarting automatic-ci jobs.","accounts_in_message":[],"_revision_number":3},{"id":"4f626f9452643cb02fb48f7c6b0ebce07d26e111","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-02-28 12:31:01.000000000","message":"Patch Set 3: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/2fd84f9623e446c9a8f0a65b644ba1ef\n\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/e05c5c4a82b0494f9d043953a982a1dc : SUCCESS in 2m 11s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/7341f528be3c40e495786fff24fcc887 : SUCCESS in 6m 44s","accounts_in_message":[],"_revision_number":3},{"id":"52712b7abd03ce640e6affa6387c4f4049fe1075","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:35:23.000000000","message":"Patch Set 3:\n\n(5 comments)\n\nBuild succeeded (automatic-ci pipeline).\nhttps://zuul.teim.app/t/main/buildset/ad7f8078287a4925a9eab2196326124e\n\n- teim-code-review https://zuul.teim.app/t/main/build/e4981f476ad546638593e63419c0bea4 : SUCCESS in 12m 23s","accounts_in_message":[],"_revision_number":3},{"id":"8d94acb01b2e1f66cce92f5efc6a7a6dc7807a2e","author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"date":"2026-02-28 20:23:10.000000000","message":"Patch Set 3:\n\n(1 comment)","accounts_in_message":[],"_revision_number":3},{"id":"239f29da315f099c9cbdaaf74eb631303e2f248d","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"date":"2026-03-30 15:53:53.000000000","message":"Uploaded patch set 4.\n\nOutdated Votes:\n* Verified+1\n","accounts_in_message":[],"_revision_number":4},{"id":"3c824717456a101ca267bdadbaaa01355e624e32","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:54:47.000000000","message":"Patch Set 4:\n\nStarting automatic-ci jobs.","accounts_in_message":[],"_revision_number":4},{"id":"c4968b30083f5cb3812c6438cb3c41ce175e4935","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-30 16:10:54.000000000","message":"Patch Set 4: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/aa476f26005b40819ccc5b689b07ab12\n\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/a202db1af1ae4667bd718474d4d7ba29 : SUCCESS in 4m 02s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/e63381eb56a14bf0847e965c492b356b : SUCCESS in 8m 17s","accounts_in_message":[],"_revision_number":4},{"id":"54eaccff8636155cff07824c0d994b28cf0a1e34","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:49:05.000000000","message":"Patch Set 4:\n\n(11 comments)\n\nBuild succeeded (automatic-ci pipeline).\nhttps://zuul.teim.app/t/main/buildset/c2492cc24ad24b83b8806170756731b0\n\n- teim-code-review https://zuul.teim.app/t/main/build/b8686b8c4b3e4fc2a06f3bb8a6563394 : SUCCESS in 12m 16s","accounts_in_message":[],"_revision_number":4},{"id":"d18b79f3004ed260bed265f8af6972190269d040","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 5.\n\nOutdated Votes:\n* Verified+1\n","accounts_in_message":[],"_revision_number":5},{"id":"1f2efc78b2ecaca79e85ecd845e1b6056e8ecf11","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:54:36.000000000","message":"Patch Set 5:\n\nStarting automatic-ci jobs.","accounts_in_message":[],"_revision_number":5},{"id":"7e3a7c86604404292b5c83a1db7218ee62bb53a7","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-04-04 01:05:46.000000000","message":"Patch Set 5: 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/8accadf281da4e92af3505107bc7051f\n\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/b0fbfce0f9a54159a0bbfbc78d0e2aad : FAILURE in 2m 42s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/c4c1e240b81b49f3a1ced147498a4b35 : SUCCESS in 7m 40s","accounts_in_message":[],"_revision_number":5},{"id":"d2d77ddfeb8276d79bb9efdd2a4cdbae5a807415","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:50:25.000000000","message":"Patch Set 5:\n\n(8 comments)\n\nBuild succeeded (automatic-ci pipeline).\nhttps://zuul.teim.app/t/main/buildset/c51792e4ce2249708063aaefba32f221\n\n- teim-code-review https://zuul.teim.app/t/main/build/4af93a8e1729412dba3b1d942d6298f7 : SUCCESS in 11m 28s","accounts_in_message":[],"_revision_number":5},{"id":"cc9681b069963c3111903569525895cec592273e","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 6: Patch Set 5 was rebased.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":6},{"id":"820ba380586b2047ee8bac394440b41724aa5cbb","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-04-30 20:58:52.000000000","message":"Patch Set 6: 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/98cc20142ed541d7bf256b75e42daa02\n\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/0b0b1c08ce31448e8d9f628b9e481161 : FAILURE in 5m 19s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/8b5e4b32691545e4b6c3368e3ecddc3a : SUCCESS in 8m 01s","accounts_in_message":[],"_revision_number":6}],"current_revision_number":6,"current_revision":"8505e50433b43b754c5124c99f85170bd839a964","revisions":{"718ae63fb876e81b1bd0edc64120515f700d0d14":{"kind":"REWORK","_number":1,"created":"2026-02-27 16:46:40.000000000","uploader":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"ref":"refs/changes/39/978239/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher-dashboard","ref":"refs/changes/39/978239/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/1"}}},"commit":{"parents":[{"commit":"3e1db2ba6d3ffd8b79fe0a4bc8f2650ff2f68cf9","subject":"Migrate setup configuration to pyproject.toml","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/3e1db2ba6d3ffd8b79fe0a4bc8f2650ff2f68cf9"}]}],"author":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-27 16:28:44.000000000","tz":0},"committer":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-27 16:46:31.000000000","tz":0},"subject":"Document UI-layer contribution patterns","message":"Document UI-layer contribution patterns\n\nNew contributors to this Horizon plugin lack authoritative\nguidance on the correct patterns for forms, table actions,\nlogging, and API microversion support.  Without it, review\ncycles are slow and the same architectural mistakes — direct\nAPI calls inside forms or table actions, incorrect logging\nlevels, opaque symbol imports — are repeated patch after patch.\n\nEstablish a contributor reference covering the service-layer\nboundary, form and validation lifecycle, table and action\npatterns, code conventions (imports, logging, reflection,\ntesting), and a step-by-step microversion implementation\nrecipe.  Extend HACKING.rst with WD008 (logging) and WD009\n(module imports) rules and cross-references to all new docs.\n\nGenerated-By: claude-code sonnet 4.6\nChange-Id: I3ff52ee5e76cb4fbf9a1889b9d60446967f6fda9\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/718ae63fb876e81b1bd0edc64120515f700d0d14"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/718ae63fb876e81b1bd0edc64120515f700d0d14"}]},"branch":"refs/heads/master"},"66152a6e2da3e6af287d1f76a0895ec3cbec1be8":{"kind":"REWORK","_number":2,"created":"2026-02-27 17:16:40.000000000","uploader":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"ref":"refs/changes/39/978239/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher-dashboard","ref":"refs/changes/39/978239/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/2"}}},"commit":{"parents":[{"commit":"3e1db2ba6d3ffd8b79fe0a4bc8f2650ff2f68cf9","subject":"Migrate setup configuration to pyproject.toml","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/3e1db2ba6d3ffd8b79fe0a4bc8f2650ff2f68cf9"}]}],"author":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-27 16:28:44.000000000","tz":0},"committer":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-27 17:16:26.000000000","tz":0},"subject":"Document UI-layer contribution patterns","message":"Document UI-layer contribution patterns\n\nNew contributors to this Horizon plugin lack authoritative\nguidance on the correct patterns for forms, table actions,\nlogging, and API microversion support.  Without it, review\ncycles are slow and the same architectural mistakes — direct\nAPI calls inside forms or table actions, incorrect logging\nlevels, opaque symbol imports — are repeated patch after patch.\n\nEstablish a contributor reference covering the service-layer\nboundary, form and validation lifecycle, table and action\npatterns, code conventions (imports, logging, reflection,\ntesting), and a step-by-step microversion implementation\nrecipe.  Extend HACKING.rst with WD008 (logging) and WD009\n(module imports) rules and cross-references to all new docs.\n\nGenerated-By: claude-code sonnet 4.6\nChange-Id: I3ff52ee5e76cb4fbf9a1889b9d60446967f6fda9\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/66152a6e2da3e6af287d1f76a0895ec3cbec1be8"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/66152a6e2da3e6af287d1f76a0895ec3cbec1be8"}]},"branch":"refs/heads/master"},"7bbce7c4446dcd4df6aa57ded4763a44d808d1a2":{"kind":"NO_CHANGE","_number":3,"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/39/978239/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher-dashboard","ref":"refs/changes/39/978239/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/3"}}},"commit":{"parents":[{"commit":"3e1db2ba6d3ffd8b79fe0a4bc8f2650ff2f68cf9","subject":"Migrate setup configuration to pyproject.toml","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/3e1db2ba6d3ffd8b79fe0a4bc8f2650ff2f68cf9"}]}],"author":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-27 16:28:44.000000000","tz":0},"committer":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-28 12:09:01.000000000","tz":0},"subject":"Document UI-layer contribution patterns","message":"Document UI-layer contribution patterns\n\nNew contributors to this Horizon plugin lack authoritative\nguidance on the correct patterns for forms, table actions,\nlogging, and API microversion support.  Without it, review\ncycles are slow and the same architectural mistakes — direct\nAPI calls inside forms or table actions, incorrect logging\nlevels, opaque symbol imports — are repeated patch after patch.\n\nEstablish a contributor reference covering the service-layer\nboundary, form and validation lifecycle, table and action\npatterns, code conventions (imports, logging, reflection,\ntesting), and a step-by-step microversion implementation\nrecipe.  Extend HACKING.rst with WD008 (logging) and WD009\n(module imports) rules and cross-references to all new docs.\n\nGenerated-By: claude-code sonnet 4.6\nChange-Id: I3ff52ee5e76cb4fbf9a1889b9d60446967f6fda9\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/7bbce7c4446dcd4df6aa57ded4763a44d808d1a2"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/7bbce7c4446dcd4df6aa57ded4763a44d808d1a2"}]},"branch":"refs/heads/master"},"cc03108ea909a5de17382d1a74af9f0bd8ab3125":{"kind":"REWORK","_number":4,"created":"2026-03-30 15:53:53.000000000","uploader":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"ref":"refs/changes/39/978239/4","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher-dashboard","ref":"refs/changes/39/978239/4","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/4"}}},"commit":{"parents":[{"commit":"47d54294dcdc6ca1d82fab7b75aaed12e35bae98","subject":"migrate content modules to use service layer","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/47d54294dcdc6ca1d82fab7b75aaed12e35bae98"}]}],"author":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-27 16:28:44.000000000","tz":0},"committer":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-03-30 15:24:13.000000000","tz":60},"subject":"Document UI-layer contribution patterns","message":"Document UI-layer contribution patterns\n\nNew contributors to this Horizon plugin lack authoritative\nguidance on the correct patterns for forms, table actions,\nlogging, and API microversion support.  Without it, review\ncycles are slow and the same architectural mistakes — direct\nAPI calls inside forms or table actions, incorrect logging\nlevels, opaque symbol imports — are repeated patch after patch.\n\nEstablish a contributor reference covering the service-layer\nboundary, form and validation lifecycle, table and action\npatterns, code conventions (imports, logging, reflection,\ntesting), and a step-by-step microversion implementation\nrecipe.  Extend HACKING.rst with WD008 (logging) and WD009\n(module imports) rules and cross-references to all new docs.\n\nGenerated-By: claude-code sonnet 4.6\nChange-Id: I3ff52ee5e76cb4fbf9a1889b9d60446967f6fda9\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/cc03108ea909a5de17382d1a74af9f0bd8ab3125"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/cc03108ea909a5de17382d1a74af9f0bd8ab3125"}]},"branch":"refs/heads/master"},"7e53878165446f1f6cddec313f73b84ba0308457":{"kind":"REWORK","_number":5,"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/39/978239/5","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher-dashboard","ref":"refs/changes/39/978239/5","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/5 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/5 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/5 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/5"}}},"commit":{"parents":[{"commit":"9cf04420628cc3fcc68cfd545f3a773cff7c5fd3","subject":"refactor: migrate content modules to use service layer","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/9cf04420628cc3fcc68cfd545f3a773cff7c5fd3"}]}],"author":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-27 16:28:44.000000000","tz":0},"committer":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-04-04 00:49:03.000000000","tz":60},"subject":"docs: document UI-layer contribution patterns","message":"docs: document UI-layer contribution patterns\n\nNew contributors to this Horizon plugin lack authoritative\nguidance on the correct patterns for forms, table actions,\nlogging, and API microversion support.  Without it, review\ncycles are slow and the same architectural mistakes — direct\nAPI calls inside forms or table actions, incorrect logging\nlevels, opaque symbol imports — are repeated patch after patch.\n\nEstablish a contributor reference covering the service-layer\nboundary, form and validation lifecycle, table and action\npatterns, code conventions (imports, logging, reflection,\ntesting), and a step-by-step microversion implementation\nrecipe.  Extend HACKING.rst with WD008 (logging) and WD009\n(module imports) rules and cross-references to all new docs.\n\nGenerated-By: claude-code sonnet 4.6\nChange-Id: I3ff52ee5e76cb4fbf9a1889b9d60446967f6fda9\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/7e53878165446f1f6cddec313f73b84ba0308457"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/7e53878165446f1f6cddec313f73b84ba0308457"}]},"branch":"refs/heads/master"},"8505e50433b43b754c5124c99f85170bd839a964":{"kind":"TRIVIAL_REBASE","_number":6,"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/39/978239/6","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher-dashboard","ref":"refs/changes/39/978239/6","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/6 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/6 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/6 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher-dashboard refs/changes/39/978239/6"}}},"commit":{"parents":[{"commit":"45431bbedf505b651ae9586ece9cfbc693695617","subject":"refactor: migrate content modules to use service layer","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/45431bbedf505b651ae9586ece9cfbc693695617"}]}],"author":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-02-27 16:28:44.000000000","tz":0},"committer":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-04-30 20:34:37.000000000","tz":60},"subject":"docs: document UI-layer contribution patterns","message":"docs: document UI-layer contribution patterns\n\nNew contributors to this Horizon plugin lack authoritative\nguidance on the correct patterns for forms, table actions,\nlogging, and API microversion support.  Without it, review\ncycles are slow and the same architectural mistakes — direct\nAPI calls inside forms or table actions, incorrect logging\nlevels, opaque symbol imports — are repeated patch after patch.\n\nEstablish a contributor reference covering the service-layer\nboundary, form and validation lifecycle, table and action\npatterns, code conventions (imports, logging, reflection,\ntesting), and a step-by-step microversion implementation\nrecipe.  Extend HACKING.rst with WD008 (logging) and WD009\n(module imports) rules and cross-references to all new docs.\n\nGenerated-By: claude-code sonnet 4.6\nChange-Id: I3ff52ee5e76cb4fbf9a1889b9d60446967f6fda9\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/8505e50433b43b754c5124c99f85170bd839a964"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher-dashboard/commit/8505e50433b43b754c5124c99f85170bd839a964"}]},"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":""}}}]}
