Skip to content

fix: support recursive coverage and split postprocessing in pytest_main#1102

Draft
xangcastle wants to merge 1 commit into
1.xfrom
fix/recursive-coverage
Draft

fix: support recursive coverage and split postprocessing in pytest_main#1102
xangcastle wants to merge 1 commit into
1.xfrom
fix/recursive-coverage

fix: support recursive coverage and split postprocessing in pytest_main

04ac340
Select commit
Loading
Failed to load commit list.
Aspect Workflows / aspect / test (test-e2e-bazel-8) succeeded Jun 11, 2026 in 33m 26s

✅ test //... · Tests passed

✅ Succeeded · 📅 Thu Jun 11 12:41:20 UTC 2026 · ⏱ 33m 26s — 🔧 Setup 5.8s · 🧪 Test 33m 20s
👤 runner · 🖥 runnervmiav63 · 💎 aspect-cli v2026.22.44
📦 204 targets · ⚡ 79,110 of 163,874 actions executed (51% cached) · 🧪 61 of 61 tests executed (0% cached) · 🔧 bazel v8.7.0 test · 🎯 k8 · ⚙️ fastbuild
🐙 GitHub Actions

💬 Last update: test task complete

Details

🎯 Bazel targets (204)

✅ 61 Tests Passed
Label                                                                     | Target Type                           | Duration
--------------------------------------------------------------------------+---------------------------------------+---------
//cases/cross-repo-610:test                                               | _py_venv_test                         | 930ms   
//cases/firebase-admin-import:test                                        | py_test                               | 2.9s    
//cases/firebase-admin-import:test_exec                                   | _empty_test                           | 200ms   
//cases/freethreaded-805:test                                             | platform_transition_test              | 3.6s    
//cases/interpreter-features-836:test                                     | container_structure_test              | 16s     
//cases/interpreter-provisioning:test                                     | _py_venv_test                         | 509ms   
//cases/interpreter-version-541:test_3_10_classic                         | py_test                               | 353ms   
//cases/interpreter-version-541:test_3_10_venv                            | _py_venv_test                         | 123ms   
//cases/interpreter-version-541:test_3_11_classic                         | py_test                               | 609ms   
//cases/interpreter-version-541:test_3_11_venv                            | _py_venv_test                         | 483ms   
//cases/interpreter-version-541:test_3_9_classic                          | py_test                               | 1.1s    
//cases/interpreter-version-541:test_3_9_venv                             | _py_venv_test                         | 535ms   
//cases/pth-namespace-547:test                                            | _py_venv_test                         | 542ms   
//cases/pth-namespace-547:test_legacy                                     | py_test                               | 1s      
//cases/py-library-defaultinfo-891:default_info_no_transitive_srcs_test   | _default_info_no_transitive_srcs_test | 97ms    
//cases/pytest-main-867:test_collection_check                             | py_test                               | 3.7s    
//cases/pytest-main-867:test_direct_pytest_main                           | py_test                               | 2s      
//cases/pytest-main-867:test_example                                      | py_test                               | 2.3s    
//cases/pytest-main-867:test_multi_src                                    | py_test                               | 2.8s    
//cases/pytest-main-867:test_naming_regression                            | py_test                               | 2.3s    
//cases/pytest-mock-530:test_mock_py_test                                 | py_test                               | 3.3s    
//cases/pytest-mock-530:test_mock_py_venv_test                            | _py_venv_test                         | 1.6s    
//cases/pytest-subdir-imports:test_subdir_import                          | py_test                               | 1s      
//cases/pytest-xdist-integration:test_xdist                               | py_test                               | 3.6s    
//cases/repository-rule-deps-299:all_direct                               | py_test                               | 701ms   
//cases/repository-rule-deps-299:test                                     | py_test                               | 838ms   
//cases/root-dir-paths-538:test_root_dir                                  | sh_test                               | 92ms    
//cases/root-dir-paths-538:test_root_dir_venv                             | sh_test                               | 463ms   
//cases/unconstrained-dependencies:get_python_package_version_humble_test | py_test                               | 2.3s    
//cases/unconstrained-dependencies:get_python_package_version_main_test   | py_test                               | 2.2s    
//cases/uv-abi3-compat-853:test_import                                    | _py_venv_test                         | 349ms   
//cases/uv-conflict-817:test_a                                            | _py_venv_test                         | 757ms   
//cases/uv-conflict-817:test_b                                            | _py_venv_test                         | 414ms   
//cases/uv-conflict-gte:test_a                                            | _py_venv_test                         | 282ms   
//cases/uv-conflict-gte:test_b                                            | _py_venv_test                         | 483ms   
//cases/uv-conflict-max-863:test_a                                        | _py_venv_test                         | 91ms    
//cases/uv-conflict-max-863:test_b                                        | _py_venv_test                         | 465ms   
//cases/uv-conflict-tilde-856:test_a                                      | _py_venv_test                         | 461ms   
//cases/uv-conflict-tilde-856:test_b                                      | _py_venv_test                         | 428ms   
//cases/uv-console-script-binary:test                                     | sh_test                               | 2.4s    
//cases/uv-dep-hashes:test_import                                         | _py_venv_test                         | 621ms   
//cases/uv-dep-hashes:test_lockfile_hashless                              | sh_test                               | 103ms   
//cases/uv-deps-650/airflow:airflow                                       | _py_venv_test                         | 662ms   
//cases/uv-deps-650/crossbuild:exec_toolchain_resolution_test             | sh_test                               | 228ms   
//cases/uv-deps-650/extras:extras                                         | _py_venv_test                         | 1s      
//cases/uv-deps-650/say:say                                               | _py_venv_test                         | 660ms   
//cases/uv-include-group:include_group                                    | _py_venv_test                         | 1.6s    
//cases/uv-legacy-deps-750:googlemaps                                     | _py_venv_test                         | 1.2s    
//cases/uv-no-sdist-754:test                                              | sh_test                               | 127ms   
//cases/uv-patching-829:test                                              | _py_venv_test                         | 503ms   
//cases/uv-platform-filter-844:test                                       | sh_test                               | 73ms    
//cases/uv-plus-version:test                                              | _py_venv_test                         | 816ms   
//cases/uv-toolchain:test                                                 | sh_test                               | 102ms   
//cases/uv-whl-install-output-group:test                                  | _py_venv_test                         | 1s      
//cases/uv-workspace-789:test                                             | _py_venv_test                         | 1.4s    
//cases/venv-bin-scripts-423:test                                         | _py_venv_test                         | 1.4s    
//cases/venv-conflict-608:test_no_venv_conflict                           | _empty_test                           | 174ms   
//cases/venv-internal-symlinks:test_internal_symlinks                     | _py_venv_test                         | 350ms   
//cases/venv-internal-symlinks:test_internal_symlinks_legacy              | py_test                               | 491ms   
//cases/venv-isolated-mode-703:test                                       | _py_venv_test                         | 690ms   
//cases/windows-crossbuild-837:test                                       | sh_test                               | 87ms    
✅ 73 Targets Built
Label                                                                                  | Target Type                  
---------------------------------------------------------------------------------------+------------------------------
//cases/cross-repo-610/subrepo_a:foo                                                   | py_library                   
//cases/cross-repo-610/subrepo_b:bar                                                   | py_library                   
//cases/firebase-admin-import:firebase_importer                                        | py_binary                    
//cases/firebase-admin-import:run_in_exec                                              | genrule                      
//cases/interpreter-features-836:amd64_image                                           | platform_transition_filegroup
//cases/interpreter-features-836:amd64_layers                                          | platform_transition_filegroup
//cases/interpreter-features-836:image                                                 | oci_image                    
//cases/interpreter-features-836:image.digest                                          | jq_rule                      
//cases/interpreter-features-836:image_index_json                                      | directory_path               
//cases/interpreter-features-836:image_index_json_cp                                   | _copy_file                   
//cases/interpreter-features-836:image_write_entrypoint                                | _write_file                  
//cases/interpreter-features-836:layers                                                | filegroup                    
//cases/interpreter-features-836:layers.manifest                                       | mtree_spec                   
//cases/interpreter-features-836:layers_default                                        | tar                          
//cases/interpreter-features-836:layers_interpreter                                    | tar                          
//cases/interpreter-features-836:layers_manifests                                      | genrule                      
//cases/interpreter-features-836:layers_packages                                       | tar                          
//cases/interpreter-version-541:expanded_test_3_10.py                                  | expand_template              
//cases/interpreter-version-541:expanded_test_3_11.py                                  | expand_template              
//cases/interpreter-version-541:expanded_test_3_9.py                                   | expand_template              
//cases/oci/py_image_layer/branding:branding                                           | py_library                   
//cases/oci/py_image_layer:image_load_write_tags                                       | _write_file                  
//cases/oci/py_image_layer:image_write_entrypoint                                      | _write_file                  
//cases/oci/py_venv_image_layer:image_load_write_tags                                  | _write_file                  
//cases/oci/py_venv_image_layer:image_write_entrypoint                                 | _write_file                  
//cases/pytest-main-867:test_collection_check.pytest_paths                             | pytest_paths                 
//cases/pytest-main-867:test_example.pytest_paths                                      | pytest_paths                 
//cases/pytest-main-867:test_multi_src.pytest_paths                                    | pytest_paths                 
//cases/pytest-main-867:test_naming_regression.pytest_paths                            | pytest_paths                 
//cases/pytest-mock-530:test_mock_py_test.pytest_paths                                 | pytest_paths                 
//cases/pytest-subdir-imports:lib                                                      | py_library                   
//cases/pytest-subdir-imports:test_subdir_import.pytest_paths                          | pytest_paths                 
//cases/pytest-xdist-integration:test_xdist.pytest_paths                               | pytest_paths                 
//cases/repository-rule-deps-299/direct/directmod:directmod                            | py_library                   
//cases/repository-rule-deps-299/imported/flat:flat                                    | py_library                   
//cases/repository-rule-deps-299/imported:subdir                                       | py_library                   
//cases/repository-rule-deps-299/toplevel:toplevel                                     | py_library                   
//cases/root-dir-paths-538:check_paths_bin                                             | py_binary                    
//cases/root-dir-paths-538:check_paths_venv_bin                                        | _py_venv_binary              
//cases/unconstrained-dependencies:get_python_package_version_humble_test.pytest_paths | pytest_paths                 
//cases/unconstrained-dependencies:get_python_package_version_main_test.pytest_paths   | pytest_paths                 
//cases/unconstrained-dependencies:print_python_package_version_humble                 | py_binary                    
//cases/unconstrained-dependencies:print_python_package_version_main                   | py_binary                    
//cases/uv-console-script-binary:_mkdocs_search                                        | genrule                      
//cases/uv-console-script-binary:_mkdocs_search_binary                                 | _py_venv_binary              
//cases/uv-console-script-binary:_whoowns_explicit_search                              | genrule                      
//cases/uv-console-script-binary:_whoowns_explicit_search_binary                       | _py_venv_binary              
//cases/uv-console-script-binary:_whoowns_search                                       | genrule                      
//cases/uv-console-script-binary:_whoowns_search_binary                                | _py_venv_binary              
//cases/uv-console-script-binary:mkdocs                                                | _py_venv_binary              
//cases/uv-console-script-binary:whoowns                                               | _py_venv_binary              
//cases/uv-console-script-binary:whoowns_explicit                                      | _py_venv_binary              
//cases/uv-deps-650/crossbuild:image_write_entrypoint                                  | _write_file                  
//cases/uv-deps-650/crossbuild:unpack_path                                             | unpack_toolchain_path        
//cases/uv-deps-650/crossbuild:unpack_path_for_arm64                                   | unpack_toolchain_path        
//cases/uv-deps-650/crossbuild:unpack_path_for_arm64_transition                        | platform_transition_filegroup
//cases/uv-deps-650/third_party/cowsay:cowsay                                          | py_library                   
//cases/uv-gazelle-778:_gazelle_python_manifest_pypi_airflow_whls                      | platform_transition_filegroup
//cases/uv-gazelle-778:_gazelle_python_manifest_pypi_crossbuild_whls                   | platform_transition_filegroup
//cases/uv-gazelle-778:_gazelle_python_manifest_pypi_extras_whls                       | platform_transition_filegroup
//cases/uv-gazelle-778:_gazelle_python_manifest_pypi_say_whls                          | platform_transition_filegroup
//cases/uv-gazelle-778:gazelle_python_manifest                                         | _modules_mapping             
//cases/uv-gazelle-778:gazelle_python_manifest.update                                  | sh_binary                    
//cases/uv-no-sdist-754:pywin32_targets                                                | genquery                     
//cases/uv-platform-filter-844:watchdog_targets                                        | genquery                     
//cases/uv-toolchain:uv_bazel_fork_version                                             | genrule                      
//cases/uv-toolchain:uv_custom_version                                                 | genrule                      
//cases/uv-toolchain:uv_legacy_version                                                 | genrule                      
//cases/uv-toolchain:uv_mirror_version                                                 | genrule                      
//cases/uv-toolchain:uv_version                                                        | genrule                      
//cases/venv-conflict-608:app                                                          | py_binary                    
//cases/windows-crossbuild-837:windows_arm64_toolchain_deps                            | genquery                     
//cases/windows-crossbuild-837:windows_x64_toolchain_deps                              | genquery                     
⤵️ 70 Targets Skipped
Label                                                         | Target Type                  
--------------------------------------------------------------+------------------------------
//cases/oci/py_image_layer:amd64_image                        | platform_transition_filegroup
//cases/oci/py_image_layer:image                              | oci_image                    
//cases/oci/py_image_layer:image.digest                       | jq_rule                      
//cases/oci/py_image_layer:image_index_json                   | directory_path               
//cases/oci/py_image_layer:image_index_json_cp                | _copy_file                   
//cases/oci/py_image_layer:image_load                         | oci_load                     
//cases/oci/py_image_layer:my_app_bin                         | py_binary                    
//cases/oci/py_image_layer:my_app_layers                      | filegroup                    
//cases/oci/py_image_layer:my_app_layers.manifest             | mtree_spec                   
//cases/oci/py_image_layer:my_app_layers_default              | tar                          
//cases/oci/py_image_layer:my_app_layers_interpreter          | tar                          
//cases/oci/py_image_layer:my_app_layers_manifests            | genrule                      
//cases/oci/py_image_layer:my_app_layers_packages             | tar                          
//cases/oci/py_image_layer:my_app_layers_test                 | _write_source_file           
//cases/oci/py_image_layer:my_app_layers_test_listing         | genrule                      
//cases/oci/py_image_layer:my_app_layers_test_test            | _diff_test                   
//cases/oci/py_image_layer:platform_image                     | platform_transition_filegroup
//cases/oci/py_image_layer:platform_layers                    | platform_transition_filegroup
//cases/oci/py_image_layer:py_image_test                      | container_structure_test     
//cases/oci/py_venv_image_layer:amd64_image                   | platform_transition_filegroup
//cases/oci/py_venv_image_layer:amd64_layers                  | platform_transition_filegroup
//cases/oci/py_venv_image_layer:arm64_image                   | platform_transition_filegroup
//cases/oci/py_venv_image_layer:arm64_layers                  | platform_transition_filegroup
//cases/oci/py_venv_image_layer:image                         | oci_image                    
//cases/oci/py_venv_image_layer:image.digest                  | jq_rule                      
//cases/oci/py_venv_image_layer:image_index_json              | directory_path               
//cases/oci/py_venv_image_layer:image_index_json_cp           | _copy_file                   
//cases/oci/py_venv_image_layer:image_load                    | oci_load                     
//cases/oci/py_venv_image_layer:my_app_amd64_layers           | _write_source_file           
//cases/oci/py_venv_image_layer:my_app_amd64_layers_listing   | genrule                      
//cases/oci/py_venv_image_layer:my_app_amd64_layers_test      | _diff_test                   
//cases/oci/py_venv_image_layer:my_app_arm64_layers           | _write_source_file           
//cases/oci/py_venv_image_layer:my_app_arm64_layers_listing   | genrule                      
//cases/oci/py_venv_image_layer:my_app_arm64_layers_test      | _diff_test                   
//cases/oci/py_venv_image_layer:my_app_layers                 | filegroup                    
//cases/oci/py_venv_image_layer:my_app_layers.manifest        | mtree_spec                   
//cases/oci/py_venv_image_layer:my_app_layers_default         | tar                          
//cases/oci/py_venv_image_layer:my_app_layers_interpreter     | tar                          
//cases/oci/py_venv_image_layer:my_app_layers_manifests       | genrule                      
//cases/oci/py_venv_image_layer:my_app_layers_packages        | tar                          
//cases/oci/py_venv_image_layer:platform_image                | platform_transition_filegroup
//cases/oci/py_venv_image_layer:py_amd64_image_command_test   | container_structure_test     
//cases/oci/py_venv_image_layer:py_amd64_image_content_test   | container_structure_test     
//cases/oci/py_venv_image_layer:py_arm64_image_command_test   | container_structure_test     
//cases/oci/py_venv_image_layer:py_arm64_image_content_test   | container_structure_test     
//cases/unconstrained-dependencies:get_python_package_version | py_library                   
//cases/uv-deps-650/crossbuild:amd64_image                    | platform_transition_filegroup
//cases/uv-deps-650/crossbuild:amd64_layers                   | platform_transition_filegroup
//cases/uv-deps-650/crossbuild:app_bin                        | _py_venv_binary              
//cases/uv-deps-650/crossbuild:app_layers                     | filegroup                    
//cases/uv-deps-650/crossbuild:app_layers.manifest            | mtree_spec                   
//cases/uv-deps-650/crossbuild:app_layers_default             | tar                          
//cases/uv-deps-650/crossbuild:app_layers_interpreter         | tar                          
//cases/uv-deps-650/crossbuild:app_layers_manifests           | genrule                      
//cases/uv-deps-650/crossbuild:app_layers_packages            | tar                          
//cases/uv-deps-650/crossbuild:arm64_image                    | platform_transition_filegroup
//cases/uv-deps-650/crossbuild:arm64_layers                   | platform_transition_filegroup
//cases/uv-deps-650/crossbuild:crossbuild_compile_pyc_test    | sh_test                      
//cases/uv-deps-650/crossbuild:image                          | oci_image                    
//cases/uv-deps-650/crossbuild:image.digest                   | jq_rule                      
//cases/uv-deps-650/crossbuild:image_index                    | oci_image_index              
//cases/uv-deps-650/crossbuild:image_index.digest             | jq_rule                      
//cases/uv-deps-650/crossbuild:image_index_index_json         | directory_path               
//cases/uv-deps-650/crossbuild:image_index_index_json_cp      | _copy_file                   
//cases/uv-deps-650/crossbuild:image_index_json               | directory_path               
//cases/uv-deps-650/crossbuild:image_index_json_cp            | _copy_file                   
//cases/uv-sdist-native-build:test                            | _py_venv_test                
//cases/uv-whl-install-output-group:iniconfig_install_dir     | filegroup                    
//cases/uv-workspace-789/packages/foo:foo                     | py_library                   
//cases/uv-workspace-789/packages/pi:pi                       | py_library                   

