)]}'
{"id":"openstack%2Frally~996707","triplet_id":"openstack%2Frally~master~I99341a53d8f79c2afa382f977bbddd9202eb6d09","project":"openstack/rally","branch":"master","topic":"typer-next","attention_set":{},"removed_from_attention_set":{"9545":{"account":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"last_update":"2026-07-10 17:05:22.000000000","reason":"\u003cGERRIT_ACCOUNT_9545\u003e replied on the change","reason_account":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"}}},"hashtags":[],"change_id":"I99341a53d8f79c2afa382f977bbddd9202eb6d09","subject":"Port the CLI from the argparse/oslo wrapper to typer","status":"MERGED","created":"2026-07-09 19:03:23.000000000","updated":"2026-07-10 17:23:11.000000000","submitted":"2026-07-10 17:23:11.000000000","submitter":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"total_comment_count":1,"unresolved_comment_count":0,"has_review_started":true,"submission_id":"996707-typer-next","meta_rev_id":"2f31a259094e0213a1d03b6db6610e8808bd1ef3","_number":996707,"virtual_id_number":996707,"owner":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"actions":{},"labels":{"Verified":{"approved":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"value":0,"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},{"tag":"autogenerated:zuul:gate","value":2,"date":"2026-07-10 17:23:11.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":"","default_value":0,"optional":true},"Code-Review":{"approved":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"all":[{"value":2,"date":"2026-07-10 17:05:22.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},{"value":0,"_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":{"approved":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"all":[{"value":1,"date":"2026-07-10 17:05:22.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},{"value":0,"_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}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-07-09 19:49:47.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":"700c17ea5be1ef7ba7afe394becb917cf2d9ee8e","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"date":"2026-07-09 19:03:23.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"a5f84c00aecd4f134bb196cf403ebba84796f052","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"date":"2026-07-09 19:11:45.000000000","message":"Uploaded patch set 2: Patch Set 1 was rebased.","accounts_in_message":[],"_revision_number":2},{"id":"18edf362426b934fc23ef9c9064c20db2c9e4442","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-09 19:49:47.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/6089bb91db0a4d95a80e5a1c3fb9b6c3\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/1cff7497905e491ea42436617f2295ad : SUCCESS in 1m 46s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/bb0a4fa72fbf41c8ae26a456cebd3ebb : FAILURE in 4m 39s\n- rally-tox-cover https://zuul.opendev.org/t/openstack/build/d3b2e15bc96a4acbb935c2597a3ebe04 : FAILURE in 5m 15s\n- rally-tox-docs https://zuul.opendev.org/t/openstack/build/d5d885901ed64a4090d727bf97c68564 : FAILURE in 3m 52s\n- rally-tox-mypy https://zuul.opendev.org/t/openstack/build/e3c4f08ac0aa4c4aada0f957cf809d45 : SUCCESS in 3m 23s\n- rally-tox-pep8 https://zuul.opendev.org/t/openstack/build/6d43828375394a24b81e4349035765c5 : FAILURE in 3m 15s\n- rally-tox-py310 https://zuul.opendev.org/t/openstack/build/9b166340cde542bd954220605bc21210 : FAILURE in 2m 23s\n- rally-tox-py311 https://zuul.opendev.org/t/openstack/build/d090d38997df4c5da6cd0f1b9316761f : SUCCESS in 3m 03s\n- rally-tox-py312 https://zuul.opendev.org/t/openstack/build/a59fdc247648465b94720baaf12ded2d : SUCCESS in 2m 43s\n- rally-tox-py313 https://zuul.opendev.org/t/openstack/build/4f7226fb6a184853bcd9b30040b476f1 : SUCCESS in 3m 21s\n- rally-tox-samples https://zuul.opendev.org/t/openstack/build/f156adc3ba70445484863f29ce37e5ff : SUCCESS in 2m 15s\n- rally-tox-functional https://zuul.opendev.org/t/openstack/build/375f7cec24264012b2ffe755593885cd : SUCCESS in 6m 21s\n- rally-tox-self https://zuul.opendev.org/t/openstack/build/4ef49573ad5246cea11da63dc59d0383 : SUCCESS in 7m 39s\n- rally-install-ubuntu-jammy https://zuul.opendev.org/t/openstack/build/70a11118b6a04d23890f33c155560664 : FAILURE in 1m 57s\n- rally-install-ubuntu-noble https://zuul.opendev.org/t/openstack/build/0b5e9bfdd6384b809f805d17397d4898 : SUCCESS in 5m 08s\n- rally-docker-build https://zuul.opendev.org/t/openstack/build/8de8bbf048014d9b9e3da4d5de6821f0 : SUCCESS in 8m 31s\n- rally-task-simple-job https://zuul.opendev.org/t/openstack/build/270dfb69a8414a41b875d707d63cd445 : FAILURE in 28m 16s\n- rally-verify-tempest https://zuul.opendev.org/t/openstack/build/ab05a35c50c54b9eac5786c1ded4e060 : POST_FAILURE in 25m 49s","accounts_in_message":[],"_revision_number":2},{"id":"75c907c8c5b5cbb3bba9c0e083e62b61c7140819","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"date":"2026-07-09 19:56:47.000000000","message":"Uploaded patch set 3.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":3},{"id":"01ead063b73b0bcf38c1692fcc673197da96e67f","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-09 20:24:05.000000000","message":"Patch Set 3: Verified-1\n\nThis change depends on a change that failed to merge.\n\nChange https://review.opendev.org/c/openstack/rally/+/996706 is needed.","accounts_in_message":[],"_revision_number":3},{"id":"1427e85285af0a9045a3690c799d2530e3f84667","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"date":"2026-07-10 15:42:13.000000000","message":"Uploaded patch set 4.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":4},{"id":"7c705268de3bd0ce267353ce79c41a59f8113a4f","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-10 16:01:53.000000000","message":"Patch Set 4: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/6ae9c3c676db4f38b4c215dd720b5b9d\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/3666120a3c5a4d37a99666a8662f74c3 : SUCCESS in 1m 48s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/78bbea189f814d8ba82c934600a394d2 : SUCCESS in 5m 28s\n- rally-tox-cover https://zuul.opendev.org/t/openstack/build/9cd871fed4d04616a7f5bc6db428c3a2 : SUCCESS in 5m 25s\n- rally-tox-docs https://zuul.opendev.org/t/openstack/build/b7fb701bcbc44d4e817ea6394d830e16 : SUCCESS in 3m 50s\n- rally-tox-mypy https://zuul.opendev.org/t/openstack/build/59023244ee0a4fa99d94b84eeae03ab8 : SUCCESS in 3m 22s\n- rally-tox-pep8 https://zuul.opendev.org/t/openstack/build/35ec2cf068694f74a864e8d23776fe17 : SUCCESS in 2m 49s\n- rally-tox-py310 https://zuul.opendev.org/t/openstack/build/3bd645cd853343cbafbf7a710fcf7797 : SUCCESS in 3m 28s\n- rally-tox-py311 https://zuul.opendev.org/t/openstack/build/6de39d51fe244150a6a4ff3d5c1bbbfe : SUCCESS in 3m 10s\n- rally-tox-py312 https://zuul.opendev.org/t/openstack/build/9c1fade0cf88462c9ebfc84ec7e96369 : SUCCESS in 3m 05s\n- rally-tox-py313 https://zuul.opendev.org/t/openstack/build/4f26001d309f42dd9ed3e4e05908dc1e : SUCCESS in 4m 28s\n- rally-tox-samples https://zuul.opendev.org/t/openstack/build/b7fa63e7047d4c7bbb6bc3f804133919 : SUCCESS in 2m 04s\n- rally-tox-functional https://zuul.opendev.org/t/openstack/build/5ad3716059c1404ebaf3be40c11e02aa : SUCCESS in 4m 55s\n- rally-tox-self https://zuul.opendev.org/t/openstack/build/d925606191634a3dbd8155f6b058a6fb : SUCCESS in 6m 29s\n- rally-install-ubuntu-jammy https://zuul.opendev.org/t/openstack/build/3b15869fa39249fb9aa463236a318846 : SUCCESS in 6m 32s\n- rally-install-ubuntu-noble https://zuul.opendev.org/t/openstack/build/287b3aa176344f4a9f21dbd56b613d98 : SUCCESS in 6m 19s\n- rally-docker-build https://zuul.opendev.org/t/openstack/build/5be3c3dbfa3147278112c7c6f5a0b13a : SUCCESS in 6m 33s\n- rally-task-simple-job https://zuul.opendev.org/t/openstack/build/516377883b1c4521ad4484f8b158c14b : SUCCESS in 13m 17s\n- rally-verify-tempest https://zuul.opendev.org/t/openstack/build/8c3620a4f23d4e9d9cd984bfda72120d : SUCCESS in 17m 08s","accounts_in_message":[],"_revision_number":4},{"id":"f3962a464b205795565f88b9ab02eb2ec5e5c24a","author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"date":"2026-07-10 17:05:22.000000000","message":"Patch Set 4: Code-Review+2 Workflow+1\n\n(1 comment)","accounts_in_message":[],"_revision_number":4},{"id":"cfe15a2cfc1bf05af9bdd7ea20f9ab6004b10021","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-10 17:05:48.000000000","message":"Patch Set 4: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":4},{"id":"a1d6bfbfa1987b8d34a118105e920485043851c3","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-10 17:23:11.000000000","message":"Patch Set 4: Verified+2\n\nBuild succeeded (gate pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/33693e917d2b4410bf6536d8faa03fc6\n\n- test-release-openstack https://zuul.opendev.org/t/openstack/build/ebe5ca8aeee0487c918d0a86c6a71ac9 : SUCCESS in 2m 57s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/3fdc936465604343987bbda42fbb498e : SUCCESS in 5m 31s\n- rally-tox-cover https://zuul.opendev.org/t/openstack/build/d5b82764fcf4404c94046f1f15ee833e : SUCCESS in 2m 49s\n- rally-tox-docs https://zuul.opendev.org/t/openstack/build/d7d579c4383846c4b3e17b371e2f28ea : SUCCESS in 3m 42s\n- rally-tox-mypy https://zuul.opendev.org/t/openstack/build/af2b74850dc742a68a99f156a4c2a53b : SUCCESS in 3m 12s\n- rally-tox-pep8 https://zuul.opendev.org/t/openstack/build/596d254b7a134bd4b47a200d9e39c181 : SUCCESS in 4m 08s\n- rally-tox-py310 https://zuul.opendev.org/t/openstack/build/746ded25173b4edab2c7472de7cf5c3f : SUCCESS in 2m 14s\n- rally-tox-py311 https://zuul.opendev.org/t/openstack/build/1a675ac9d87447a1a479449694ed349b : SUCCESS in 3m 34s\n- rally-tox-py312 https://zuul.opendev.org/t/openstack/build/b91a2752abc84137baa0bb87760f3b6a : SUCCESS in 2m 02s\n- rally-tox-py313 https://zuul.opendev.org/t/openstack/build/9e88a74b19cf4ec3ac75512ce170a005 : SUCCESS in 3m 27s\n- rally-tox-samples https://zuul.opendev.org/t/openstack/build/5bfcc55a8e0c4d2387f8a464abe0e64c : SUCCESS in 2m 47s\n- rally-tox-functional https://zuul.opendev.org/t/openstack/build/720063cbc2294763b9a85f62bf81dbc7 : SUCCESS in 4m 52s\n- rally-tox-self https://zuul.opendev.org/t/openstack/build/ab1bb9a0bfcd4942b1759caf74d8230d : SUCCESS in 6m 06s\n- rally-install-ubuntu-jammy https://zuul.opendev.org/t/openstack/build/df29738045464c2d8c47a3e6bde8ddbd : SUCCESS in 4m 53s\n- rally-install-ubuntu-noble https://zuul.opendev.org/t/openstack/build/3e5656e7047a4244b263aeb665240ee4 : SUCCESS in 6m 11s\n- rally-docker-build https://zuul.opendev.org/t/openstack/build/3c064eda01604f629efd6d0a7878e98e : SUCCESS in 6m 22s\n- rally-task-simple-job https://zuul.opendev.org/t/openstack/build/d87d7f8710b64eab9752574d6957d9d6 : SUCCESS in 14m 26s\n- rally-verify-tempest https://zuul.opendev.org/t/openstack/build/dd5de42a5b0f43849fb7fbc31e822adc : SUCCESS in 16m 44s","accounts_in_message":[],"_revision_number":4},{"id":"2f31a259094e0213a1d03b6db6610e8808bd1ef3","tag":"autogenerated:gerrit:merged","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-10 17:23:11.000000000","message":"Change has been successfully merged","accounts_in_message":[],"_revision_number":4}],"current_revision_number":4,"current_revision":"62546ec666d1d3513275fae2b1a4baa5f5aa2628","revisions":{"9a1f600a1b801c2d276b5f77f249d5b3b499db59":{"kind":"REWORK","_number":1,"created":"2026-07-09 19:03:23.000000000","uploader":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"ref":"refs/changes/07/996707/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/rally","ref":"refs/changes/07/996707/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/rally refs/changes/07/996707/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/rally refs/changes/07/996707/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/rally refs/changes/07/996707/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/rally refs/changes/07/996707/1"}}},"commit":{"parents":[{"commit":"47c675fba9ad1aa89df09d067dec303955a54c10","subject":"Add couple rally-openstack jobs to check compatibility","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/rally/commit/47c675fba9ad1aa89df09d067dec303955a54c10"}]}],"author":{"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","date":"2026-07-09 18:58:58.000000000","tz":120},"committer":{"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","date":"2026-07-09 19:03:17.000000000","tz":120},"subject":"Port the CLI from the argparse/oslo wrapper to typer","message":"Port the CLI from the argparse/oslo wrapper to typer\n\nReplace the custom oslo.config/argparse CLI wrapper with a typer\napplication. typer (over its vendored click) now owns the whole CLI surface\n(help, validation, strict rejection of unknown arguments); oslo.config and\noslo.log are used only as libraries for config-file loading and logging\nsetup.\n\n- Global options are generated at runtime from the live oslo Opt objects\n  and appended to the root callback signature, then translated back into an\n  argv slice for rally.api.API, so they stay in sync with oslo.log.\n- The six command groups become plain module-level functions on per-group\n  sub-apps; the API instance is injected through a ContextVar instead of a\n  parameter, keeping it out of the generated help and completion.\n- Each command\u0027s primary identifier is an ArgumentOrKeyword: it is accepted\n  both positionally (rally task status \u003cuuid\u003e) and via its historical flag\n  (--uuid), which is registered on the parser and hidden from help.\n- task start/validate accept \"-\" to read the input task from stdin.\n- The bash completion script is generated from the command tree\n  (rally/cli/bashcomplete.py) and guarded by tests/unit/test_resources.\n- The cli_reference sphinx extension and the CHANGELOG are updated to match.\n\nBackward-incompatible: documented usage is preserved, but help and error\nmessages are now rendered by typer/click (different wording and layout), and\nbash completion no longer suggests the primary-id flags (--uuid, --id,\n--env, --deployment, --task) -- they still work, and the identifiers can now\nalso be passed positionally.\n\nChange-Id: I99341a53d8f79c2afa382f977bbddd9202eb6d09\nSigned-off-by: Andriy Kurilin \u003candr.kurilin@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/rally/commit/9a1f600a1b801c2d276b5f77f249d5b3b499db59"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/rally/commit/9a1f600a1b801c2d276b5f77f249d5b3b499db59"}]},"branch":"refs/heads/master"},"08ca5890332cb8747fc211d4b3af899d1435a78d":{"kind":"TRIVIAL_REBASE","_number":2,"created":"2026-07-09 19:11:45.000000000","uploader":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"ref":"refs/changes/07/996707/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/rally","ref":"refs/changes/07/996707/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/rally refs/changes/07/996707/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/rally refs/changes/07/996707/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/rally refs/changes/07/996707/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/rally refs/changes/07/996707/2"}}},"commit":{"parents":[{"commit":"1b88eac36e5dcdcaffdcc6d4e45913102f685352","subject":"Add couple rally-openstack jobs to check compatibility","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/rally/commit/1b88eac36e5dcdcaffdcc6d4e45913102f685352"}]}],"author":{"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","date":"2026-07-09 18:58:58.000000000","tz":120},"committer":{"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","date":"2026-07-09 19:11:35.000000000","tz":120},"subject":"Port the CLI from the argparse/oslo wrapper to typer","message":"Port the CLI from the argparse/oslo wrapper to typer\n\nReplace the custom oslo.config/argparse CLI wrapper with a typer\napplication. typer (over its vendored click) now owns the whole CLI surface\n(help, validation, strict rejection of unknown arguments); oslo.config and\noslo.log are used only as libraries for config-file loading and logging\nsetup.\n\n- Global options are generated at runtime from the live oslo Opt objects\n  and appended to the root callback signature, then translated back into an\n  argv slice for rally.api.API, so they stay in sync with oslo.log.\n- The six command groups become plain module-level functions on per-group\n  sub-apps; the API instance is injected through a ContextVar instead of a\n  parameter, keeping it out of the generated help and completion.\n- Each command\u0027s primary identifier is an ArgumentOrKeyword: it is accepted\n  both positionally (rally task status \u003cuuid\u003e) and via its historical flag\n  (--uuid), which is registered on the parser and hidden from help.\n- task start/validate accept \"-\" to read the input task from stdin.\n- The bash completion script is generated from the command tree\n  (rally/cli/bashcomplete.py) and guarded by tests/unit/test_resources.\n- The cli_reference sphinx extension and the CHANGELOG are updated to match.\n\nBackward-incompatible: documented usage is preserved, but help and error\nmessages are now rendered by typer/click (different wording and layout), and\nbash completion no longer suggests the primary-id flags (--uuid, --id,\n--env, --deployment, --task) -- they still work, and the identifiers can now\nalso be passed positionally.\n\nChange-Id: I99341a53d8f79c2afa382f977bbddd9202eb6d09\nSigned-off-by: Andriy Kurilin \u003candr.kurilin@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/rally/commit/08ca5890332cb8747fc211d4b3af899d1435a78d"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/rally/commit/08ca5890332cb8747fc211d4b3af899d1435a78d"}]},"branch":"refs/heads/master"},"28caa13eeb89152f738310b468a92b5c7d32bd52":{"kind":"REWORK","_number":3,"created":"2026-07-09 19:56:47.000000000","uploader":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"ref":"refs/changes/07/996707/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/rally","ref":"refs/changes/07/996707/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/rally refs/changes/07/996707/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/rally refs/changes/07/996707/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/rally refs/changes/07/996707/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/rally refs/changes/07/996707/3"}}},"commit":{"parents":[{"commit":"138c3446d1b15e9fec62ee30a3f26eaf17b3ed6f","subject":"Update upper-constraints file","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/rally/commit/138c3446d1b15e9fec62ee30a3f26eaf17b3ed6f"}]}],"author":{"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","date":"2026-07-09 18:58:58.000000000","tz":120},"committer":{"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","date":"2026-07-09 19:56:37.000000000","tz":120},"subject":"Port the CLI from the argparse/oslo wrapper to typer","message":"Port the CLI from the argparse/oslo wrapper to typer\n\nReplace the custom oslo.config/argparse CLI wrapper with a typer\napplication. typer (over its vendored click) now owns the whole CLI surface\n(help, validation, strict rejection of unknown arguments); oslo.config and\noslo.log are used only as libraries for config-file loading and logging\nsetup.\n\n- Global options are generated at runtime from the live oslo Opt objects\n  and appended to the root callback signature, then translated back into an\n  argv slice for rally.api.API, so they stay in sync with oslo.log.\n- The six command groups become plain module-level functions on per-group\n  sub-apps; the API instance is injected through a ContextVar instead of a\n  parameter, keeping it out of the generated help and completion.\n- Each command\u0027s primary identifier is an ArgumentOrKeyword: it is accepted\n  both positionally (rally task status \u003cuuid\u003e) and via its historical flag\n  (--uuid), which is registered on the parser and hidden from help.\n- task start/validate accept \"-\" to read the input task from stdin.\n- The bash completion script is generated from the command tree\n  (rally/cli/bashcomplete.py) and guarded by tests/unit/test_resources.\n- The cli_reference sphinx extension and the CHANGELOG are updated to match.\n\nBackward-incompatible: documented usage is preserved, but help and error\nmessages are now rendered by typer/click (different wording and layout), and\nbash completion no longer suggests the primary-id flags (--uuid, --id,\n--env, --deployment, --task) -- they still work, and the identifiers can now\nalso be passed positionally.\n\nDepends-On: I76ead5b94ac2f5f0e3593613b75114567cb254ac\nChange-Id: I99341a53d8f79c2afa382f977bbddd9202eb6d09\nSigned-off-by: Andriy Kurilin \u003candr.kurilin@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/rally/commit/28caa13eeb89152f738310b468a92b5c7d32bd52"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/rally/commit/28caa13eeb89152f738310b468a92b5c7d32bd52"}]},"branch":"refs/heads/master"},"62546ec666d1d3513275fae2b1a4baa5f5aa2628":{"kind":"REWORK","_number":4,"created":"2026-07-10 15:42:13.000000000","uploader":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"ref":"refs/changes/07/996707/4","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/rally","ref":"refs/changes/07/996707/4","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/rally refs/changes/07/996707/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/rally refs/changes/07/996707/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/rally refs/changes/07/996707/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/rally refs/changes/07/996707/4"}}},"commit":{"parents":[{"commit":"4a07817be821cdacf74e3de0561cfcc5c6352bfd","subject":"Add couple rally-openstack jobs to check compatibility","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/rally/commit/4a07817be821cdacf74e3de0561cfcc5c6352bfd"}]}],"author":{"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","date":"2026-07-09 18:58:58.000000000","tz":120},"committer":{"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","date":"2026-07-10 15:42:00.000000000","tz":120},"subject":"Port the CLI from the argparse/oslo wrapper to typer","message":"Port the CLI from the argparse/oslo wrapper to typer\n\nReplace the custom oslo.config/argparse CLI wrapper with a typer\napplication. typer (over its vendored click) now owns the whole CLI surface\n(help, validation, strict rejection of unknown arguments); oslo.config and\noslo.log are used only as libraries for config-file loading and logging\nsetup.\n\n- Global options are generated at runtime from the live oslo Opt objects\n  and appended to the root callback signature, then translated back into an\n  argv slice for rally.api.API, so they stay in sync with oslo.log.\n- The six command groups become plain module-level functions on per-group\n  sub-apps; the API instance is injected through a ContextVar instead of a\n  parameter, keeping it out of the generated help and completion.\n- Each command\u0027s primary identifier is an ArgumentOrKeyword: it is accepted\n  both positionally (rally task status \u003cuuid\u003e) and via its historical flag\n  (--uuid), which is registered on the parser and hidden from help.\n- task start/validate accept \"-\" to read the input task from stdin.\n- The bash completion script is generated from the command tree\n  (rally/cli/bashcomplete.py) and guarded by tests/unit/test_resources.\n- The cli_reference sphinx extension and the CHANGELOG are updated to match.\n\nBackward-incompatible: documented usage is preserved, but help and error\nmessages are now rendered by typer/click (different wording and layout), and\nbash completion no longer suggests the primary-id flags (--uuid, --id,\n--env, --deployment, --task) -- they still work, and the identifiers can now\nalso be passed positionally.\n\nChange-Id: I99341a53d8f79c2afa382f977bbddd9202eb6d09\nSigned-off-by: Andriy Kurilin \u003candr.kurilin@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/rally/commit/62546ec666d1d3513275fae2b1a4baa5f5aa2628"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/rally/commit/62546ec666d1d3513275fae2b1a4baa5f5aa2628"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"CLOSED","labels":[{"label":"Verified","status":"MAY","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"MAY","applied_by":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"}},{"label":"Workflow","status":"MAY","applied_by":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"}}]}],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Verified\u003dMAX"],"failing_atoms":["label:Verified\u003dMIN"],"atom_explanations":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Code-Review\u003dMAX"],"failing_atoms":["label:Code-Review\u003dMIN"],"atom_explanations":{"label:Code-Review\u003dMAX":"","label:Code-Review\u003dMIN":""}}},{"name":"Workflow","description":"Approved for gate by core reviewer","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Workflow\u003dMAX AND -label:Workflow\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Workflow\u003dMAX"],"failing_atoms":["label:Workflow\u003dMIN"],"atom_explanations":{"label:Workflow\u003dMAX":"","label:Workflow\u003dMIN":""}}}]}
