rdc-cli 0.3.3__tar.gz → 0.3.4__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.3.3 → rdc_cli-0.3.4}/.github/workflows/ci.yml +3 -2
- {rdc_cli-0.3.3/src/rdc_cli.egg-info → rdc_cli-0.3.4}/PKG-INFO +12 -3
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/README.md +10 -1
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/data/commands.json +26 -1
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/layouts/Docs.astro +1 -0
- rdc_cli-0.3.4/docs-astro/src/pages/docs/install/windows.astro +105 -0
- rdc_cli-0.3.4/openspec/changes/2026-02-23-phase-w2-build-script/proposal.md +173 -0
- rdc_cli-0.3.4/openspec/changes/2026-02-23-phase-w2-build-script/tasks.md +90 -0
- rdc_cli-0.3.4/openspec/changes/2026-02-23-phase-w2-build-script/test-plan.md +116 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-22-ai-agent-skill/proposal.md +114 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-22-ai-agent-skill/tasks.md +168 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-22-ai-agent-skill/test-plan.md +219 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-22-fix-json-error-and-search-preload/proposal.md +281 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-22-fix-json-error-and-search-preload/tasks.md +349 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-22-fix-json-error-and-search-preload/test-plan.md +361 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-22-renderdoc-build-helper/proposal.md +97 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-22-renderdoc-build-helper/tasks.md +135 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-22-renderdoc-build-helper/test-plan.md +95 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-b17-eid-mutation/proposal.md +214 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-b17-eid-mutation/tasks.md +186 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-b17-eid-mutation/test-plan.md +104 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-b18-b19-b24-cli-ux/proposal.md +202 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-b18-b19-b24-cli-ux/tasks.md +130 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-b18-b19-b24-cli-ux/test-plan.md +139 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-b21-b22-b23-b25-daemon-lifecycle/proposal.md +161 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-b21-b22-b23-b25-daemon-lifecycle/tasks.md +157 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-b21-b22-b23-b25-daemon-lifecycle/test-plan.md +122 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-capture-process-leak-b26-b28/proposal.md +155 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-capture-process-leak-b26-b28/tasks.md +71 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-capture-process-leak-b26-b28/test-plan.md +303 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-phase5b-capture-unified/proposal.md +208 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-phase5b-capture-unified/tasks.md +405 -0
- rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-phase5b-capture-unified/test-plan.md +288 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/pixi.toml +1 -1
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/pyproject.toml +1 -1
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/build-renderdoc.sh +2 -0
- rdc_cli-0.3.4/scripts/build_renderdoc.py +295 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/gen-commands.py +5 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/setup-renderdoc.sh +2 -0
- rdc_cli-0.3.4/src/rdc/_platform.py +152 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/_skills/references/commands-quick-ref.md +55 -1
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/capture_core.py +19 -12
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/cli.py +2 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/_helpers.py +11 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/capture.py +9 -7
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/capture_control.py +5 -1
- rdc_cli-0.3.4/src/rdc/commands/doctor.py +240 -0
- rdc_cli-0.3.4/src/rdc/commands/remote.py +218 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/search.py +2 -2
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/session.py +2 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/daemon_server.py +6 -3
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/discover.py +6 -6
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/_helpers.py +56 -2
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/buffer.py +2 -1
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/pipe_state.py +37 -7
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/query.py +7 -2
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/shader.py +5 -41
- rdc_cli-0.3.4/src/rdc/remote_core.py +188 -0
- rdc_cli-0.3.4/src/rdc/remote_state.py +79 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/services/diff_service.py +2 -6
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/services/session_service.py +17 -8
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/session_state.py +6 -24
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/target_state.py +6 -9
- {rdc_cli-0.3.3 → rdc_cli-0.3.4/src/rdc_cli.egg-info}/PKG-INFO +12 -3
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc_cli.egg-info/SOURCES.txt +57 -21
- rdc_cli-0.3.4/tests/integration/test_build_renderdoc_integration.py +14 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/mocks/mock_renderdoc.py +7 -3
- rdc_cli-0.3.4/tests/unit/test_build_renderdoc.py +505 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_capture.py +87 -3
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_capture_control.py +43 -1
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_capture_core.py +34 -6
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_cli_session_flag.py +1 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_daemon_pipeline_extended.py +83 -29
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_daemon_server_unit.py +39 -1
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_diff_framebuffer.py +1 -1
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_diff_service.py +15 -12
- rdc_cli-0.3.4/tests/unit/test_doctor.py +325 -0
- rdc_cli-0.3.4/tests/unit/test_platform.py +290 -0
- rdc_cli-0.3.4/tests/unit/test_remote_commands.py +427 -0
- rdc_cli-0.3.4/tests/unit/test_remote_core.py +416 -0
- rdc_cli-0.3.4/tests/unit/test_remote_state.py +89 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_search.py +7 -1
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_session_commands.py +43 -6
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_session_service.py +91 -4
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_session_state.py +15 -7
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_shader_preload.py +39 -2
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_target_state.py +1 -1
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_tooling_files.py +4 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/uv.lock +0 -1
- rdc_cli-0.3.3/openspec/changes/archive/2026-02-22-code-maintainability/proposal.md +0 -36
- rdc_cli-0.3.3/openspec/changes/archive/2026-02-22-code-maintainability/tasks.md +0 -55
- rdc_cli-0.3.3/openspec/changes/archive/2026-02-22-code-maintainability/test-plan.md +0 -42
- rdc_cli-0.3.3/src/rdc/commands/doctor.py +0 -97
- rdc_cli-0.3.3/tests/unit/test_doctor.py +0 -58
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.commitlintrc.yml +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.githooks/pre-commit +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.githooks/pre-push +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.github/CODEOWNERS +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.github/workflows/aur.yml +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.github/workflows/commitlint.yml +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.github/workflows/docs.yml +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.gitignore +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.python-version +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.release-please-manifest.json +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/LICENSE +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/Makefile +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/SECURITY.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/aur/PKGBUILD +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/aur/stable/PKGBUILD +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docker/Dockerfile +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs/cli-reference.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs/index.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs/install.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs/usage.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs/vfs.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/astro.config.mjs +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/package-lock.json +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/package.json +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/public/.nojekyll +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/public/favicon.svg +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/Commands.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/Demo.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/Features.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/Footer.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/Hero.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/Install.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/Navbar.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/Philosophy.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/Terminal.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/ThemeSwitcher.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/data/replay.json +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/data/stats.json +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/layouts/Base.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/pages/docs/ai-integration.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/pages/docs/commands.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/pages/docs/design.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/pages/docs/examples.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/pages/docs/index.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/pages/docs/install.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/pages/docs/usage.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/pages/docs/vfs.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/pages/index.astro +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/styles/global.css +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/tailwind.config.mjs +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/tapes/pipeline.tape +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/tapes/quickstart.tape +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/tests/validate.mjs +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/tsconfig.json +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/mkdocs.yml +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/mypy.ini +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-bootstrap-foundation/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-bootstrap-foundation/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-bootstrap-foundation/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-ci-hardening/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-ci-hardening/specs/ci/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-ci-hardening/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-ci-hardening/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-core-checks/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-core-checks/specs/foundation/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-core-checks/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-core-checks/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-daemon-protocol/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-daemon-protocol/specs/daemon/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-daemon-protocol/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-daemon-protocol/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-daemon-transport/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-daemon-transport/specs/daemon/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-daemon-transport/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-daemon-transport/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-fixtures-docker/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-fixtures-docker/specs/tooling/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-fixtures-docker/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-fixtures-docker/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-pixi-env/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-pixi-env/specs/tooling/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-pixi-env/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-pixi-env/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-session-skeleton/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-session-skeleton/specs/session/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-session-skeleton/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-session-skeleton/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-structure-refactor/design.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-structure-refactor/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-structure-refactor/specs/architecture/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-structure-refactor/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-structure-refactor/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-count-shadermap/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-count-shadermap/specs/daemon/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-count-shadermap/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-count-shadermap/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-daemon-replay/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-daemon-replay/specs/daemon/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-daemon-replay/specs/foundation/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-daemon-replay/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-daemon-replay/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-draws-events/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-draws-events/specs/daemon/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-draws-events/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-draws-events/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-log/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-log/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-log/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-pass-detail/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-pass-detail/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-pass-detail/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-resources-passes/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-resources-passes/specs/daemon/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-resources-passes/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-resources-passes/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-shader-extended/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-shader-extended/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-shader-extended/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1.5-vfs/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1.5-vfs/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1.5-vfs/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-api-fix/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-api-fix/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-api-fix/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-buffer-decode/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-buffer-decode/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-buffer-decode/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-pipeline-state/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-pipeline-state/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-pipeline-state/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-vfs-binary/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-vfs-binary/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-vfs-binary/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-counters/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-counters/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-counters/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-descriptors/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-descriptors/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-descriptors/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-search/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-search/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-search/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-usage/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-usage/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-usage/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.5-aur-pkgbuild/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.5-aur-pkgbuild/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.5-aur-pkgbuild/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.5-cli-enhancements/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.5-cli-enhancements/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.5-cli-enhancements/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.5-python-compat-ci/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.5-python-compat-ci/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.5-python-compat-ci/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.5-release-ci/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.5-release-ci/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.5-release-ci/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-daemon-crash/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-daemon-crash/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-daemon-crash/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-output-quality/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-output-quality/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-output-quality/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-pipeline-extended/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-pipeline-extended/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-pipeline-extended/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-shader-api/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-shader-api/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-shader-api/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-vfs-path-completion/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-vfs-path-completion/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-vfs-path-completion/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-fix-daemon-startup-timeout/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-fix-daemon-startup-timeout/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-fix-daemon-startup-timeout/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-fix-event-break-and-test-flaky/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-fix-event-break-and-test-flaky/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-fix-event-break-and-test-flaky/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-fix-pass-detection/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-fix-pass-detection/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-fix-pass-detection/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-fix-vfs-pass-consistency/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-fix-vfs-pass-consistency/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-fix-vfs-pass-consistency/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-phase2.7-bug-filters/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-phase2.7-bug-filters/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-phase2.7-bug-filters/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-phase2.7-refactor-structure/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-phase2.7-refactor-structure/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-phase2.7-refactor-structure/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-blackbox-bug-fixes/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-blackbox-bug-fixes/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-blackbox-bug-fixes/test-plan.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-22-bugfix-remaining-blackbox/proposal.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-22-bugfix-remaining-blackbox/tasks.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-22-bugfix-remaining-blackbox/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-ci-repo-hardening/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-ci-repo-hardening/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-ci-repo-hardening/test-plan.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-22-code-maintainability/proposal.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-22-code-maintainability/tasks.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-22-code-maintainability/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-consistent-output-options/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-consistent-output-options/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-consistent-output-options/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-design-deviation-diff-completeness/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-design-deviation-diff-completeness/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-design-deviation-diff-completeness/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-design-deviation-shader-api-fix/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-design-deviation-shader-api-fix/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-design-deviation-shader-api-fix/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-design-deviation-vfs-ls-long/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-design-deviation-vfs-ls-long/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-design-deviation-vfs-ls-long/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-draws/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-draws/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-draws/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-framebuffer/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-framebuffer/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-framebuffer/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-infrastructure/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-infrastructure/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-infrastructure/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-pipeline/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-pipeline/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-pipeline/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-resources/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-resources/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-resources/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-stats/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-stats/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-stats/test-plan.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-22-docs-automation/proposal.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-22-docs-automation/tasks.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-22-docs-automation/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-image-compare/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-image-compare/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-image-compare/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase3a-script/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase3a-script/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase3a-script/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase3c-ci-assertions/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase3c-ci-assertions/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase3c-ci-assertions/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase3c-snapshot/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase3c-snapshot/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase3c-snapshot/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4a-shader-debug/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4a-shader-debug/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4a-shader-debug/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4b-shader-edit-replay/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4b-shader-edit-replay/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4b-shader-edit-replay/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4c-mesh-export/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4c-mesh-export/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4c-mesh-export/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4c-overlay/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4c-overlay/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4c-overlay/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase5-debug-thread/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase5-debug-thread/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase5-debug-thread/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase5-pick-pixel/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase5-pick-pixel/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase5-pick-pixel/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase5-tex-stats/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase5-tex-stats/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase5-tex-stats/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-robustness-hardening/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-robustness-hardening/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-robustness-hardening/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-security-hardening-2/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-security-hardening-2/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-security-hardening-2/test-plan.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-22-skill-auto-install/proposal.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-22-skill-auto-install/tasks.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-22-skill-auto-install/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-worktree-isolation/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-worktree-isolation/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-worktree-isolation/test-plan.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-23-docs-polish/proposal.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-23-docs-polish/tasks.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-23-docs-polish/test-plan.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-23-fix-aur-build/proposal.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-23-fix-aur-build/tasks.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-23-fix-aur-build/test-plan.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-23-fix-bugs-b10-b15-b16/proposal.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-23-fix-bugs-b10-b15-b16/tasks.md +0 -0
- {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-23-fix-bugs-b10-b15-b16/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-23-test-gpu-coverage/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-23-test-gpu-coverage/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-23-test-gpu-coverage/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-23-test-mock-accuracy/proposal.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-23-test-mock-accuracy/tasks.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-23-test-mock-accuracy/test-plan.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/specs/architecture/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/specs/ci/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/specs/daemon/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/specs/foundation/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/specs/packaging/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/specs/session/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/specs/tooling/spec.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/pixi.lock +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/release-please-config.json +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/ruff.toml +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/capture_fixture.sh +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/e2e-test.sh +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/ensure-renderdoc.sh +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/gen-replay.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/gen-skill-ref.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/gen-stats.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/verify-package.sh +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/setup.cfg +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/__init__.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/_skills/SKILL.md +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/_skills/__init__.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/_transport.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/adapter.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/assert_ci.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/assert_image.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/capturefile.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/completion.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/counters.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/debug.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/diff.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/events.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/export.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/info.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/install_skill.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/mesh.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/pick_pixel.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/pipeline.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/pixel.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/resources.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/script.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/shader_edit.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/snapshot.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/tex_stats.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/unix_helpers.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/usage.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/vfs.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/daemon_client.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/diff/__init__.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/diff/alignment.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/diff/draws.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/diff/framebuffer.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/diff/pipeline.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/diff/resources.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/diff/stats.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/diff/summary.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/formatters/json_fmt.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/formatters/options.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/formatters/tsv.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/__init__.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/_types.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/capturefile.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/core.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/debug.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/descriptor.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/pixel.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/script.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/shader_edit.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/texture.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/vfs.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/image_compare.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/protocol.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/services/__init__.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/services/query_service.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/vfs/__init__.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/vfs/formatter.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/vfs/router.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/vfs/tree_cache.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc_cli.egg-info/dependency_links.txt +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc_cli.egg-info/entry_points.txt +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc_cli.egg-info/requires.txt +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc_cli.egg-info/top_level.txt +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/conftest.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/fixtures/hello_triangle.rdc +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/fixtures/vkcube.rdc +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/fixtures/vkcube_validation.rdc +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/integration/test_daemon_handlers_real.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/integration/test_mock_api_sync.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/integration/test_real_replay.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/integration/test_vulkan_samples.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_adapter.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_assert_ci_commands.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_assert_image_command.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_binary_daemon.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_buffer_decode.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_capturefile_commands.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_capturefile_handlers.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_ci_files.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_cli.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_completion.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_count_shadermap.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_counters_commands.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_counters_daemon.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_daemon_crash_regression.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_daemon_output_quality.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_daemon_shader_api_fix.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_daemon_shader_extended.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_daemon_transport.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_debug_commands.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_debug_handlers.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_descriptors_daemon.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_diff_alignment.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_diff_command.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_diff_draws.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_diff_pipeline.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_diff_resources.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_diff_stats.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_diff_summary.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_discover.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_draws_daemon.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_draws_events_cli.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_draws_events_daemon.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_events_commands.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_export_commands.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_export_overlay.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_fix1_draws_pass_name.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_fix2_vfs_intermediate_dirs.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_fix3_friendly_pass_name.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_formatters.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_gen_skill_ref.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_image_compare.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_info_commands.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_install_skill.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_json_errors.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_mesh_commands.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_mesh_handler.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_mock_capture_types.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_mock_renderdoc.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_output_options.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_overlay_handler.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pick_pixel_commands.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pick_pixel_daemon.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pipeline_cli_phase27.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pipeline_commands.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pipeline_daemon.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pipeline_section_routing.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pipeline_shader.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pipeline_state.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pixel_history_commands.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pixel_history_daemon.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pixi_files.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_protocol.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_query_service.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_resources_commands.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_resources_filter.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_script_command.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_script_handler.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_shader_edit_commands.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_shader_edit_handlers.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_skill_structure.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_snapshot_command.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_tex_stats_commands.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_tex_stats_handler.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_unix_helpers_commands.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_usage_commands.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_usage_daemon.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_vfs_binary.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_vfs_commands.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_vfs_completion.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_vfs_daemon.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_vfs_formatter.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_vfs_router.py +0 -0
- {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_vfs_tree_cache.py +0 -0
|
@@ -95,12 +95,13 @@ jobs:
|
|
|
95
95
|
run: uv run mypy src
|
|
96
96
|
|
|
97
97
|
test:
|
|
98
|
-
name: Test (py${{ matrix.python-version }})
|
|
99
|
-
runs-on:
|
|
98
|
+
name: Test (py${{ matrix.python-version }}, ${{ matrix.os }})
|
|
99
|
+
runs-on: ${{ matrix.os }}
|
|
100
100
|
strategy:
|
|
101
101
|
fail-fast: false
|
|
102
102
|
matrix:
|
|
103
103
|
python-version: ["3.10", "3.12", "3.14"]
|
|
104
|
+
os: [ubuntu-latest, windows-latest]
|
|
104
105
|
steps:
|
|
105
106
|
- name: Checkout
|
|
106
107
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rdc-cli
|
|
3
|
-
Version: 0.3.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 0.3.4
|
|
4
|
+
Summary: CLI for RenderDoc .rdc captures
|
|
5
5
|
Author: Jim
|
|
6
6
|
License-Expression: MIT
|
|
7
7
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -58,7 +58,7 @@ rdc close
|
|
|
58
58
|
|
|
59
59
|
## Install
|
|
60
60
|
|
|
61
|
-
**PyPI
|
|
61
|
+
**PyPI — Linux** (recommended)
|
|
62
62
|
|
|
63
63
|
```bash
|
|
64
64
|
pipx install rdc-cli # install the CLI
|
|
@@ -67,6 +67,14 @@ curl -fsSL https://raw.githubusercontent.com/BANANASJIM/rdc-cli/master/scripts/b
|
|
|
67
67
|
rdc doctor # verify everything works
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
+
**PyPI — Windows** (experimental)
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
pipx install rdc-cli
|
|
74
|
+
python scripts/build_renderdoc.py # needs cmake + Visual Studio Build Tools
|
|
75
|
+
rdc doctor
|
|
76
|
+
```
|
|
77
|
+
|
|
70
78
|
**AUR** (Arch Linux — builds renderdoc automatically, no extra setup)
|
|
71
79
|
|
|
72
80
|
```bash
|
|
@@ -161,6 +169,7 @@ Run `rdc --help` for the full list, or `rdc <command> --help` for details. See
|
|
|
161
169
|
| Assertions | `assert-pixel`, `assert-state`, `assert-image`, `assert-count`, `assert-clean` |
|
|
162
170
|
| Diff | `diff` (with `--draws`, `--stats`, `--framebuffer`, `--pipeline`, etc.) |
|
|
163
171
|
| VFS | `ls`, `cat`, `tree` |
|
|
172
|
+
| Remote | `remote connect`, `remote list`, `remote capture` |
|
|
164
173
|
| Utility | `doctor`, `completion`, `capture`, `count`, `script`, `install-skill` |
|
|
165
174
|
|
|
166
175
|
All list commands output TSV. All commands support `--json`. Footer/summary goes to stderr — stdout is always clean data.
|
|
@@ -29,7 +29,7 @@ rdc close
|
|
|
29
29
|
|
|
30
30
|
## Install
|
|
31
31
|
|
|
32
|
-
**PyPI
|
|
32
|
+
**PyPI — Linux** (recommended)
|
|
33
33
|
|
|
34
34
|
```bash
|
|
35
35
|
pipx install rdc-cli # install the CLI
|
|
@@ -38,6 +38,14 @@ curl -fsSL https://raw.githubusercontent.com/BANANASJIM/rdc-cli/master/scripts/b
|
|
|
38
38
|
rdc doctor # verify everything works
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
+
**PyPI — Windows** (experimental)
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
pipx install rdc-cli
|
|
45
|
+
python scripts/build_renderdoc.py # needs cmake + Visual Studio Build Tools
|
|
46
|
+
rdc doctor
|
|
47
|
+
```
|
|
48
|
+
|
|
41
49
|
**AUR** (Arch Linux — builds renderdoc automatically, no extra setup)
|
|
42
50
|
|
|
43
51
|
```bash
|
|
@@ -132,6 +140,7 @@ Run `rdc --help` for the full list, or `rdc <command> --help` for details. See
|
|
|
132
140
|
| Assertions | `assert-pixel`, `assert-state`, `assert-image`, `assert-count`, `assert-clean` |
|
|
133
141
|
| Diff | `diff` (with `--draws`, `--stats`, `--framebuffer`, `--pipeline`, etc.) |
|
|
134
142
|
| VFS | `ls`, `cat`, `tree` |
|
|
143
|
+
| Remote | `remote connect`, `remote list`, `remote capture` |
|
|
135
144
|
| Utility | `doctor`, `completion`, `capture`, `count`, `script`, `install-skill` |
|
|
136
145
|
|
|
137
146
|
All list commands output TSV. All commands support `--json`. Footer/summary goes to stderr — stdout is always clean data.
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
"name": "search",
|
|
163
163
|
"id": "search",
|
|
164
164
|
"help": "Search shader disassembly text for PATTERN (regex).",
|
|
165
|
-
"usage": "rdc search <PATTERN> [--stage TEXT] [--limit INTEGER] [-C INTEGER] [-
|
|
165
|
+
"usage": "rdc search <PATTERN> [--stage TEXT] [--limit INTEGER] [-C INTEGER] [--case-sensitive] [--json]"
|
|
166
166
|
},
|
|
167
167
|
{
|
|
168
168
|
"name": "passes",
|
|
@@ -432,6 +432,31 @@
|
|
|
432
432
|
}
|
|
433
433
|
]
|
|
434
434
|
},
|
|
435
|
+
{
|
|
436
|
+
"name": "Remote",
|
|
437
|
+
"id": "remote",
|
|
438
|
+
"description": "Connect to a remote RenderDoc server for remote capture.",
|
|
439
|
+
"commands": [
|
|
440
|
+
{
|
|
441
|
+
"name": "remote connect",
|
|
442
|
+
"id": "remote-connect",
|
|
443
|
+
"help": "Connect to a remote RenderDoc server.",
|
|
444
|
+
"usage": "rdc remote connect <URL> [--json]"
|
|
445
|
+
},
|
|
446
|
+
{
|
|
447
|
+
"name": "remote list",
|
|
448
|
+
"id": "remote-list",
|
|
449
|
+
"help": "List capturable applications on a remote host.",
|
|
450
|
+
"usage": "rdc remote list [--url TEXT] [--json]"
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
"name": "remote capture",
|
|
454
|
+
"id": "remote-capture",
|
|
455
|
+
"help": "Capture on a remote host and transfer to local.",
|
|
456
|
+
"usage": "rdc remote capture <APP> -o <PATH> [--url TEXT] [--args TEXT] [--workdir TEXT] [--frame INTEGER] [--timeout FLOAT] [--api-validation] [--callstacks] [--hook-children] [--ref-all-resources] [--soft-memory-limit INTEGER] [--json]"
|
|
457
|
+
}
|
|
458
|
+
]
|
|
459
|
+
},
|
|
435
460
|
{
|
|
436
461
|
"name": "Utilities",
|
|
437
462
|
"id": "utilities",
|
|
@@ -15,6 +15,7 @@ const currentPath = Astro.url.pathname.replace(/\/$/, '');
|
|
|
15
15
|
const sidebar = [
|
|
16
16
|
{ label: 'Overview', href: `${base}docs/` },
|
|
17
17
|
{ label: 'Installation', href: `${base}docs/install/` },
|
|
18
|
+
{ label: 'Windows Install', href: `${base}docs/install/windows/` },
|
|
18
19
|
{ label: 'Usage Patterns', href: `${base}docs/usage/` },
|
|
19
20
|
{ label: 'Commands', href: `${base}docs/commands/` },
|
|
20
21
|
{ label: 'VFS Paths', href: `${base}docs/vfs/` },
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
import Docs from '../../../layouts/Docs.astro';
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<Docs title="Windows Installation">
|
|
6
|
+
<h2>Prerequisites</h2>
|
|
7
|
+
<ul>
|
|
8
|
+
<li>Windows 10 / 11 64-bit</li>
|
|
9
|
+
<li>Python 3.12.x (exact minor version must match the renderdoc <code>.pyd</code>)</li>
|
|
10
|
+
<li>Visual Studio 2022 Build Tools with "Desktop development with C++" workload</li>
|
|
11
|
+
<li>Git (for building renderdoc from source)</li>
|
|
12
|
+
</ul>
|
|
13
|
+
|
|
14
|
+
<h2>Install rdc-cli</h2>
|
|
15
|
+
<pre><code>pip install rdc-cli</code></pre>
|
|
16
|
+
<p>
|
|
17
|
+
This installs the <code>rdc</code> command. You still need the renderdoc
|
|
18
|
+
Python module — see below.
|
|
19
|
+
</p>
|
|
20
|
+
|
|
21
|
+
<h2>RenderDoc Python Module</h2>
|
|
22
|
+
<p>
|
|
23
|
+
The renderdoc Python module (<code>renderdoc.cpython-3*.pyd</code>) is
|
|
24
|
+
<strong>not</strong> available on PyPI. Your Python minor version must
|
|
25
|
+
exactly match the one used to compile the module.
|
|
26
|
+
</p>
|
|
27
|
+
|
|
28
|
+
<h3>Option A: RenderDoc Installer</h3>
|
|
29
|
+
<p>
|
|
30
|
+
Download and install
|
|
31
|
+
<a href="https://renderdoc.org/builds">RenderDoc for Windows</a>.
|
|
32
|
+
The installer places <code>renderdoc.dll</code> in
|
|
33
|
+
<code>C:\Program Files\RenderDoc</code>. The Python bindings
|
|
34
|
+
(<code>.pyd</code>) may be included depending on the installer version.
|
|
35
|
+
</p>
|
|
36
|
+
|
|
37
|
+
<h3>Option B: Build from Source</h3>
|
|
38
|
+
<p>
|
|
39
|
+
A cross-platform build script is planned for Phase W2. In the meantime,
|
|
40
|
+
see <code>scripts/build_renderdoc.py</code> (coming in Phase W2) or
|
|
41
|
+
build manually:
|
|
42
|
+
</p>
|
|
43
|
+
<pre><code>git clone --depth 1 https://github.com/baldurk/renderdoc.git
|
|
44
|
+
cd renderdoc
|
|
45
|
+
cmake -B build -G "Visual Studio 17 2022" -DENABLE_PYRENDERDOC=ON -DENABLE_QRENDERDOC=OFF
|
|
46
|
+
cmake --build build --config Release
|
|
47
|
+
set RENDERDOC_PYTHON_PATH=%cd%\build\lib\Release</code></pre>
|
|
48
|
+
|
|
49
|
+
<h2>Configure RENDERDOC_PYTHON_PATH</h2>
|
|
50
|
+
<p>
|
|
51
|
+
Set the environment variable to point at the directory containing the
|
|
52
|
+
<code>.pyd</code> file:
|
|
53
|
+
</p>
|
|
54
|
+
<pre><code>set RENDERDOC_PYTHON_PATH=C:\path\to\renderdoc\build\lib</code></pre>
|
|
55
|
+
<p>
|
|
56
|
+
To make it permanent, add it via
|
|
57
|
+
<strong>System Properties → Environment Variables</strong>.
|
|
58
|
+
</p>
|
|
59
|
+
|
|
60
|
+
<h2>Validate with rdc doctor</h2>
|
|
61
|
+
<pre><code>rdc doctor</code></pre>
|
|
62
|
+
<p>
|
|
63
|
+
A successful output on Windows shows 8 checks, including the three
|
|
64
|
+
Windows-specific checks:
|
|
65
|
+
</p>
|
|
66
|
+
<ul>
|
|
67
|
+
<li><code>win-python-version</code> — Python version matches <code>.pyd</code></li>
|
|
68
|
+
<li><code>win-vs-build-tools</code> — Visual Studio Build Tools detected</li>
|
|
69
|
+
<li><code>win-renderdoc-install</code> — RenderDoc <code>.dll</code> found</li>
|
|
70
|
+
</ul>
|
|
71
|
+
|
|
72
|
+
<h2>Known Limitations</h2>
|
|
73
|
+
<ul>
|
|
74
|
+
<li>
|
|
75
|
+
Daemon process management (<code>rdc session start</code>) is not yet
|
|
76
|
+
functional on Windows. Phase W2 will implement the required OS-level
|
|
77
|
+
process APIs.
|
|
78
|
+
</li>
|
|
79
|
+
<li>
|
|
80
|
+
All analysis commands (<code>rdc open</code>, <code>rdc info</code>,
|
|
81
|
+
<code>rdc shaders</code>, etc.) will work once the daemon is running.
|
|
82
|
+
</li>
|
|
83
|
+
</ul>
|
|
84
|
+
|
|
85
|
+
<h2>Troubleshooting</h2>
|
|
86
|
+
<h3>Python version mismatch</h3>
|
|
87
|
+
<p>
|
|
88
|
+
If <code>rdc doctor</code> reports a version mismatch between your
|
|
89
|
+
running Python and the <code>.pyd</code>, install the matching Python
|
|
90
|
+
version or rebuild renderdoc with your current Python.
|
|
91
|
+
</p>
|
|
92
|
+
|
|
93
|
+
<h3>renderdoc module not found</h3>
|
|
94
|
+
<p>
|
|
95
|
+
Ensure <code>RENDERDOC_PYTHON_PATH</code> points to the directory
|
|
96
|
+
containing <code>renderdoc.pyd</code> (not <code>renderdoc.dll</code>).
|
|
97
|
+
</p>
|
|
98
|
+
|
|
99
|
+
<h3>vswhere.exe not found</h3>
|
|
100
|
+
<p>
|
|
101
|
+
Install <a href="https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022">
|
|
102
|
+
Visual Studio 2022 Build Tools</a> with the "Desktop development with
|
|
103
|
+
C++" workload selected.
|
|
104
|
+
</p>
|
|
105
|
+
</Docs>
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# Phase W2: Cross-Platform Build Script
|
|
2
|
+
|
|
3
|
+
## Motivation
|
|
4
|
+
|
|
5
|
+
Two near-identical bash scripts currently handle the renderdoc build:
|
|
6
|
+
|
|
7
|
+
- `scripts/build-renderdoc.sh` — standalone, curl-pipe install pattern, installs to `~/.local/renderdoc/`
|
|
8
|
+
- `scripts/setup-renderdoc.sh` — pixi dev env, installs to `.local/renderdoc/` (relative to repo root)
|
|
9
|
+
|
|
10
|
+
The differences are cosmetic: output path and whether SHA256 verification is performed. Both will break on Windows (no bash, no `nproc`, no `.so` artifacts). Phase W1 added `src/rdc/_platform.py`; W2 extends platform-awareness to the build tooling by replacing both scripts with a single Python script.
|
|
11
|
+
|
|
12
|
+
## Scope
|
|
13
|
+
|
|
14
|
+
- New file: `scripts/build_renderdoc.py` (stdlib only, Python 3.10+)
|
|
15
|
+
- `pixi.toml`: update `setup-renderdoc` task to call the Python script
|
|
16
|
+
- `scripts/build-renderdoc.sh` and `scripts/setup-renderdoc.sh`: retained, marked deprecated
|
|
17
|
+
- `scripts/ensure-renderdoc.sh`: unchanged (worktree symlink helper, bash-only is fine)
|
|
18
|
+
|
|
19
|
+
## Design
|
|
20
|
+
|
|
21
|
+
### Script Architecture
|
|
22
|
+
|
|
23
|
+
The script is a single self-contained Python file with no third-party imports. It is structured as a sequence of functions called from `main()`:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
main()
|
|
27
|
+
check_prerequisites()
|
|
28
|
+
clone_renderdoc()
|
|
29
|
+
download_swig()
|
|
30
|
+
configure_build()
|
|
31
|
+
run_build()
|
|
32
|
+
copy_artifacts()
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Top-level constants mirror those in the bash scripts:
|
|
36
|
+
|
|
37
|
+
```python
|
|
38
|
+
RDOC_TAG = "v1.41"
|
|
39
|
+
SWIG_URL = "https://github.com/baldurk/swig/archive/renderdoc-modified-7.zip"
|
|
40
|
+
SWIG_SHA256 = "9d7e5013ada6c42ec95ab167a34db52c1cc8c09b89c8e9373631b1f10596c648"
|
|
41
|
+
SWIG_SUBDIR = "swig-renderdoc-modified-7"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
`main()` accepts an optional positional argument `INSTALL_DIR`; if omitted, `default_install_dir()` is used. `--build-dir` is also accepted to override the build cache location.
|
|
45
|
+
|
|
46
|
+
### Platform Detection
|
|
47
|
+
|
|
48
|
+
A private helper `_platform()` returns one of `"linux"`, `"macos"`, `"windows"`:
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
import sys
|
|
52
|
+
|
|
53
|
+
def _platform() -> str:
|
|
54
|
+
if sys.platform == "win32":
|
|
55
|
+
return "windows"
|
|
56
|
+
if sys.platform == "darwin":
|
|
57
|
+
return "macos"
|
|
58
|
+
return "linux"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Build Flow
|
|
62
|
+
|
|
63
|
+
**`check_prerequisites()`**
|
|
64
|
+
|
|
65
|
+
Required tools per platform:
|
|
66
|
+
|
|
67
|
+
| Tool | Linux | macOS | Windows |
|
|
68
|
+
|------|-------|-------|---------|
|
|
69
|
+
| `cmake` | yes | yes | yes |
|
|
70
|
+
| `git` | yes | yes | yes |
|
|
71
|
+
| `python3` / `python` | yes | yes | yes |
|
|
72
|
+
| `ninja` | yes | yes | no |
|
|
73
|
+
| `vswhere.exe` | no | no | yes |
|
|
74
|
+
|
|
75
|
+
On Windows, the function also verifies Visual Studio Build Tools are present by running `vswhere -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -format value -property installationPath` and confirming a non-empty result.
|
|
76
|
+
|
|
77
|
+
**`clone_renderdoc(build_dir: Path)`**
|
|
78
|
+
|
|
79
|
+
Idempotent: skips if `build_dir / "renderdoc"` exists. Uses `git clone --depth 1 --branch RDOC_TAG`.
|
|
80
|
+
|
|
81
|
+
**`download_swig(build_dir: Path)`**
|
|
82
|
+
|
|
83
|
+
Idempotent: skips if `build_dir / "renderdoc-swig"` exists.
|
|
84
|
+
|
|
85
|
+
Uses `urllib.request.urlretrieve` (stdlib). After download, verifies SHA256 with `hashlib`. Extracts with `zipfile.ZipFile`. Raises `SystemExit(1)` on checksum mismatch and deletes the corrupt archive.
|
|
86
|
+
|
|
87
|
+
**`configure_build(build_dir: Path)`**
|
|
88
|
+
|
|
89
|
+
CMake flags common to all platforms:
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
-DCMAKE_BUILD_TYPE=Release
|
|
93
|
+
-DENABLE_PYRENDERDOC=ON
|
|
94
|
+
-DENABLE_QRENDERDOC=OFF
|
|
95
|
+
-DENABLE_RENDERDOCCMD=OFF
|
|
96
|
+
-DENABLE_GL=OFF
|
|
97
|
+
-DENABLE_GLES=OFF
|
|
98
|
+
-DENABLE_VULKAN=ON
|
|
99
|
+
-DRENDERDOC_SWIG_PACKAGE=<build_dir>/renderdoc-swig
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Generator selection:
|
|
103
|
+
|
|
104
|
+
- Linux/macOS: `-G Ninja`
|
|
105
|
+
- Windows: `-G "Visual Studio 17 2022" -A x64`
|
|
106
|
+
|
|
107
|
+
On ALL Linux, strips `-flto=auto` from `CFLAGS`, `CXXFLAGS`, `LDFLAGS` in the environment passed to `subprocess.run`.
|
|
108
|
+
|
|
109
|
+
**`run_build(build_dir: Path)`**
|
|
110
|
+
|
|
111
|
+
Runs `cmake --build <build_dir>/renderdoc/build`. Uses `os.cpu_count()` for parallelism.
|
|
112
|
+
|
|
113
|
+
On Linux/macOS: `-j <n>`. On Windows: `--` `/m:<n>` (MSBuild parallel flag).
|
|
114
|
+
|
|
115
|
+
**`copy_artifacts(build_dir: Path, out_dir: Path)`**
|
|
116
|
+
|
|
117
|
+
Artifact paths by platform:
|
|
118
|
+
|
|
119
|
+
| Platform | Source | Destination |
|
|
120
|
+
|----------|--------|-------------|
|
|
121
|
+
| Linux | `build/lib/renderdoc.so`, `build/lib/librenderdoc.so` | `out_dir/` |
|
|
122
|
+
| macOS | `build/lib/renderdoc.so`, `build/lib/librenderdoc.so` (or `.dylib`) | `out_dir/` |
|
|
123
|
+
| Windows | `build/Release/renderdoc.pyd`, `build/Release/renderdoc.dll` | `out_dir/` |
|
|
124
|
+
|
|
125
|
+
Uses `shutil.copy2`.
|
|
126
|
+
|
|
127
|
+
### Output Paths
|
|
128
|
+
|
|
129
|
+
`default_install_dir()` returns the renderdoc artifact directory:
|
|
130
|
+
|
|
131
|
+
```python
|
|
132
|
+
def default_install_dir() -> Path:
|
|
133
|
+
if _platform() == "windows":
|
|
134
|
+
base = os.environ.get("LOCALAPPDATA", str(Path.home()))
|
|
135
|
+
return Path(base) / "renderdoc"
|
|
136
|
+
return Path.home() / ".local" / "renderdoc"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
The build cache is always `<install_dir_parent>/renderdoc-build`, or overridden with `--build-dir`.
|
|
140
|
+
|
|
141
|
+
### Backward Compatibility
|
|
142
|
+
|
|
143
|
+
`scripts/build-renderdoc.sh` and `scripts/setup-renderdoc.sh` are retained verbatim. A deprecation notice comment is prepended at the top of each:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
# DEPRECATED: use scripts/build_renderdoc.py instead.
|
|
147
|
+
# Kept for curl-pipe users on systems without Python 3.10+.
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
The `pixi.toml` `setup-renderdoc` task is updated:
|
|
151
|
+
|
|
152
|
+
```toml
|
|
153
|
+
setup-renderdoc = "python scripts/build_renderdoc.py .local/renderdoc --build-dir .local/renderdoc-build"
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Non-Goals
|
|
157
|
+
|
|
158
|
+
- Building renderdoc for non-Python use (GUI, renderdoccmd)
|
|
159
|
+
- Supporting renderdoc versions other than v1.41
|
|
160
|
+
- Automatic Python version detection for the SWIG binding target
|
|
161
|
+
- Package manager integration (apt, brew, winget)
|
|
162
|
+
- `ensure-renderdoc.sh` replacement (worktree symlink logic stays bash)
|
|
163
|
+
- Modifying `src/rdc/_platform.py` (Windows stubs deferred to W3)
|
|
164
|
+
|
|
165
|
+
## Risks
|
|
166
|
+
|
|
167
|
+
| Risk | Likelihood | Mitigation |
|
|
168
|
+
|------|-----------|------------|
|
|
169
|
+
| Windows build untested in CI | Medium | Manual verification section in test-plan; CI matrix is Linux-only for now |
|
|
170
|
+
| SWIG ZIP layout changes across renderdoc versions | Low | SHA256 pin + explicit `SWIG_SUBDIR` constant |
|
|
171
|
+
| `urllib.request` slow vs `curl` for large archives | Low | Progress callback via `reporthook` in `urlretrieve` |
|
|
172
|
+
| Visual Studio version drift (2022 to future) | Low | Document assumption; add `--vs-version` flag as future option |
|
|
173
|
+
| macOS artifact path differs from Linux | Medium | `copy_artifacts` handles `.dylib` fallback for `librenderdoc` |
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Phase W2: Tasks
|
|
2
|
+
|
|
3
|
+
## Prerequisites
|
|
4
|
+
|
|
5
|
+
- [x] Phase W1 merged (PR #124 -- `src/rdc/_platform.py` exists)
|
|
6
|
+
- [x] OpenSpec reviewed and approved by Jim
|
|
7
|
+
|
|
8
|
+
## Implementation Tasks
|
|
9
|
+
|
|
10
|
+
### T1 -- Create `scripts/build_renderdoc.py`
|
|
11
|
+
|
|
12
|
+
File: `scripts/build_renderdoc.py`
|
|
13
|
+
|
|
14
|
+
Implement in this order (each function is independently testable):
|
|
15
|
+
|
|
16
|
+
1. Constants block at module top:
|
|
17
|
+
```python
|
|
18
|
+
RDOC_TAG = "v1.41"
|
|
19
|
+
SWIG_URL = "https://github.com/baldurk/swig/archive/renderdoc-modified-7.zip"
|
|
20
|
+
SWIG_SHA256 = "9d7e5013ada6c42ec95ab167a34db52c1cc8c09b89c8e9373631b1f10596c648"
|
|
21
|
+
SWIG_SUBDIR = "swig-renderdoc-modified-7"
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
2. `_platform() -> str` -- returns `"linux"`, `"macos"`, or `"windows"`
|
|
25
|
+
|
|
26
|
+
3. `default_install_dir() -> Path` -- `~/.local/renderdoc` or `%LOCALAPPDATA%\renderdoc`
|
|
27
|
+
|
|
28
|
+
4. `check_prerequisites(plat: str) -> None` -- verifies required tools per platform
|
|
29
|
+
|
|
30
|
+
5. `clone_renderdoc(build_dir: Path) -> None` -- idempotent `git clone --depth 1 --branch RDOC_TAG`
|
|
31
|
+
|
|
32
|
+
6. `download_swig(build_dir: Path) -> None` -- idempotent download + SHA256 verify + unzip + rename
|
|
33
|
+
|
|
34
|
+
7. `strip_lto(env: dict) -> dict` -- removes `-flto=auto` from `CFLAGS`/`CXXFLAGS`/`LDFLAGS`
|
|
35
|
+
|
|
36
|
+
8. `configure_build(build_dir, swig_dir, plat) -> None` -- cmake configure; strips LTO on ALL Linux
|
|
37
|
+
|
|
38
|
+
9. `run_build(build_dir, plat, jobs) -> None` -- `cmake --build` with platform-specific parallelism
|
|
39
|
+
|
|
40
|
+
10. `copy_artifacts(build_dir, install_dir, plat) -> None` -- copies platform-specific artifacts; macOS `.dylib` fallback
|
|
41
|
+
|
|
42
|
+
11. `main(argv) -> None` -- `argparse` entry point; short-circuits if artifacts already present
|
|
43
|
+
|
|
44
|
+
Constraints:
|
|
45
|
+
- stdlib only (no third-party imports)
|
|
46
|
+
- Python 3.10+ syntax
|
|
47
|
+
- No `print()` -- use `sys.stdout.write()`
|
|
48
|
+
- Use `subprocess.run(..., check=True)` throughout
|
|
49
|
+
|
|
50
|
+
### T2 -- Add deprecation notices to bash scripts
|
|
51
|
+
|
|
52
|
+
File: `scripts/build-renderdoc.sh`, line 2 (after shebang):
|
|
53
|
+
```bash
|
|
54
|
+
# DEPRECATED: use scripts/build_renderdoc.py instead.
|
|
55
|
+
# Kept for curl-pipe users on systems without Python 3.10+.
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
File: `scripts/setup-renderdoc.sh`, line 2 (after shebang):
|
|
59
|
+
```bash
|
|
60
|
+
# DEPRECATED: use scripts/build_renderdoc.py instead.
|
|
61
|
+
# Kept for curl-pipe users on systems without Python 3.10+.
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### T3 -- Update `pixi.toml`
|
|
65
|
+
|
|
66
|
+
Replace the `setup-renderdoc` task:
|
|
67
|
+
|
|
68
|
+
```toml
|
|
69
|
+
setup-renderdoc = "python scripts/build_renderdoc.py .local/renderdoc --build-dir .local/renderdoc-build"
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### T4 -- SKIPPED (moved to W3)
|
|
73
|
+
|
|
74
|
+
`_platform.py` Windows stubs implementation deferred to Phase W3 per review.
|
|
75
|
+
|
|
76
|
+
## Testing Tasks
|
|
77
|
+
|
|
78
|
+
### T5 -- Write `tests/unit/test_build_renderdoc.py`
|
|
79
|
+
|
|
80
|
+
Cover all test cases from `test-plan.md`. Target: full branch coverage of `scripts/build_renderdoc.py`.
|
|
81
|
+
|
|
82
|
+
### T6 -- Scaffold `tests/integration/test_build_renderdoc_integration.py`
|
|
83
|
+
|
|
84
|
+
Single skipped test function. No CI execution.
|
|
85
|
+
|
|
86
|
+
## Documentation Tasks
|
|
87
|
+
|
|
88
|
+
### T7 -- Archive OpenSpec (post-merge)
|
|
89
|
+
|
|
90
|
+
After PR merge: `mv openspec/changes/2026-02-23-phase-w2-build-script openspec/changes/archive/`
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Phase W2: Test Plan
|
|
2
|
+
|
|
3
|
+
## Unit Tests
|
|
4
|
+
|
|
5
|
+
File: `tests/unit/test_build_renderdoc.py`
|
|
6
|
+
|
|
7
|
+
All tests use `unittest.mock` to avoid network and filesystem side-effects. The script is imported as a module after adding `scripts/` to `sys.path`.
|
|
8
|
+
|
|
9
|
+
### Platform detection
|
|
10
|
+
|
|
11
|
+
| Test | Description |
|
|
12
|
+
|------|-------------|
|
|
13
|
+
| `test_platform_linux` | `sys.platform = "linux"` -> `_platform()` returns `"linux"` |
|
|
14
|
+
| `test_platform_macos` | `sys.platform = "darwin"` -> `_platform()` returns `"macos"` |
|
|
15
|
+
| `test_platform_windows` | `sys.platform = "win32"` -> `_platform()` returns `"windows"` |
|
|
16
|
+
|
|
17
|
+
### Default install dir
|
|
18
|
+
|
|
19
|
+
| Test | Description |
|
|
20
|
+
|------|-------------|
|
|
21
|
+
| `test_default_install_dir_linux` | `_platform()` mocked to `"linux"` -> `Path.home() / ".local/renderdoc"` |
|
|
22
|
+
| `test_default_install_dir_macos` | `_platform()` mocked to `"macos"` -> `Path.home() / ".local/renderdoc"` |
|
|
23
|
+
| `test_default_install_dir_windows` | `_platform()` mocked to `"windows"`, `LOCALAPPDATA` set -> `Path(LOCALAPPDATA) / "renderdoc"` |
|
|
24
|
+
| `test_default_install_dir_windows_no_localappdata` | `LOCALAPPDATA` unset -> falls back to `Path.home() / "renderdoc"` |
|
|
25
|
+
|
|
26
|
+
### Prerequisite checking
|
|
27
|
+
|
|
28
|
+
| Test | Description |
|
|
29
|
+
|------|-------------|
|
|
30
|
+
| `test_check_prerequisites_all_present_linux` | All tools found -> no exception |
|
|
31
|
+
| `test_check_prerequisites_missing_cmake` | `cmake` not in PATH -> `SystemExit(1)` |
|
|
32
|
+
| `test_check_prerequisites_missing_ninja_linux` | `ninja` missing on Linux -> `SystemExit(1)` |
|
|
33
|
+
| `test_check_prerequisites_windows_no_ninja` | Windows does not require ninja -> no error |
|
|
34
|
+
| `test_check_prerequisites_windows_vswhere_empty` | `vswhere.exe` returns empty -> `SystemExit(1)` |
|
|
35
|
+
| `test_check_prerequisites_windows_vswhere_missing` | `vswhere.exe` not found -> `SystemExit(1)` |
|
|
36
|
+
|
|
37
|
+
### Clone renderdoc
|
|
38
|
+
|
|
39
|
+
| Test | Description |
|
|
40
|
+
|------|-------------|
|
|
41
|
+
| `test_clone_renderdoc_fresh` | Target dir absent -> `git clone` called with `--depth 1 --branch v1.41` |
|
|
42
|
+
| `test_clone_renderdoc_idempotent` | Target dir exists -> `git clone` not called |
|
|
43
|
+
|
|
44
|
+
### SWIG download
|
|
45
|
+
|
|
46
|
+
| Test | Description |
|
|
47
|
+
|------|-------------|
|
|
48
|
+
| `test_download_swig_fresh_ok` | Dir absent, SHA256 matches -> extracted and renamed |
|
|
49
|
+
| `test_download_swig_idempotent` | `renderdoc-swig` exists -> download skipped |
|
|
50
|
+
| `test_download_swig_sha256_mismatch` | Hash differs -> `SystemExit(1)`, archive deleted |
|
|
51
|
+
|
|
52
|
+
### LTO flag stripping
|
|
53
|
+
|
|
54
|
+
| Test | Description |
|
|
55
|
+
|------|-------------|
|
|
56
|
+
| `test_strip_lto_removes_flag` | env has `-flto=auto` in all three vars -> stripped |
|
|
57
|
+
| `test_strip_lto_no_flags_present` | No `-flto=auto` -> no change |
|
|
58
|
+
| `test_strip_lto_does_not_mutate_original` | Original dict unchanged |
|
|
59
|
+
|
|
60
|
+
### CMake configuration
|
|
61
|
+
|
|
62
|
+
| Test | Description |
|
|
63
|
+
|------|-------------|
|
|
64
|
+
| `test_configure_linux_uses_ninja` | Linux -> `-G Ninja` |
|
|
65
|
+
| `test_configure_macos_uses_ninja` | macOS -> `-G Ninja` |
|
|
66
|
+
| `test_configure_windows_uses_vs` | Windows -> `-G "Visual Studio 17 2022" -A x64` |
|
|
67
|
+
| `test_configure_common_flags` | All -> `-DENABLE_PYRENDERDOC=ON` etc. present |
|
|
68
|
+
| `test_configure_swig_package_path` | `-DRENDERDOC_SWIG_PACKAGE` set correctly |
|
|
69
|
+
| `test_configure_linux_strips_lto` | Linux env `-flto=auto` stripped |
|
|
70
|
+
|
|
71
|
+
### Build
|
|
72
|
+
|
|
73
|
+
| Test | Description |
|
|
74
|
+
|------|-------------|
|
|
75
|
+
| `test_run_build_parallel_flag_linux` | Linux -> `-j N` |
|
|
76
|
+
| `test_run_build_parallel_flag_windows` | Windows -> `/m:N` after `--` |
|
|
77
|
+
|
|
78
|
+
### Artifact copy
|
|
79
|
+
|
|
80
|
+
| Test | Description |
|
|
81
|
+
|------|-------------|
|
|
82
|
+
| `test_copy_artifacts_linux` | Linux -> copies `renderdoc.so` and `librenderdoc.so` |
|
|
83
|
+
| `test_copy_artifacts_macos` | macOS -> same as Linux |
|
|
84
|
+
| `test_copy_artifacts_macos_dylib_fallback` | macOS `.dylib` fallback works |
|
|
85
|
+
| `test_copy_artifacts_windows` | Windows -> copies `.pyd` and `.dll` |
|
|
86
|
+
| `test_copy_artifacts_missing_source` | Missing artifact -> `SystemExit(1)` |
|
|
87
|
+
|
|
88
|
+
### CLI argument parsing
|
|
89
|
+
|
|
90
|
+
| Test | Description |
|
|
91
|
+
|------|-------------|
|
|
92
|
+
| `test_main_default_install_dir` | No args -> `default_install_dir()` used |
|
|
93
|
+
| `test_main_custom_install_dir` | Positional arg -> used as install dir |
|
|
94
|
+
| `test_main_custom_build_dir` | `--build-dir` -> passed through |
|
|
95
|
+
| `test_main_idempotent_skip` | Artifacts present -> all build steps skipped |
|
|
96
|
+
|
|
97
|
+
## Integration Tests
|
|
98
|
+
|
|
99
|
+
File: `tests/integration/test_build_renderdoc_integration.py`
|
|
100
|
+
|
|
101
|
+
Single `@pytest.mark.skip` test. No CI execution. Manual verification only.
|
|
102
|
+
|
|
103
|
+
## Manual Verification
|
|
104
|
+
|
|
105
|
+
### Linux (primary target)
|
|
106
|
+
|
|
107
|
+
1. `rm -rf ~/.local/renderdoc ~/.local/renderdoc-build`
|
|
108
|
+
2. `python scripts/build_renderdoc.py`
|
|
109
|
+
3. Confirm `~/.local/renderdoc/renderdoc.so` and `librenderdoc.so` present
|
|
110
|
+
4. Run again: must print "already exists" and exit without rebuilding
|
|
111
|
+
|
|
112
|
+
### Linux (pixi task path)
|
|
113
|
+
|
|
114
|
+
1. `rm -rf .local/renderdoc .local/renderdoc-build`
|
|
115
|
+
2. `pixi run setup-renderdoc`
|
|
116
|
+
3. Confirm `.local/renderdoc/renderdoc.so` exists
|