🔁 Reproduce

aspect test -- //...
# without Aspect CLI
bazel test -- //...

Install aspect: docs.aspect.build/cli/install

📎 Artifacts

Artifacts · Profile · BEP

⏱️ Task timing

Phase | Description                  | Duration
------+------------------------------+---------
Setup | Prepare the task environment | 5.8s    
Test  | Run bazel tests              | 33m 20s 
------+------------------------------+---------
Total |                              | 33m 26s 

🧮 Bazel details

📟 Command line · bazel test //...
bazel test \
  --experimental_output_paths=strip \
  --disk_cache=/home/runner/.cache/bazel-disk \
  --test_tag_filters=-skip-on-bazel8 \
  --generate_json_trace_profile=1 \
  --experimental_profile_include_target_label \
  --profile=/tmp/e3edb08b-8fa0-4e8a-9712-e680f4835086.profile.gz \
  --color=yes \
  --build_metadata=ASPECT_TASK_NAME=Test \
  --build_metadata=ASPECT_TASK_ID=test-e2e-bazel-8 \
  --build_event_publish_all_actions \
  --build_event_binary_file_upload_mode=fully_async \
  --build_event_binary_file=/tmp/build-event-out-7c9e9f82-e379-483c-9d82-aabcdc1f94d6.bin \
  -- \
  //...
