rdc-cli 0.5.4__tar.gz → 0.5.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/.github/workflows/aur.yml +2 -2
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/PKG-INFO +1 -1
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/data/commands.json +7 -1
- rdc_cli-0.5.6/openspec/changes/2026-06-04-open-gpu-override/proposal.md +83 -0
- rdc_cli-0.5.6/openspec/changes/2026-06-04-open-gpu-override/tasks.md +14 -0
- rdc_cli-0.5.6/openspec/changes/2026-06-04-open-gpu-override/test-plan.md +36 -0
- rdc_cli-0.5.6/openspec/changes/archive/2026-05-15-fix-225-d3d12-multi-gpu/proposal.md +90 -0
- rdc_cli-0.5.6/openspec/changes/archive/2026-05-15-fix-225-d3d12-multi-gpu/tasks.md +10 -0
- rdc_cli-0.5.6/openspec/changes/archive/2026-05-15-fix-225-d3d12-multi-gpu/test-plan.md +33 -0
- rdc_cli-0.5.6/openspec/changes/archive/2026-05-15-issue-224-cbuffer-export/proposal.md +95 -0
- rdc_cli-0.5.6/openspec/changes/archive/2026-05-15-issue-224-cbuffer-export/specs/daemon/spec.md +40 -0
- rdc_cli-0.5.6/openspec/changes/archive/2026-05-15-issue-224-cbuffer-export/tasks.md +47 -0
- rdc_cli-0.5.6/openspec/changes/archive/2026-05-15-issue-224-cbuffer-export/test-plan.md +78 -0
- rdc_cli-0.5.6/openspec/changes/archive/2026-05-15-issue-224-vsin-mesh/proposal.md +95 -0
- rdc_cli-0.5.6/openspec/changes/archive/2026-05-15-issue-224-vsin-mesh/specs/daemon/spec.md +40 -0
- rdc_cli-0.5.6/openspec/changes/archive/2026-05-15-issue-224-vsin-mesh/tasks.md +31 -0
- rdc_cli-0.5.6/openspec/changes/archive/2026-05-15-issue-224-vsin-mesh/test-plan.md +74 -0
- rdc_cli-0.5.6/openspec/changes/archive/2026-05-17-fix-225-d3d12-chunk-name/proposal.md +235 -0
- rdc_cli-0.5.6/openspec/changes/archive/2026-05-17-fix-225-d3d12-chunk-name/tasks.md +14 -0
- rdc_cli-0.5.6/openspec/changes/archive/2026-05-17-fix-225-d3d12-chunk-name/test-plan.md +232 -0
- rdc_cli-0.5.6/openspec/changes/archive/2026-05-17-fix-aur-deploy-action-v413/proposal.md +101 -0
- rdc_cli-0.5.6/openspec/changes/archive/2026-05-17-fix-aur-deploy-action-v413/tasks.md +12 -0
- rdc_cli-0.5.6/openspec/changes/archive/2026-05-17-fix-aur-deploy-action-v413/test-plan.md +34 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/specs/daemon/spec.md +21 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/scripts/gen-commands.py +1 -1
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/_skills/references/commands-quick-ref.md +22 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/capture_core.py +28 -2
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/cli.py +2 -0
- rdc_cli-0.5.6/src/rdc/commands/cbuffer.py +61 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/doctor.py +8 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/mesh.py +14 -1
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/session.py +18 -2
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/daemon_server.py +263 -37
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/discover.py +14 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/handlers/buffer.py +82 -7
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/handlers/capture.py +19 -14
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/remote_core.py +12 -4
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/services/session_service.py +9 -3
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/vfs/router.py +6 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc_cli.egg-info/PKG-INFO +1 -1
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc_cli.egg-info/SOURCES.txt +22 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/integration/test_daemon_handlers_real.py +31 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/mocks/mock_renderdoc.py +15 -1
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_buffer_decode.py +377 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_capture_core.py +34 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_capture_handlers.py +91 -0
- rdc_cli-0.5.6/tests/unit/test_cbuffer_commands.py +132 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_daemon_server_unit.py +443 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_discover.py +58 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_doctor.py +26 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_mesh_commands.py +75 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_remote_core.py +39 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_remote_replay.py +165 -1
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_session_commands.py +26 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_session_service.py +28 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_vfs_router.py +7 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/.commitlintrc.yml +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/.githooks/pre-commit +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/.githooks/pre-push +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/.github/CODEOWNERS +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/.github/workflows/ci.yml +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/.github/workflows/commitlint.yml +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/.github/workflows/docs.yml +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/.gitignore +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/.python-version +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/.release-please-manifest.json +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/CONTRIBUTING.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/LICENSE +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/Makefile +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/README.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/SECURITY.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/aur/PKGBUILD +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/aur/stable/PKGBUILD +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docker/Dockerfile +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/astro.config.mjs +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/package-lock.json +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/package.json +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/public/.nojekyll +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/public/favicon.svg +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/components/Commands.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/components/Demo.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/components/Features.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/components/Footer.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/components/Hero.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/components/Install.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/components/Navbar.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/components/Philosophy.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/components/Terminal.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/components/ThemeSwitcher.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/data/replay.json +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/data/stats.json +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/layouts/Base.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/layouts/Docs.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/pages/docs/ai-integration.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/pages/docs/commands.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/pages/docs/design.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/pages/docs/examples.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/pages/docs/index.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/pages/docs/install.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/pages/docs/remote.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/pages/docs/usage.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/pages/docs/vfs.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/pages/index.astro +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/src/styles/global.css +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/tailwind.config.mjs +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/tapes/pipeline.tape +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/tapes/quickstart.tape +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/tests/validate.mjs +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/docs-astro/tsconfig.json +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/mypy.ini +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/2026-03-03-bugfix-p2-batch/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/2026-03-03-bugfix-p2-batch/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/2026-03-03-bugfix-p2-batch/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/2026-03-04-w6-windows-bugfixes/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/2026-03-04-w6-windows-bugfixes/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/2026-03-04-w6-windows-bugfixes/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-bootstrap-foundation/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-bootstrap-foundation/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-bootstrap-foundation/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-ci-hardening/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-ci-hardening/specs/ci/spec.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-ci-hardening/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-ci-hardening/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-core-checks/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-core-checks/specs/foundation/spec.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-core-checks/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-core-checks/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-daemon-protocol/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-daemon-protocol/specs/daemon/spec.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-daemon-protocol/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-daemon-protocol/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-daemon-transport/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-daemon-transport/specs/daemon/spec.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-daemon-transport/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-daemon-transport/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-fixtures-docker/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-fixtures-docker/specs/tooling/spec.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-fixtures-docker/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-fixtures-docker/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-pixi-env/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-pixi-env/specs/tooling/spec.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-pixi-env/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-pixi-env/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-session-skeleton/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-session-skeleton/specs/session/spec.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-session-skeleton/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-session-skeleton/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-structure-refactor/design.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-structure-refactor/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-structure-refactor/specs/architecture/spec.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-structure-refactor/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-18-phase0-structure-refactor/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-count-shadermap/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-count-shadermap/specs/daemon/spec.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-count-shadermap/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-count-shadermap/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-daemon-replay/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-daemon-replay/specs/daemon/spec.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-daemon-replay/specs/foundation/spec.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-daemon-replay/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-daemon-replay/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-draws-events/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-draws-events/specs/daemon/spec.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-draws-events/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-draws-events/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-log/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-log/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-log/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-pass-detail/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-pass-detail/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-pass-detail/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-resources-passes/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-resources-passes/specs/daemon/spec.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-resources-passes/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-resources-passes/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-shader-extended/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-shader-extended/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1-shader-extended/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1.5-vfs/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1.5-vfs/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase1.5-vfs/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase2-api-fix/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase2-api-fix/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase2-api-fix/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase2-buffer-decode/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase2-buffer-decode/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase2-buffer-decode/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase2-pipeline-state/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase2-pipeline-state/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase2-pipeline-state/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase2-vfs-binary/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase2-vfs-binary/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-19-phase2-vfs-binary/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2-counters/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2-counters/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2-counters/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2-descriptors/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2-descriptors/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2-descriptors/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2-search/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2-search/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2-search/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2-usage/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2-usage/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2-usage/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.5-aur-pkgbuild/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.5-aur-pkgbuild/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.5-aur-pkgbuild/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.5-cli-enhancements/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.5-cli-enhancements/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.5-cli-enhancements/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.5-python-compat-ci/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.5-python-compat-ci/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.5-python-compat-ci/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.5-release-ci/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.5-release-ci/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.5-release-ci/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.6-daemon-crash/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.6-daemon-crash/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.6-daemon-crash/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.6-output-quality/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.6-output-quality/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.6-output-quality/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.6-pipeline-extended/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.6-pipeline-extended/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.6-pipeline-extended/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.6-shader-api/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.6-shader-api/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-phase2.6-shader-api/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-vfs-path-completion/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-vfs-path-completion/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-20-vfs-path-completion/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-21-fix-daemon-startup-timeout/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-21-fix-daemon-startup-timeout/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-21-fix-daemon-startup-timeout/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-21-fix-event-break-and-test-flaky/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-21-fix-event-break-and-test-flaky/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-21-fix-event-break-and-test-flaky/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-21-fix-pass-detection/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-21-fix-pass-detection/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-21-fix-pass-detection/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-21-fix-vfs-pass-consistency/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-21-fix-vfs-pass-consistency/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-21-fix-vfs-pass-consistency/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-21-phase2.7-bug-filters/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-21-phase2.7-bug-filters/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-21-phase2.7-bug-filters/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-21-phase2.7-refactor-structure/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-21-phase2.7-refactor-structure/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-21-phase2.7-refactor-structure/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-ai-agent-skill/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-ai-agent-skill/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-ai-agent-skill/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-blackbox-bug-fixes/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-blackbox-bug-fixes/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-blackbox-bug-fixes/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-bugfix-remaining-blackbox/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-bugfix-remaining-blackbox/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-bugfix-remaining-blackbox/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-ci-repo-hardening/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-ci-repo-hardening/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-ci-repo-hardening/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-code-maintainability/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-code-maintainability/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-code-maintainability/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-consistent-output-options/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-consistent-output-options/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-consistent-output-options/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-design-deviation-diff-completeness/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-design-deviation-diff-completeness/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-design-deviation-diff-completeness/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-design-deviation-shader-api-fix/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-design-deviation-shader-api-fix/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-design-deviation-shader-api-fix/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-design-deviation-vfs-ls-long/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-design-deviation-vfs-ls-long/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-design-deviation-vfs-ls-long/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-diff-draws/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-diff-draws/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-diff-draws/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-diff-framebuffer/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-diff-framebuffer/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-diff-framebuffer/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-diff-infrastructure/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-diff-infrastructure/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-diff-infrastructure/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-diff-pipeline/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-diff-pipeline/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-diff-pipeline/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-diff-resources/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-diff-resources/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-diff-resources/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-diff-stats/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-diff-stats/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-diff-stats/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-docs-automation/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-docs-automation/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-docs-automation/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-fix-json-error-and-search-preload/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-fix-json-error-and-search-preload/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-fix-json-error-and-search-preload/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-image-compare/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-image-compare/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-image-compare/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase3a-script/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase3a-script/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase3a-script/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase3c-ci-assertions/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase3c-ci-assertions/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase3c-ci-assertions/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase3c-snapshot/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase3c-snapshot/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase3c-snapshot/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase4a-shader-debug/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase4a-shader-debug/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase4a-shader-debug/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase4b-shader-edit-replay/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase4b-shader-edit-replay/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase4b-shader-edit-replay/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase4c-mesh-export/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase4c-mesh-export/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase4c-mesh-export/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase4c-overlay/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase4c-overlay/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase4c-overlay/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase5-debug-thread/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase5-debug-thread/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase5-debug-thread/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase5-pick-pixel/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase5-pick-pixel/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase5-pick-pixel/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase5-tex-stats/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase5-tex-stats/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-phase5-tex-stats/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-renderdoc-build-helper/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-renderdoc-build-helper/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-renderdoc-build-helper/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-robustness-hardening/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-robustness-hardening/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-robustness-hardening/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-security-hardening-2/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-security-hardening-2/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-security-hardening-2/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-skill-auto-install/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-skill-auto-install/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-skill-auto-install/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-worktree-isolation/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-worktree-isolation/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-22-worktree-isolation/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-b17-eid-mutation/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-b17-eid-mutation/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-b17-eid-mutation/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-b18-b19-b24-cli-ux/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-b18-b19-b24-cli-ux/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-b18-b19-b24-cli-ux/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-b21-b22-b23-b25-daemon-lifecycle/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-b21-b22-b23-b25-daemon-lifecycle/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-b21-b22-b23-b25-daemon-lifecycle/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-capture-process-leak-b26-b28/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-capture-process-leak-b26-b28/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-capture-process-leak-b26-b28/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-docs-polish/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-docs-polish/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-docs-polish/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-fix-aur-build/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-fix-aur-build/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-fix-aur-build/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-fix-bugs-b10-b15-b16/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-fix-bugs-b10-b15-b16/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-fix-bugs-b10-b15-b16/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-phase-w2-build-script/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-phase-w2-build-script/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-phase-w2-build-script/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-phase5b-capture-unified/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-phase5b-capture-unified/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-phase5b-capture-unified/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-test-gpu-coverage/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-test-gpu-coverage/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-test-gpu-coverage/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-test-mock-accuracy/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-test-mock-accuracy/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-23-test-mock-accuracy/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-24-b43-b44-remote-split/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-24-b43-b44-remote-split/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-24-b43-b44-remote-split/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-24-phase-m-macos-support/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-24-phase-m-macos-support/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-24-phase-m-macos-support/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-24-phase-r1-quick-wins/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-24-phase-r1-quick-wins/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-24-phase-r1-quick-wins/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-24-phase-r2-test-infrastructure/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-24-phase-r2-test-infrastructure/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-24-phase-r2-test-infrastructure/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-26-phase-r3-usability-fixes/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-26-phase-r3-usability-fixes/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-26-phase-r3-usability-fixes/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-28-design-deviation-fixes/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-28-design-deviation-fixes/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-28-design-deviation-fixes/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-28-dev-install-enhancement/proposal.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-28-dev-install-enhancement/tasks.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/changes/archive/2026-02-28-dev-install-enhancement/test-plan.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/specs/architecture/spec.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/specs/ci/spec.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/specs/foundation/spec.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/specs/packaging/spec.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/specs/session/spec.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/openspec/specs/tooling/spec.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/pixi.lock +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/pixi.toml +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/pyproject.toml +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/release-please-config.json +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/ruff.toml +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/scripts/build-renderdoc.sh +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/scripts/build_renderdoc.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/scripts/capture_fixture.sh +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/scripts/dev_install.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/scripts/e2e_test.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/scripts/ensure-renderdoc.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/scripts/ensure-renderdoc.sh +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/scripts/ensure-skill-link.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/scripts/gen-replay.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/scripts/gen-skill-ref.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/scripts/gen-stats.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/scripts/gen_and_check.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/scripts/setup-renderdoc.sh +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/scripts/setup-vulkan-samples.sh +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/scripts/setup_android_tools.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/scripts/setup_vulkan_samples.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/scripts/verify-package.sh +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/scripts/verify_package.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/setup.cfg +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/__init__.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/_build_renderdoc.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/_platform.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/_progress.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/_skills/SKILL.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/_skills/__init__.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/_transport.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/adapter.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/_helpers.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/android.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/assert_ci.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/assert_image.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/capture.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/capture_control.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/capturefile.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/completion.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/counters.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/debug.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/diff.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/events.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/export.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/info.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/install_skill.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/pick_pixel.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/pipeline.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/pixel.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/remote.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/resources.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/script.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/search.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/serve.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/setup_renderdoc.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/shader_edit.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/snapshot.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/tex_stats.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/unix_helpers.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/unused_targets.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/usage.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/commands/vfs.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/daemon_client.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/diff/__init__.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/diff/alignment.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/diff/draws.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/diff/framebuffer.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/diff/pipeline.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/diff/resources.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/diff/stats.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/diff/summary.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/formatters/json_fmt.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/formatters/kv.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/formatters/options.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/formatters/tsv.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/handlers/__init__.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/handlers/_helpers.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/handlers/_types.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/handlers/capturefile.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/handlers/core.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/handlers/debug.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/handlers/descriptor.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/handlers/pipe_state.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/handlers/pixel.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/handlers/query.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/handlers/script.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/handlers/shader.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/handlers/shader_edit.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/handlers/texture.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/handlers/unused.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/handlers/vfs.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/image_compare.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/protocol.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/remote_state.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/services/__init__.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/services/diff_service.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/services/query_service.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/session_state.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/target_state.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/vfs/__init__.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/vfs/formatter.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc/vfs/tree_cache.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc_cli.egg-info/dependency_links.txt +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc_cli.egg-info/entry_points.txt +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc_cli.egg-info/requires.txt +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/src/rdc_cli.egg-info/top_level.txt +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/conftest.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/e2e/__init__.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/e2e/blackbox_test_catalog.md +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/e2e/conftest.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/e2e/e2e_helpers.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/e2e/test_advanced.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/e2e/test_assert.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/e2e/test_capture.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/e2e/test_capturefile.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/e2e/test_debug.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/e2e/test_diff.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/e2e/test_export.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/e2e/test_formats.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/e2e/test_presession.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/e2e/test_query.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/e2e/test_session.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/e2e/test_shader_edit.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/e2e/test_vfs.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/fixtures/gles-multipass-debug.apk +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/fixtures/gles-triangle-debug.apk +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/fixtures/gles_android_mali.rdc +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/fixtures/gles_multipass_mali.rdc +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/fixtures/hello_triangle.rdc +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/fixtures/vkcube.rdc +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/fixtures/vkcube_validation.rdc +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/integration/test_build_renderdoc_integration.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/integration/test_mock_api_sync.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/integration/test_real_replay.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/integration/test_vulkan_samples.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/conftest.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_adapter.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_android_commands.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_assert_ci_commands.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_assert_image_command.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_binary_daemon.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_build_renderdoc.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_capture.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_capture_control.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_capturefile_commands.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_capturefile_handlers.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_ci_files.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_cli.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_cli_session_flag.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_completion.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_count_shadermap.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_counters_commands.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_counters_daemon.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_daemon_crash_regression.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_daemon_output_quality.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_daemon_pipeline_extended.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_daemon_shader_api_fix.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_daemon_shader_extended.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_daemon_transport.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_debug_commands.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_debug_handlers.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_descriptors_daemon.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_dev_install.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_diff_alignment.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_diff_command.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_diff_draws.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_diff_framebuffer.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_diff_pipeline.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_diff_resources.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_diff_service.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_diff_stats.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_diff_summary.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_doctor_hints.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_draws_daemon.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_draws_events_cli.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_draws_events_daemon.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_eid_completion.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_events_commands.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_export_commands.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_export_overlay.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_fix1_draws_pass_name.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_fix2_vfs_intermediate_dirs.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_fix3_friendly_pass_name.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_formatters.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_formatters_kv.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_gen_skill_ref.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_handlers_remote.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_image_compare.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_info_commands.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_install_skill.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_json_errors.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_keep_remote.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_mesh_handler.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_mock_capture_types.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_mock_renderdoc.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_open_remote.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_output_options.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_overlay_handler.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_pass_deps.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_pick_pixel_commands.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_pick_pixel_daemon.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_pipeline_cli_phase27.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_pipeline_commands.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_pipeline_daemon.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_pipeline_section_routing.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_pipeline_shader.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_pipeline_state.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_pixel_history_commands.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_pixel_history_daemon.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_pixi_files.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_platform.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_progress.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_protocol.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_query_service.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_quickfix_batch.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_remote_commands.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_remote_setup.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_remote_state.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_remote_status_disconnect.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_require_pipe.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_resource_semantic_completion.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_resources_commands.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_resources_filter.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_script_command.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_script_handler.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_search.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_semantic_completion.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_serve.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_session_completion.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_session_state.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_setup_renderdoc.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_setup_vulkan_samples.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_shader_edit_commands.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_shader_edit_handlers.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_shader_preload.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_skill_structure.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_snapshot_command.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_split_binary.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_split_core.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_target_state.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_tex_stats_commands.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_tex_stats_handler.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_tooling_files.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_unix_helpers_commands.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_unused_targets.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_usage_commands.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_usage_daemon.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_vfs_binary.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_vfs_commands.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_vfs_completion.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_vfs_daemon.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_vfs_formatter.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_vfs_tree_cache.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/tests/unit/test_windows_compat.py +0 -0
- {rdc_cli-0.5.4 → rdc_cli-0.5.6}/uv.lock +0 -0
|
@@ -22,7 +22,7 @@ jobs:
|
|
|
22
22
|
steps:
|
|
23
23
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
24
24
|
|
|
25
|
-
- uses: KSXGitHub/github-actions-deploy-aur@
|
|
25
|
+
- uses: KSXGitHub/github-actions-deploy-aur@da03e160361ce01bf087e790b6ffd196d7dccff7 # v4.1.3
|
|
26
26
|
with:
|
|
27
27
|
pkgname: rdc-cli-git
|
|
28
28
|
pkgbuild: aur/PKGBUILD
|
|
@@ -69,7 +69,7 @@ jobs:
|
|
|
69
69
|
sed -i "s/^pkgver=.*/pkgver=${VERSION}/" aur/stable/PKGBUILD
|
|
70
70
|
sed -i "s/'PLACEHOLDER'/'${SHA256}'/" aur/stable/PKGBUILD
|
|
71
71
|
|
|
72
|
-
- uses: KSXGitHub/github-actions-deploy-aur@
|
|
72
|
+
- uses: KSXGitHub/github-actions-deploy-aur@da03e160361ce01bf087e790b6ffd196d7dccff7 # v4.1.3
|
|
73
73
|
with:
|
|
74
74
|
pkgname: rdc-cli
|
|
75
75
|
pkgbuild: aur/stable/PKGBUILD
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"name": "open",
|
|
10
10
|
"id": "open",
|
|
11
11
|
"help": "Create local default session and start daemon skeleton.",
|
|
12
|
-
"usage": "rdc open [CAPTURE] [--preload] [--proxy HOST[:PORT]|adb://SERIAL] [--android] [--serial TEXT] [--remote HOST[:PORT]] [--listen [ADDR]:PORT] [--connect HOST:PORT] [--token TEXT] [--timeout FLOAT]"
|
|
12
|
+
"usage": "rdc open [CAPTURE] [--preload] [--proxy HOST[:PORT]|adb://SERIAL] [--android] [--serial TEXT] [--remote HOST[:PORT]] [--listen [ADDR]:PORT] [--connect HOST:PORT] [--token TEXT] [--timeout FLOAT] [--gpu INDEX|NAME|DEVICEID]"
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"name": "close",
|
|
@@ -201,6 +201,12 @@
|
|
|
201
201
|
"help": "Export buffer raw data.",
|
|
202
202
|
"usage": "rdc buffer <ID> [-o PATH] [--raw]"
|
|
203
203
|
},
|
|
204
|
+
{
|
|
205
|
+
"name": "cbuffer",
|
|
206
|
+
"id": "cbuffer",
|
|
207
|
+
"help": "Decode a constant buffer to JSON or export its raw bytes.",
|
|
208
|
+
"usage": "rdc cbuffer [EID] [--stage CHOICE] [--set INTEGER] [--binding INTEGER] [--json] [--raw] [-o PATH]"
|
|
209
|
+
},
|
|
204
210
|
{
|
|
205
211
|
"name": "rt",
|
|
206
212
|
"id": "rt",
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Add `--gpu` override to `rdc open`
|
|
2
|
+
|
|
3
|
+
## Problem
|
|
4
|
+
|
|
5
|
+
When a capture is replayed, the daemon picks the replay GPU automatically via
|
|
6
|
+
`_match_capture_gpu()`: it matches the capture's recorded device name (Vulkan)
|
|
7
|
+
or adapter description / DeviceId (D3D12), and **falls back to vendor priority
|
|
8
|
+
(nVidia > AMD > Intel)** when nothing matches.
|
|
9
|
+
|
|
10
|
+
On a multi-GPU host that fallback is `filtered[0]` after a stable sort, i.e. the
|
|
11
|
+
first-enumerated device of the highest-priority vendor — frequently the
|
|
12
|
+
integrated GPU. There is no way for the user to override it:
|
|
13
|
+
|
|
14
|
+
- `rdc open` exposes no GPU selection flag.
|
|
15
|
+
- The fallback cannot be steered toward a discrete GPU, a specific device, or a
|
|
16
|
+
GPU whose name does not match the capture's recorded name (common when
|
|
17
|
+
replaying a capture taken on different hardware).
|
|
18
|
+
|
|
19
|
+
This complements the recent multi-GPU auto-matching work (#225) by giving the
|
|
20
|
+
analyst an explicit escape hatch when auto-selection picks the wrong device.
|
|
21
|
+
|
|
22
|
+
Note: an explicit GPU choice does not make a capture portable across
|
|
23
|
+
incompatible hardware (RADV descriptor layouts differ per GPU generation); it
|
|
24
|
+
only controls *which* available GPU replay is attempted on.
|
|
25
|
+
|
|
26
|
+
## Solution
|
|
27
|
+
|
|
28
|
+
Add an optional `--gpu INDEX|NAME|DEVICEID` flag to `rdc open` that forces the
|
|
29
|
+
replay GPU, overriding auto-selection.
|
|
30
|
+
|
|
31
|
+
Resolution order against `cap.GetAvailableGPUs()`:
|
|
32
|
+
|
|
33
|
+
1. **0-based index** — `--gpu 1` selects the second enumerated GPU.
|
|
34
|
+
2. **device ID** — decimal or `0x` hex (`--gpu 0x747e`), matched against
|
|
35
|
+
`GPUDevice.deviceID`.
|
|
36
|
+
3. **name substring** — case-insensitive (`--gpu "7800 XT"`).
|
|
37
|
+
|
|
38
|
+
If the preference matches no available GPU, a warning is logged listing the
|
|
39
|
+
available GPUs and replay falls back to the existing auto-selection (non-fatal).
|
|
40
|
+
|
|
41
|
+
### Plumbing
|
|
42
|
+
|
|
43
|
+
The flag threads CLI → daemon, reusing the existing daemon-arg channel:
|
|
44
|
+
|
|
45
|
+
- `commands/session.py`: `--gpu` option on `open_cmd`; ignored (with a warning)
|
|
46
|
+
for `--connect` (an external daemon is already running). Passed to
|
|
47
|
+
`open_session` / `listen_open_session`.
|
|
48
|
+
- `services/session_service.py`: `start_daemon(..., gpu=...)` appends
|
|
49
|
+
`--gpu <value>` to the daemon argv; `open_session` / `listen_open_session`
|
|
50
|
+
forward it.
|
|
51
|
+
- `daemon_server.py`: `--gpu` arg → `DaemonState.gpu_pref`; `_match_capture_gpu`
|
|
52
|
+
gains a `pref` parameter that short-circuits to the resolved GPU before
|
|
53
|
+
auto-matching. Applied at both the local and remote replay call sites.
|
|
54
|
+
|
|
55
|
+
Out of scope: changing the default auto-selection (vendor priority is unchanged).
|
|
56
|
+
|
|
57
|
+
## Spec Delta
|
|
58
|
+
|
|
59
|
+
The existing scenario "Multi-GPU capture replay" under **Requirement: Replay
|
|
60
|
+
lifecycle** in `openspec/specs/daemon/spec.md` (added by #226, amended by #230)
|
|
61
|
+
is amended so the user `--gpu` preference takes precedence over auto-selection:
|
|
62
|
+
|
|
63
|
+
```diff
|
|
64
|
+
#### Scenario: Multi-GPU capture replay
|
|
65
|
+
- **WHEN** the capture was taken on a multi-GPU system
|
|
66
|
+
- **AND** multiple GPUs are available for replay
|
|
67
|
+
-- **THEN** the daemon walks structured-data chunks whose name contains any of
|
|
68
|
+
+- **THEN** if the user passed `--gpu` (a 0-based index, a PCI device ID in
|
|
69
|
+
+ decimal or `0x` hex, or a case-insensitive name substring) that resolves to an
|
|
70
|
+
+ available GPU, that GPU is selected and structured-data inspection is skipped
|
|
71
|
+
+- **AND** otherwise the daemon walks structured-data chunks whose name contains any of
|
|
72
|
+
"Driver Initialisation Parameters", "DriverInit", "EnumAdapters", or
|
|
73
|
+
"CreateDXGIFactory"
|
|
74
|
+
...
|
|
75
|
+
- **AND** if no structured-data match exists, Software/WARP adapters are excluded
|
|
76
|
+
and the highest-ranked discrete GPU is preferred (nVidia > AMD > Intel)
|
|
77
|
+
+- **AND** an unresolved `--gpu` preference logs a warning and falls back to the
|
|
78
|
+
+ auto-selection above
|
|
79
|
+
- **AND** a single available GPU is always returned directly without inspection
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
This delta has been applied to `openspec/specs/daemon/spec.md` as part of this
|
|
83
|
+
change.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Tasks: Add `--gpu` override to `rdc open`
|
|
2
|
+
|
|
3
|
+
- [x] `daemon_server.py`: add `_resolve_gpu_pref()` (index / deviceID / name substring)
|
|
4
|
+
- [x] `daemon_server.py`: add `pref` param to `_match_capture_gpu()`; short-circuit before auto-match, warn + fall back when no match
|
|
5
|
+
- [x] `daemon_server.py`: `--gpu` arg, `DaemonState.gpu_pref`, pass `state.gpu_pref` at local + remote call sites
|
|
6
|
+
- [x] `services/session_service.py`: `start_daemon(gpu=...)` appends `--gpu`; forward through `open_session` / `listen_open_session`
|
|
7
|
+
- [x] `commands/session.py`: `--gpu` option on `open_cmd`; warn-and-ignore with `--connect`; pass to open paths
|
|
8
|
+
- [x] `openspec/specs/daemon/spec.md`: apply Spec Delta to the "Multi-GPU capture replay" scenario (user `--gpu` precedence + unresolved fallback)
|
|
9
|
+
- [x] Unit tests: `_resolve_gpu_pref` forms; `_match_capture_gpu` pref precedence + no-match fallback warning; `start_daemon` argv; CLI passthrough + `--connect` warning
|
|
10
|
+
- [x] Update existing fakes broken by new signature/attr (`test_remote_replay_passes_sd` spy, sigterm-handler `mock_args`)
|
|
11
|
+
- [x] `pixi run check` green (lint + typecheck + tests)
|
|
12
|
+
- [ ] Fresh review of the diff
|
|
13
|
+
- [ ] Open PR targeting `master`
|
|
14
|
+
- [ ] Archive this OpenSpec folder after merge
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Test Plan: `--gpu` override for `rdc open`
|
|
2
|
+
|
|
3
|
+
## Unit (mocked — no GPU required)
|
|
4
|
+
|
|
5
|
+
`tests/unit/test_daemon_server_unit.py` (`TestMatchCaptureGpu`):
|
|
6
|
+
|
|
7
|
+
1. **Index** — `pref="1"` returns the second GPU.
|
|
8
|
+
2. **Name substring** — `pref="7800 xt"` matches case-insensitively.
|
|
9
|
+
3. **Device ID** — `pref="29822"` (decimal) and `pref="0x747e"` (hex) both match
|
|
10
|
+
`deviceID==29822`.
|
|
11
|
+
4. **Precedence** — with a Vulkan `deviceName` chunk that would auto-match GPU B,
|
|
12
|
+
`pref="AMD"` still selects GPU A.
|
|
13
|
+
5. **No match** — `pref="Matrox"` logs a `--gpu` warning and falls back to the
|
|
14
|
+
vendor-priority auto-selection.
|
|
15
|
+
6. **`_resolve_gpu_pref`** — index / name / hex resolve; unknown and empty → None.
|
|
16
|
+
|
|
17
|
+
`tests/unit/test_session_service.py`:
|
|
18
|
+
|
|
19
|
+
7. `start_daemon(gpu="1")` puts `--gpu 1` in the daemon argv; default omits `--gpu`.
|
|
20
|
+
|
|
21
|
+
`tests/unit/test_session_commands.py`:
|
|
22
|
+
|
|
23
|
+
8. `rdc open CAP --gpu 1` forwards `gpu="1"` to `start_daemon`.
|
|
24
|
+
9. `rdc open --connect host:port --token T --gpu 1` prints
|
|
25
|
+
`warning: --gpu is ignored with --connect`.
|
|
26
|
+
|
|
27
|
+
Run: `pixi run test` (unit only; no GPU/e2e). Full gate: `pixi run check`.
|
|
28
|
+
|
|
29
|
+
## Manual (requires a multi-GPU host + renderdoc)
|
|
30
|
+
|
|
31
|
+
- `rdc open frame.rdc --gpu <discrete-name>` then `rdc status` / a replay query;
|
|
32
|
+
daemon log shows `replay GPU (user --gpu=...)`.
|
|
33
|
+
- `rdc open frame.rdc --gpu nonsense` logs the no-match warning and still opens
|
|
34
|
+
via auto-selection.
|
|
35
|
+
|
|
36
|
+
(Not run in CI: needs real hardware; out of scope for the unit suite.)
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Fix #225: D3D12 Multi-GPU Capture Replay
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Fix `_match_capture_gpu()` incorrectly returning the integrated GPU on multi-GPU
|
|
6
|
+
systems when replaying D3D12 captures, causing an `E_INVALIDARG` heap failure on
|
|
7
|
+
devices with insufficient VRAM.
|
|
8
|
+
|
|
9
|
+
## Motivation
|
|
10
|
+
|
|
11
|
+
`_match_capture_gpu()` only matches GPUs via the Vulkan `vkEnumeratePhysicalDevices`
|
|
12
|
+
structured-data chunk. For D3D12 captures that chunk is absent, so the function
|
|
13
|
+
falls through to `return gpus[0]`. On reporter's machine the GPU enumeration order
|
|
14
|
+
was: AMD Radeon Graphics iGPU 2 GB, NVIDIA RTX 4500 Ada 24 GB, WARP. The iGPU was
|
|
15
|
+
selected, D3D12 heap creation required more VRAM than available, and renderdoc
|
|
16
|
+
returned `E_INVALIDARG`.
|
|
17
|
+
|
|
18
|
+
The same fall-through also affects the remote-replay call site at line 368, which
|
|
19
|
+
additionally never passes `sd` to the helper, so even the Vulkan path was silently
|
|
20
|
+
bypassed on every remote replay.
|
|
21
|
+
|
|
22
|
+
## Design
|
|
23
|
+
|
|
24
|
+
### 1. D3D12 structured-data matching
|
|
25
|
+
|
|
26
|
+
Walk the capture's structured data looking for chunks whose name contains
|
|
27
|
+
`DriverInit`, `EnumAdapters`, or `CreateDXGIFactory`. Inside each matching chunk
|
|
28
|
+
descend into child objects to find a child named `AdapterDesc` and within it a
|
|
29
|
+
string field named `Description` or `DeviceName`. Perform a case-insensitive
|
|
30
|
+
substring match of that string against `gpu.name`. Return the first GPU that
|
|
31
|
+
matches.
|
|
32
|
+
|
|
33
|
+
### 2. Vendor-preference fallback
|
|
34
|
+
|
|
35
|
+
When no structured-data chunk produces a match, filter out Software/WARP adapters
|
|
36
|
+
(`renderdoc.GPUVendor.Software`), then rank remaining GPUs by vendor:
|
|
37
|
+
nVidia > AMD > Intel. Return the highest-ranked GPU, or the first non-Software GPU
|
|
38
|
+
if no ranked match exists.
|
|
39
|
+
|
|
40
|
+
### 3. Single-GPU short-circuit
|
|
41
|
+
|
|
42
|
+
If `len(gpus) == 1` return that GPU immediately without inspecting structured data.
|
|
43
|
+
|
|
44
|
+
### 4. Signature and call-site corrections
|
|
45
|
+
|
|
46
|
+
Pass `rd` (the renderdoc module) into `_match_capture_gpu()` so that
|
|
47
|
+
`GPUVendor` enum values are accessible without a module-level import assumption.
|
|
48
|
+
Update the remote-replay call site (line 368) to pass `sd` in addition to `rd`,
|
|
49
|
+
matching the local-replay call site.
|
|
50
|
+
|
|
51
|
+
## Spec Delta
|
|
52
|
+
|
|
53
|
+
A new scenario "Multi-GPU capture replay" should be appended under the existing
|
|
54
|
+
**Requirement: Replay lifecycle** section in `openspec/specs/daemon/spec.md`:
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
#### Scenario: Multi-GPU capture replay
|
|
58
|
+
- WHEN the capture was taken on a multi-GPU system
|
|
59
|
+
- AND multiple GPUs are available for replay
|
|
60
|
+
- THEN the daemon selects the GPU whose name matches structured-data adapter
|
|
61
|
+
metadata extracted from the capture
|
|
62
|
+
- AND if no structured-data match exists, Software/WARP adapters are excluded
|
|
63
|
+
and the highest-ranked discrete GPU is preferred (nVidia > AMD > Intel)
|
|
64
|
+
- AND a single available GPU is always returned directly without inspection
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
This proposal targets that scenario. The spec file itself is not modified here;
|
|
68
|
+
the delta is applied in the implementing task (see `tasks.md`).
|
|
69
|
+
|
|
70
|
+
## Files Changed
|
|
71
|
+
|
|
72
|
+
- `src/rdc/daemon_server.py` — `_match_capture_gpu` body; call sites at lines 223
|
|
73
|
+
and 368
|
|
74
|
+
- `tests/unit/test_daemon_server_unit.py` — new unit tests (see `test-plan.md`)
|
|
75
|
+
|
|
76
|
+
## Risks
|
|
77
|
+
|
|
78
|
+
- The exact D3D12 chunk name (`DriverInit` / `EnumAdapters` / `CreateDXGIFactory`)
|
|
79
|
+
has not been confirmed against a real renderdoc 1.42 D3D12 capture. The matching
|
|
80
|
+
uses substring search rather than exact equality as a defensive measure; a real
|
|
81
|
+
capture should be obtained from the issue reporter for verification before merge.
|
|
82
|
+
- `renderdoc.GPUVendor.nVidia` uses a lower-case `n`. Attribute access should use
|
|
83
|
+
`getattr(rd.GPUVendor, "nVidia", 4)` with an integer fallback to avoid
|
|
84
|
+
`AttributeError` on builds where the spelling differs.
|
|
85
|
+
- The Vulkan low-VRAM edge case (structured-data match returns a GPU that has less
|
|
86
|
+
VRAM than required) is not addressed here; the fix only corrects selection
|
|
87
|
+
behaviour and does not validate VRAM sufficiency.
|
|
88
|
+
- Integration testing on Linux is not possible without Windows D3D12 multi-GPU
|
|
89
|
+
hardware. The unit tests use mocks. Full verification must be performed by the
|
|
90
|
+
issue reporter on their machine.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Fix #225: Tasks
|
|
2
|
+
|
|
3
|
+
- [ ] `daemon_server.py`: add D3D12 structured-data matching to `_match_capture_gpu` (walk `DriverInit`/`EnumAdapters`/`CreateDXGIFactory` chunks, match `AdapterDesc.Description`/`DeviceName` against `gpu.name`)
|
|
4
|
+
- [ ] `daemon_server.py`: add vendor-preference fallback (drop Software/WARP, prefer nVidia > AMD > Intel via `getattr` on `rd.GPUVendor`)
|
|
5
|
+
- [ ] `daemon_server.py`: add single-GPU short-circuit at top of `_match_capture_gpu`
|
|
6
|
+
- [ ] `daemon_server.py`: add `rd` parameter to `_match_capture_gpu` signature; update both call sites (lines 223 and 368)
|
|
7
|
+
- [ ] `daemon_server.py`: pass `sd` at the remote-replay call site (line 368)
|
|
8
|
+
- [ ] `openspec/specs/daemon/spec.md`: append "Multi-GPU capture replay" scenario under **Requirement: Replay lifecycle**
|
|
9
|
+
- [ ] `tests/unit/test_daemon_server_unit.py`: implement all 8 unit test cases from `test-plan.md`
|
|
10
|
+
- [ ] `pixi run lint && pixi run test` passes
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Fix #225: Test Plan
|
|
2
|
+
|
|
3
|
+
## Unit tests — `tests/unit/test_daemon_server_unit.py`
|
|
4
|
+
|
|
5
|
+
- [ ] `test_single_gpu_returns_it` — given `len(gpus) == 1` with any `sd` value
|
|
6
|
+
(including `None`), assert that GPU is returned without inspecting structured data
|
|
7
|
+
|
|
8
|
+
- [ ] `test_vulkan_match_by_devicename` — regression guard for the existing Vulkan
|
|
9
|
+
path; mock structured data containing a `vkEnumeratePhysicalDevices` chunk with a
|
|
10
|
+
`DeviceName` field matching one of two GPU names; assert the matching GPU is
|
|
11
|
+
returned
|
|
12
|
+
|
|
13
|
+
- [ ] `test_d3d12_match_via_driverinit_adapterdesc` — mock structured data with a
|
|
14
|
+
`DriverInit` chunk whose `AdapterDesc` child has a `Description` field matching
|
|
15
|
+
one GPU among three (iGPU, discrete, WARP); assert the discrete GPU is returned
|
|
16
|
+
|
|
17
|
+
- [ ] `test_d3d12_fallback_skips_warp_prefers_nvidia` — no structured-data match;
|
|
18
|
+
three GPUs with vendors Software (WARP), AMD (iGPU), nVidia (discrete); assert
|
|
19
|
+
the nVidia GPU is returned
|
|
20
|
+
|
|
21
|
+
- [ ] `test_d3d12_fallback_amd_over_intel` — no structured-data match; vendors
|
|
22
|
+
[Intel, AMD, Software]; assert the AMD GPU is returned
|
|
23
|
+
|
|
24
|
+
- [ ] `test_no_structured_data_uses_fallback_not_gpu0` — `sd=None`; two GPUs in
|
|
25
|
+
order [AMD iGPU, NVIDIA discrete]; assert NVIDIA is returned, reproducing the
|
|
26
|
+
literal issue #225 scenario (iGPU was previously returned as `gpus[0]`)
|
|
27
|
+
|
|
28
|
+
- [ ] `test_empty_gpu_list_returns_none` — `gpus=[]`; assert return value is `None`
|
|
29
|
+
(no exception raised)
|
|
30
|
+
|
|
31
|
+
- [ ] `test_remote_replay_passes_sd` — mock the `_match_capture_gpu` call site at
|
|
32
|
+
the remote-replay path (line 368); assert it is invoked with a non-`None` `sd`
|
|
33
|
+
argument when structured data is available
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# OpenSpec: issue-224-cbuffer-export
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Expose `rdc cbuffer` as a first-class CLI command with decoded JSON output and optional
|
|
6
|
+
raw binary export (`--raw`).
|
|
7
|
+
|
|
8
|
+
## Context and Motivation
|
|
9
|
+
|
|
10
|
+
OpenSpec phase2-buffer-decode (archived 2026-02-19) originally planned three CLI commands:
|
|
11
|
+
`rdc cbuffer`, `rdc vbuffer`, and `rdc ibuffer`. The daemon handler `cbuffer_decode` and its
|
|
12
|
+
VFS route shipped in that phase. The CLI half — `rdc cbuffer` — was never implemented.
|
|
13
|
+
This change completes that unshipped work.
|
|
14
|
+
|
|
15
|
+
GitHub issue #224 (part 2) tracks the gap. Users who rely on `rdc buffer --raw` for raw bytes
|
|
16
|
+
have no ergonomic path to decoded constant-buffer variables without constructing VFS paths
|
|
17
|
+
manually.
|
|
18
|
+
|
|
19
|
+
**Scope note:** The archived phase2-buffer-decode plan envisioned `rdc cbuffer` as a thin VFS
|
|
20
|
+
`cat` wrapper; this change implements a richer direct command with decoded JSON output, a new
|
|
21
|
+
`cbuffer_raw` handler, and a new VFS `leaf_bin` route — reviewers should not expect a pure VFS
|
|
22
|
+
wrapper.
|
|
23
|
+
|
|
24
|
+
## Design
|
|
25
|
+
|
|
26
|
+
### New command: `rdc cbuffer`
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
rdc cbuffer [EID] --stage [vs|hs|ds|gs|ps|cs] --set N --binding N [--json] [--raw -o file.bin]
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
- `EID`: optional; resolved via `complete_eid` if omitted (matches existing `rdc buffer` pattern).
|
|
33
|
+
- `--stage`: default `ps`.
|
|
34
|
+
- `--set`: default `0`.
|
|
35
|
+
- `--binding`: default `0`.
|
|
36
|
+
- `--json`: emit decoded variables as JSON (default output mode).
|
|
37
|
+
- `--raw -o file.bin`: export the raw constant-buffer bytes to a file.
|
|
38
|
+
|
|
39
|
+
### Decoded path
|
|
40
|
+
|
|
41
|
+
Calls the existing `cbuffer_decode` daemon handler unchanged. Returns
|
|
42
|
+
`{"eid", "set", "binding", "variables": [{name, type, value}, ...]}` and writes it via
|
|
43
|
+
`write_json`. No daemon changes required for this path.
|
|
44
|
+
|
|
45
|
+
### Raw path
|
|
46
|
+
|
|
47
|
+
Adds a new `cbuffer_raw` daemon handler in `handlers/buffer.py`. The handler repeats the
|
|
48
|
+
reflection lookup (`fixedBindSetOrSpace` / `fixedBindNumber`), obtains
|
|
49
|
+
`GetConstantBlock(...).descriptor`, calls `controller.GetBufferData(resource, byteOffset,
|
|
50
|
+
byteSize)`, writes the bytes to `state.temp_dir/cbuffer_<eid>_<set>_<binding>.bin`, and
|
|
51
|
+
returns `{"path", "size"}`.
|
|
52
|
+
|
|
53
|
+
The handler is exposed as a VFS `leaf_bin` route at
|
|
54
|
+
`/draws/<eid>/cbuffer/<set>/<binding>/data` in `vfs/router.py`, mirroring the way `buf_raw`
|
|
55
|
+
is wired at `/buffers/<id>/data`. The CLI calls
|
|
56
|
+
`_export_vfs_path(f"/draws/{eid}/cbuffer/{set}/{binding}/data", output, raw)` (from
|
|
57
|
+
`commands/export.py`), which follows the same `vfs_ls` + `resolve_path` → `_deliver_binary`
|
|
58
|
+
flow used by `rdc buffer --raw`. `_deliver_binary` (vfs.py:216) is the final delivery
|
|
59
|
+
step — it calls `call(match.handler, match.args)` through the VFS resolve layer; it is NOT
|
|
60
|
+
a standalone "call handler, get path, write bytes" helper invoked directly.
|
|
61
|
+
|
|
62
|
+
The `hasattr(pipe_state, "GetConstantBlock")` guard present in `cbuffer_decode` is preserved
|
|
63
|
+
in `cbuffer_raw` for RenderDoc version drift safety.
|
|
64
|
+
|
|
65
|
+
### New source file
|
|
66
|
+
|
|
67
|
+
`src/rdc/commands/cbuffer.py` — registered in `src/rdc/cli.py` adjacent to `buffer_cmd`
|
|
68
|
+
(~line 138).
|
|
69
|
+
|
|
70
|
+
## Risks
|
|
71
|
+
|
|
72
|
+
### Non-buffer-backed constant buffers
|
|
73
|
+
|
|
74
|
+
`ConstantBlock.bufferBacked == False` for push constants (Vulkan) and D3D12 root constants.
|
|
75
|
+
These have no backing buffer resource; `GetBufferData` would operate on a null resource.
|
|
76
|
+
|
|
77
|
+
Defined behavior: `--raw` MUST return a JSON-RPC error with a descriptive message
|
|
78
|
+
(e.g. `"cbuffer is not buffer-backed (push constant or root constant)"`) rather than crash
|
|
79
|
+
or silently return zero bytes. Decoded `--json` output is unaffected and continues to work
|
|
80
|
+
via `GetCBufferVariableContents`.
|
|
81
|
+
|
|
82
|
+
### D3D12 root constants / register spaces
|
|
83
|
+
|
|
84
|
+
The `fixedBindSetOrSpace` / `fixedBindNumber` mapping for D3D12 root constants cannot be
|
|
85
|
+
verified on this Linux development machine. The Vulkan (vkcube) integration test exercises
|
|
86
|
+
the buffer-backed path only. Behavior on D3D12 root-constant captures is verified by
|
|
87
|
+
reporter @Misaka-Mikoto-Tech on real D3D12 hardware after the PR ships.
|
|
88
|
+
|
|
89
|
+
### `_extract_value` type coverage (optional improvement)
|
|
90
|
+
|
|
91
|
+
The existing `_extract_value` helper (`buffer.py:163-173`) handles only `f32v` members;
|
|
92
|
+
integer and unsigned-integer shader variables degrade silently. `_flatten_shader_var`
|
|
93
|
+
in `handlers/_helpers.py` already handles `u32v`/`s32v` and is used by `shader_constants`.
|
|
94
|
+
Switching `cbuffer_decode` to use `_flatten_shader_var` is an optional polish step; it does
|
|
95
|
+
not block this change but is tracked as a separate optional task.
|
rdc_cli-0.5.6/openspec/changes/archive/2026-05-15-issue-224-cbuffer-export/specs/daemon/spec.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
## ADDED Requirements
|
|
2
|
+
|
|
3
|
+
### Requirement: Constant Buffer Raw Export
|
|
4
|
+
The daemon SHALL expose a handler to export raw constant-buffer bytes to a temporary file.
|
|
5
|
+
|
|
6
|
+
#### Scenario: Export buffer-backed constant buffer
|
|
7
|
+
- **WHEN** client requests `cbuffer_raw` with `eid`, `set`, `binding`, and `stage`
|
|
8
|
+
- **THEN** daemon resolves the constant block via `fixedBindSetOrSpace` / `fixedBindNumber`,
|
|
9
|
+
calls `GetBufferData(resource, byteOffset, byteSize)`, writes bytes to
|
|
10
|
+
`state.temp_dir/cbuffer_<eid>_<set>_<binding>.bin`, and returns `{"path", "size"}`.
|
|
11
|
+
- **IF** `state.adapter` is None, return error -32002.
|
|
12
|
+
- **IF** `eid` is not a valid draw event, return error.
|
|
13
|
+
|
|
14
|
+
#### Scenario: Reject non-buffer-backed constant buffer
|
|
15
|
+
- **WHEN** client requests `cbuffer_raw` and `ConstantBlock.bufferBacked == False`
|
|
16
|
+
- **THEN** daemon returns a JSON-RPC error with a message indicating the cbuffer is not
|
|
17
|
+
buffer-backed (push constant or root constant) and does not write any file.
|
|
18
|
+
|
|
19
|
+
#### Scenario: RenderDoc version guard
|
|
20
|
+
- **WHEN** `GetConstantBlock` is not present on the pipeline state object
|
|
21
|
+
- **THEN** daemon returns an error indicating the API is unavailable on this RenderDoc version.
|
|
22
|
+
|
|
23
|
+
### Requirement: Constant Buffer CLI Command
|
|
24
|
+
The CLI SHALL expose `rdc cbuffer` as a first-class command for decoded and raw export.
|
|
25
|
+
|
|
26
|
+
#### Scenario: Decoded JSON output
|
|
27
|
+
- **WHEN** user runs `rdc cbuffer [EID] --stage STAGE --set N --binding N`
|
|
28
|
+
- **THEN** CLI calls `cbuffer_decode` handler and writes the JSON response to stdout.
|
|
29
|
+
- **IF** `EID` is omitted, CLI resolves it via `complete_eid`.
|
|
30
|
+
|
|
31
|
+
#### Scenario: Raw binary export
|
|
32
|
+
- **WHEN** user runs `rdc cbuffer [EID] --raw -o FILE`
|
|
33
|
+
- **THEN** CLI resolves the VFS path `/draws/<eid>/cbuffer/<set>/<binding>/data` via
|
|
34
|
+
`_export_vfs_path` (vfs_ls + resolve_path → _deliver_binary), exactly mirroring how
|
|
35
|
+
`rdc buffer --raw` uses `/buffers/<id>/data`, and writes bytes to `FILE`.
|
|
36
|
+
- **IF** `-o` is not specified alongside `--raw`, CLI exits with a usage error.
|
|
37
|
+
|
|
38
|
+
#### Scenario: No active session
|
|
39
|
+
- **WHEN** user runs `rdc cbuffer` and no daemon session is active
|
|
40
|
+
- **THEN** CLI exits with code 1 and prints an error message to stderr.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Tasks: issue-224-cbuffer-export
|
|
2
|
+
|
|
3
|
+
## Phase A: Mock API additions
|
|
4
|
+
|
|
5
|
+
- [ ] Add `GetBufferData` stub to `mock_renderdoc.py` (anchor: ~line 1356 `GetConstantBlock`).
|
|
6
|
+
The happy-path test must give the mock `Descriptor` (returned via
|
|
7
|
+
`GetConstantBlock(...).descriptor`) a non-null `resource`, `byteOffset`, and `byteSize` —
|
|
8
|
+
these are the fields the raw-path handler keys off (`buffer.py:143-147`).
|
|
9
|
+
- [ ] Add `bufferBacked=False` variant to the mock `ConstantBlock` for the push-constant
|
|
10
|
+
clean-error test; this stubs the reflection-level field used to reject non-buffer-backed
|
|
11
|
+
cbuffers before `GetBufferData` is called.
|
|
12
|
+
|
|
13
|
+
## Phase B: `cbuffer_raw` daemon handler (tests first)
|
|
14
|
+
|
|
15
|
+
- [ ] Extend `tests/unit/test_buffer_decode.py` with `cbuffer_raw` cases (happy path,
|
|
16
|
+
`bufferBacked=False` error, no-adapter guard)
|
|
17
|
+
- [ ] Implement `cbuffer_raw` handler in `src/rdc/handlers/buffer.py` (~line 370,
|
|
18
|
+
adjacent to `HANDLERS` dict)
|
|
19
|
+
- [ ] Register `cbuffer_raw` in `HANDLERS`
|
|
20
|
+
- [ ] Add VFS `leaf_bin` route for `/draws/<eid>/cbuffer/<set>/<binding>/data` →
|
|
21
|
+
`cbuffer_raw` in `src/rdc/vfs/router.py`, mirroring
|
|
22
|
+
`/buffers/<id>/data` → `buf_raw` (router.py:184)
|
|
23
|
+
- [ ] Verify handler unit tests pass
|
|
24
|
+
|
|
25
|
+
## Phase C: `rdc cbuffer` CLI command (tests first)
|
|
26
|
+
|
|
27
|
+
- [ ] Write `tests/unit/test_cbuffer_commands.py` (JSON mode, `--raw -o`, no-session error,
|
|
28
|
+
`complete_eid` fallback, `--raw` without `-o` usage error)
|
|
29
|
+
- [ ] Implement `src/rdc/commands/cbuffer.py`; raw path calls
|
|
30
|
+
`_export_vfs_path(f"/draws/{eid}/cbuffer/{set}/{binding}/data", output, raw)` from
|
|
31
|
+
`commands/export.py` — no direct handler dispatch
|
|
32
|
+
- [ ] Register `cbuffer_cmd` in `src/rdc/cli.py` (~line 138, adjacent to `buffer_cmd`)
|
|
33
|
+
- [ ] Verify CLI unit tests pass
|
|
34
|
+
|
|
35
|
+
## Phase D: Integration + verification
|
|
36
|
+
|
|
37
|
+
- [ ] Extend `tests/integration/test_daemon_handlers_real.py` with `@pytest.mark.gpu`
|
|
38
|
+
tests for `cbuffer_raw` (Vulkan vkcube capture)
|
|
39
|
+
- [ ] Run `pixi run lint && pixi run test` — all pass, coverage ≥ 80% for new paths
|
|
40
|
+
- [ ] Run GPU integration tests against real capture — pass
|
|
41
|
+
- [ ] Code review
|
|
42
|
+
|
|
43
|
+
## Phase E: Optional polish (non-blocking)
|
|
44
|
+
|
|
45
|
+
- [ ] Switch `cbuffer_decode` to use `_flatten_shader_var` from `handlers/_helpers.py`
|
|
46
|
+
instead of `_extract_value` to fix int/uint member degradation
|
|
47
|
+
- [ ] Extend `test_buffer_decode.py` with int/uint value assertions
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Test Plan: issue-224-cbuffer-export
|
|
2
|
+
|
|
3
|
+
## Scope
|
|
4
|
+
|
|
5
|
+
### In scope
|
|
6
|
+
- New daemon handler `cbuffer_raw` (unit + integration)
|
|
7
|
+
- New CLI command `rdc cbuffer` (unit: JSON mode, raw mode, error paths)
|
|
8
|
+
- `bufferBacked == False` error path for `cbuffer_raw`
|
|
9
|
+
- Optional: `_extract_value` int/uint coverage in `test_buffer_decode.py`
|
|
10
|
+
|
|
11
|
+
### Out of scope
|
|
12
|
+
- Existing `cbuffer_decode` handler correctness (covered by prior test suite)
|
|
13
|
+
- `rdc vbuffer` / `rdc ibuffer` (separate issue)
|
|
14
|
+
- D3D12 root-constant register-space mapping (cannot run on this Linux box; deferred to reporter verification)
|
|
15
|
+
|
|
16
|
+
## Test Matrix
|
|
17
|
+
|
|
18
|
+
| Layer | Test Type | File |
|
|
19
|
+
|-------|-----------|------|
|
|
20
|
+
| Unit | `cbuffer_raw` handler (mock) | `tests/unit/test_buffer_decode.py` (extend) |
|
|
21
|
+
| Unit | `rdc cbuffer` CLI command | `tests/unit/test_cbuffer_commands.py` (new) |
|
|
22
|
+
| Integration | real capture decoded + raw | `tests/integration/test_daemon_handlers_real.py` (extend) |
|
|
23
|
+
|
|
24
|
+
## Cases
|
|
25
|
+
|
|
26
|
+
### `cbuffer_raw` handler (extend `test_buffer_decode.py`)
|
|
27
|
+
|
|
28
|
+
- **Happy path**: mock `GetConstantBlock` returns a buffer-backed descriptor (`bufferBacked=True`,
|
|
29
|
+
known `byteOffset`/`byteSize`); mock `GetBufferData` returns 16 known bytes.
|
|
30
|
+
Assert response contains `{"path": "...", "size": 16}` and the temp file exists with the
|
|
31
|
+
expected bytes.
|
|
32
|
+
- **bufferBacked=False**: mock `GetConstantBlock` returns `bufferBacked=False`.
|
|
33
|
+
Assert the handler returns a JSON-RPC error (code -32602 or equivalent) with a message
|
|
34
|
+
containing `"not buffer-backed"`. Assert no temp file is created.
|
|
35
|
+
- **No adapter**: `state.adapter is None` → assert error -32002 (standard no-adapter guard).
|
|
36
|
+
- **Missing eid**: invalid `eid` → assert error from `SetFrameEvent`.
|
|
37
|
+
|
|
38
|
+
Mock anchor: `mock_renderdoc.py` `GetConstantBlock` (~line 1356), `GetBufferData`.
|
|
39
|
+
|
|
40
|
+
### `rdc cbuffer` CLI command (new `test_cbuffer_commands.py`)
|
|
41
|
+
|
|
42
|
+
Mirror structure of `tests/unit/test_mesh_commands.py` (monkeypatch `rdc.commands.cbuffer.call`).
|
|
43
|
+
|
|
44
|
+
- **JSON mode (default)**: monkeypatch `call("cbuffer_decode", ...)` returns
|
|
45
|
+
`{"eid": 10, "set": 0, "binding": 0, "variables": [{"name": "mvp", "type": "mat4", "value": [...]}]}`.
|
|
46
|
+
Invoke `rdc cbuffer 10 --stage ps --set 0 --binding 0`.
|
|
47
|
+
Assert exit code 0, stdout is valid JSON matching the payload.
|
|
48
|
+
- **`--json` explicit flag**: same as above with `--json` flag; assert identical output.
|
|
49
|
+
- **`--raw -o file.bin`**: monkeypatch `call("cbuffer_raw", ...)` returns `{"path": "/tmp/cbuffer_10_0_0.bin", "size": 16}`;
|
|
50
|
+
monkeypatch binary delivery (`_deliver_binary` / `fetch_remote_file`).
|
|
51
|
+
Assert exit code 0, output file contains the expected bytes.
|
|
52
|
+
- **No session**: `call` raises connection error → assert exit code 1, message on stderr.
|
|
53
|
+
- **`--raw` without `-o`**: assert exit code non-zero with usage error on stderr.
|
|
54
|
+
- **EID omitted**: monkeypatch `complete_eid` returns `42`; assert the handler is called with `eid=42`.
|
|
55
|
+
|
|
56
|
+
### Integration (`test_daemon_handlers_real.py`, `@pytest.mark.gpu`)
|
|
57
|
+
|
|
58
|
+
Extend analogous to `test_cbuffer_decode_returns_data` (~line 1965), using a vkcube/Vulkan
|
|
59
|
+
capture with a known draw EID that has a buffer-backed cbuffer.
|
|
60
|
+
|
|
61
|
+
- **`cbuffer_raw` returns file**: call `cbuffer_raw` with valid `eid`/`set`/`binding`.
|
|
62
|
+
Assert response contains `path` and `size > 0`; assert temp file exists and `size` matches
|
|
63
|
+
`os.path.getsize(path)`.
|
|
64
|
+
- **`cbuffer_decode` + `cbuffer_raw` size agreement**: decoded `variables` total byte footprint
|
|
65
|
+
is consistent with the raw `size`.
|
|
66
|
+
|
|
67
|
+
## Assertions (all tests)
|
|
68
|
+
|
|
69
|
+
- Exit code 0 on success, non-zero on error.
|
|
70
|
+
- JSON output: valid JSON, `variables` array present for decoded mode.
|
|
71
|
+
- Raw output: file written at `-o` path, byte count matches `size` from handler.
|
|
72
|
+
- Error messages go to stderr; stdout is empty on error.
|
|
73
|
+
- `bufferBacked=False` produces an error message containing `"not buffer-backed"` (case-insensitive).
|
|
74
|
+
|
|
75
|
+
## Coverage Gate
|
|
76
|
+
|
|
77
|
+
CI enforces ≥ 80% line coverage for `src/rdc/commands/cbuffer.py` and the new
|
|
78
|
+
`cbuffer_raw` code path in `src/rdc/handlers/buffer.py`.
|