ℹ️ Invocation details
  • Invocation ID: 4ab9ecd7-bbe5-4167-a108-9d7dbc13b7e8
  • Command: test
  • Bazel version: 8.7.0
  • Start time: Thu Jun 11 12:41:20 UTC 2026
  • End time: Thu Jun 11 13:14:27 UTC 2026
  • User: runner
  • Host name: runnervmiav63
  • CPU Target: k8
  • Mode: fastbuild
  • Working directory: /home/runner/work/rules_py/rules_py/e2e
  • Workspace directory: /home/runner/work/rules_py/rules_py/e2e
  • Server PID: 2969
⏱ Timing
  • Elapsed time: 33m 7s
  • Analysis time: 38.4s
  • Execution time: 32m 59s
  • Bazel server time: 1.9 cpu-hours
  • Executed Tests Time: 1.3 cpu-minutes
📦 Build graph
  • Targets: 204 targets (2,159,333 configured, 6,242 aspect applications)
  • Actions: 79,110 actions (163,874 created)
  • Packages: 1,336 packages loaded
💾 Cache stats
  • Actions: 84,764 of 163,874 cached (51%)
  • Tests: 0 of 61 cached (0%)
⚡ Actions by mnemonic (20)
Mnemonic              | Count  | %    
----------------------+--------+------
CppCompile            | 37,219 | 47.0%
Rustc                 | 16,564 | 20.9%
Symlink               | 8,892  | 11.2%
FileWrite             | 2,813  | 3.5% 
ExecutableSymlink     | 2,174  | 2.7% 
CppArchive            | 1,750  | 2.2% 
RepoMappingManifest   | 1,616  | 2.0% 
SourceSymlinkManifest | 1,614  | 2.0% 
CargoBuildScriptRun   | 1,497  | 1.8% 
CppLink               | 925    | 1.1% 
CopyToDirectory       | 779    | 0.9% 
CppModuleMap          | 736    | 0.9% 
CcStage0Compile       | 555    | 0.7% 
CppTransitiveArchive  | 555    | 0.7% 
RunBinary             | 444    | 0.5% 
…5 more (937 actions)
🏃 Actions by runner (4)
Runner                  | Count  | %    
------------------------+--------+------
linux-sandbox · Local   | 60,311 | 76.2%
internal                | 18,079 | 22.8%
disk cache hit · Remote | 717    | 0.9% 
deduplicated · Remote   | 3      | 0.0% 
🏠 Workspace status (4)
  • BUILD_HOST: runnervmiav63
  • BUILD_TIMESTAMP: 1781181687
  • BUILD_USER: runner
  • FORMATTED_DATE: 2026 Jun 11 12 41 27 Thu
🏷️ Build metadata (2)
  • ASPECT_TASK_ID: test-e2e-bazel-8
  • ASPECT_TASK_NAME: Test
🎛️ Startup options (12)
--connect_timeout_secs=30
--failure_detail_out=/home/runner/.cache/bazel/_bazel_runner/ea5a46adc4ace432824f7d10087e1393/failure_detail.rawproto
--idle_server_tasks
--max_idle_secs=10800
--noclient_debug
--nofatal_event_bus_exceptions
--noshutdown_on_low_sys_mem
--nowatchfs
--nowindows_enable_symlinks
--output_base=/home/runner/.cache/bazel/_bazel_runner/ea5a46adc4ace432824f7d10087e1393
--output_user_root=/home/runner/.cache/bazel/_bazel_runner
--write_command_log
🎛️ Command options (22)
--build_event_binary_file=/tmp/build-event-out-7c9e9f82-e379-483c-9d82-aabcdc1f94d6.bin
--build_event_binary_file_upload_mode=fully_async
--build_event_publish_all_actions
--build_metadata=ASPECT_TASK_ID=test-e2e-bazel-8
--build_metadata=ASPECT_TASK_NAME=Test
--color=yes
--disk_cache=/home/runner/.cache/bazel-disk
--enable_platform_specific_config
--experimental_output_paths=strip
--experimental_profile_include_target_label
--generate_json_trace_profile=1
--host_platform=//:linux_gnu
--incompatible_enable_cc_toolchain_resolution
--lockfile_mode=off
--nobuild_runfile_links
--platforms=//:linux_gnu
--profile=/tmp/e3edb08b-8fa0-4e8a-9712-e680f4835086.profile.gz
--remote_download_outputs=minimal
--repo_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1
--repo_env=BAZEL_NO_APPLE_CPP_TOOLCHAIN=1
--repository_cache=/home/runner/.cache/bazel-repo
--test_tag_filters=-skip-on-bazel8

⏱ Last updated Thu Jun 11 13:14:34 UTC 2026 · 📊 GitHub API quota 74/15,000 (0% used, resets in 57m, throttle 3×)
🚀 Powered by Aspect CLI (v2026.22.44)  |  Aspect Build · X · LinkedIn · YouTube