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.
Files changed (561) hide show
  1. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.github/workflows/ci.yml +3 -2
  2. {rdc_cli-0.3.3/src/rdc_cli.egg-info → rdc_cli-0.3.4}/PKG-INFO +12 -3
  3. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/README.md +10 -1
  4. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/data/commands.json +26 -1
  5. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/layouts/Docs.astro +1 -0
  6. rdc_cli-0.3.4/docs-astro/src/pages/docs/install/windows.astro +105 -0
  7. rdc_cli-0.3.4/openspec/changes/2026-02-23-phase-w2-build-script/proposal.md +173 -0
  8. rdc_cli-0.3.4/openspec/changes/2026-02-23-phase-w2-build-script/tasks.md +90 -0
  9. rdc_cli-0.3.4/openspec/changes/2026-02-23-phase-w2-build-script/test-plan.md +116 -0
  10. rdc_cli-0.3.4/openspec/changes/archive/2026-02-22-ai-agent-skill/proposal.md +114 -0
  11. rdc_cli-0.3.4/openspec/changes/archive/2026-02-22-ai-agent-skill/tasks.md +168 -0
  12. rdc_cli-0.3.4/openspec/changes/archive/2026-02-22-ai-agent-skill/test-plan.md +219 -0
  13. rdc_cli-0.3.4/openspec/changes/archive/2026-02-22-fix-json-error-and-search-preload/proposal.md +281 -0
  14. rdc_cli-0.3.4/openspec/changes/archive/2026-02-22-fix-json-error-and-search-preload/tasks.md +349 -0
  15. rdc_cli-0.3.4/openspec/changes/archive/2026-02-22-fix-json-error-and-search-preload/test-plan.md +361 -0
  16. rdc_cli-0.3.4/openspec/changes/archive/2026-02-22-renderdoc-build-helper/proposal.md +97 -0
  17. rdc_cli-0.3.4/openspec/changes/archive/2026-02-22-renderdoc-build-helper/tasks.md +135 -0
  18. rdc_cli-0.3.4/openspec/changes/archive/2026-02-22-renderdoc-build-helper/test-plan.md +95 -0
  19. rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-b17-eid-mutation/proposal.md +214 -0
  20. rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-b17-eid-mutation/tasks.md +186 -0
  21. rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-b17-eid-mutation/test-plan.md +104 -0
  22. rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-b18-b19-b24-cli-ux/proposal.md +202 -0
  23. rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-b18-b19-b24-cli-ux/tasks.md +130 -0
  24. rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-b18-b19-b24-cli-ux/test-plan.md +139 -0
  25. rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-b21-b22-b23-b25-daemon-lifecycle/proposal.md +161 -0
  26. rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-b21-b22-b23-b25-daemon-lifecycle/tasks.md +157 -0
  27. rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-b21-b22-b23-b25-daemon-lifecycle/test-plan.md +122 -0
  28. rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-capture-process-leak-b26-b28/proposal.md +155 -0
  29. rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-capture-process-leak-b26-b28/tasks.md +71 -0
  30. rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-capture-process-leak-b26-b28/test-plan.md +303 -0
  31. rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-phase5b-capture-unified/proposal.md +208 -0
  32. rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-phase5b-capture-unified/tasks.md +405 -0
  33. rdc_cli-0.3.4/openspec/changes/archive/2026-02-23-phase5b-capture-unified/test-plan.md +288 -0
  34. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/pixi.toml +1 -1
  35. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/pyproject.toml +1 -1
  36. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/build-renderdoc.sh +2 -0
  37. rdc_cli-0.3.4/scripts/build_renderdoc.py +295 -0
  38. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/gen-commands.py +5 -0
  39. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/setup-renderdoc.sh +2 -0
  40. rdc_cli-0.3.4/src/rdc/_platform.py +152 -0
  41. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/_skills/references/commands-quick-ref.md +55 -1
  42. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/capture_core.py +19 -12
  43. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/cli.py +2 -0
  44. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/_helpers.py +11 -0
  45. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/capture.py +9 -7
  46. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/capture_control.py +5 -1
  47. rdc_cli-0.3.4/src/rdc/commands/doctor.py +240 -0
  48. rdc_cli-0.3.4/src/rdc/commands/remote.py +218 -0
  49. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/search.py +2 -2
  50. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/session.py +2 -0
  51. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/daemon_server.py +6 -3
  52. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/discover.py +6 -6
  53. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/_helpers.py +56 -2
  54. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/buffer.py +2 -1
  55. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/pipe_state.py +37 -7
  56. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/query.py +7 -2
  57. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/shader.py +5 -41
  58. rdc_cli-0.3.4/src/rdc/remote_core.py +188 -0
  59. rdc_cli-0.3.4/src/rdc/remote_state.py +79 -0
  60. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/services/diff_service.py +2 -6
  61. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/services/session_service.py +17 -8
  62. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/session_state.py +6 -24
  63. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/target_state.py +6 -9
  64. {rdc_cli-0.3.3 → rdc_cli-0.3.4/src/rdc_cli.egg-info}/PKG-INFO +12 -3
  65. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc_cli.egg-info/SOURCES.txt +57 -21
  66. rdc_cli-0.3.4/tests/integration/test_build_renderdoc_integration.py +14 -0
  67. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/mocks/mock_renderdoc.py +7 -3
  68. rdc_cli-0.3.4/tests/unit/test_build_renderdoc.py +505 -0
  69. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_capture.py +87 -3
  70. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_capture_control.py +43 -1
  71. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_capture_core.py +34 -6
  72. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_cli_session_flag.py +1 -0
  73. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_daemon_pipeline_extended.py +83 -29
  74. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_daemon_server_unit.py +39 -1
  75. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_diff_framebuffer.py +1 -1
  76. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_diff_service.py +15 -12
  77. rdc_cli-0.3.4/tests/unit/test_doctor.py +325 -0
  78. rdc_cli-0.3.4/tests/unit/test_platform.py +290 -0
  79. rdc_cli-0.3.4/tests/unit/test_remote_commands.py +427 -0
  80. rdc_cli-0.3.4/tests/unit/test_remote_core.py +416 -0
  81. rdc_cli-0.3.4/tests/unit/test_remote_state.py +89 -0
  82. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_search.py +7 -1
  83. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_session_commands.py +43 -6
  84. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_session_service.py +91 -4
  85. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_session_state.py +15 -7
  86. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_shader_preload.py +39 -2
  87. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_target_state.py +1 -1
  88. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_tooling_files.py +4 -0
  89. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/uv.lock +0 -1
  90. rdc_cli-0.3.3/openspec/changes/archive/2026-02-22-code-maintainability/proposal.md +0 -36
  91. rdc_cli-0.3.3/openspec/changes/archive/2026-02-22-code-maintainability/tasks.md +0 -55
  92. rdc_cli-0.3.3/openspec/changes/archive/2026-02-22-code-maintainability/test-plan.md +0 -42
  93. rdc_cli-0.3.3/src/rdc/commands/doctor.py +0 -97
  94. rdc_cli-0.3.3/tests/unit/test_doctor.py +0 -58
  95. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.commitlintrc.yml +0 -0
  96. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.githooks/pre-commit +0 -0
  97. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.githooks/pre-push +0 -0
  98. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.github/CODEOWNERS +0 -0
  99. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.github/workflows/aur.yml +0 -0
  100. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.github/workflows/commitlint.yml +0 -0
  101. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.github/workflows/docs.yml +0 -0
  102. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.gitignore +0 -0
  103. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.python-version +0 -0
  104. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/.release-please-manifest.json +0 -0
  105. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/LICENSE +0 -0
  106. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/Makefile +0 -0
  107. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/SECURITY.md +0 -0
  108. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/aur/PKGBUILD +0 -0
  109. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/aur/stable/PKGBUILD +0 -0
  110. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docker/Dockerfile +0 -0
  111. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs/cli-reference.md +0 -0
  112. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs/index.md +0 -0
  113. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs/install.md +0 -0
  114. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs/usage.md +0 -0
  115. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs/vfs.md +0 -0
  116. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/astro.config.mjs +0 -0
  117. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/package-lock.json +0 -0
  118. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/package.json +0 -0
  119. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/public/.nojekyll +0 -0
  120. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/public/favicon.svg +0 -0
  121. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/Commands.astro +0 -0
  122. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/Demo.astro +0 -0
  123. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/Features.astro +0 -0
  124. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/Footer.astro +0 -0
  125. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/Hero.astro +0 -0
  126. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/Install.astro +0 -0
  127. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/Navbar.astro +0 -0
  128. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/Philosophy.astro +0 -0
  129. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/Terminal.astro +0 -0
  130. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/components/ThemeSwitcher.astro +0 -0
  131. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/data/replay.json +0 -0
  132. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/data/stats.json +0 -0
  133. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/layouts/Base.astro +0 -0
  134. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/pages/docs/ai-integration.astro +0 -0
  135. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/pages/docs/commands.astro +0 -0
  136. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/pages/docs/design.astro +0 -0
  137. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/pages/docs/examples.astro +0 -0
  138. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/pages/docs/index.astro +0 -0
  139. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/pages/docs/install.astro +0 -0
  140. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/pages/docs/usage.astro +0 -0
  141. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/pages/docs/vfs.astro +0 -0
  142. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/pages/index.astro +0 -0
  143. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/src/styles/global.css +0 -0
  144. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/tailwind.config.mjs +0 -0
  145. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/tapes/pipeline.tape +0 -0
  146. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/tapes/quickstart.tape +0 -0
  147. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/tests/validate.mjs +0 -0
  148. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/docs-astro/tsconfig.json +0 -0
  149. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/mkdocs.yml +0 -0
  150. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/mypy.ini +0 -0
  151. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-bootstrap-foundation/proposal.md +0 -0
  152. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-bootstrap-foundation/tasks.md +0 -0
  153. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-bootstrap-foundation/test-plan.md +0 -0
  154. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-ci-hardening/proposal.md +0 -0
  155. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-ci-hardening/specs/ci/spec.md +0 -0
  156. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-ci-hardening/tasks.md +0 -0
  157. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-ci-hardening/test-plan.md +0 -0
  158. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-core-checks/proposal.md +0 -0
  159. {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
  160. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-core-checks/tasks.md +0 -0
  161. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-core-checks/test-plan.md +0 -0
  162. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-daemon-protocol/proposal.md +0 -0
  163. {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
  164. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-daemon-protocol/tasks.md +0 -0
  165. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-daemon-protocol/test-plan.md +0 -0
  166. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-daemon-transport/proposal.md +0 -0
  167. {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
  168. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-daemon-transport/tasks.md +0 -0
  169. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-daemon-transport/test-plan.md +0 -0
  170. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-fixtures-docker/proposal.md +0 -0
  171. {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
  172. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-fixtures-docker/tasks.md +0 -0
  173. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-fixtures-docker/test-plan.md +0 -0
  174. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-pixi-env/proposal.md +0 -0
  175. {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
  176. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-pixi-env/tasks.md +0 -0
  177. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-pixi-env/test-plan.md +0 -0
  178. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-session-skeleton/proposal.md +0 -0
  179. {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
  180. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-session-skeleton/tasks.md +0 -0
  181. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-session-skeleton/test-plan.md +0 -0
  182. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-structure-refactor/design.md +0 -0
  183. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-structure-refactor/proposal.md +0 -0
  184. {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
  185. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-structure-refactor/tasks.md +0 -0
  186. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-18-phase0-structure-refactor/test-plan.md +0 -0
  187. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-count-shadermap/proposal.md +0 -0
  188. {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
  189. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-count-shadermap/tasks.md +0 -0
  190. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-count-shadermap/test-plan.md +0 -0
  191. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-daemon-replay/proposal.md +0 -0
  192. {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
  193. {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
  194. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-daemon-replay/tasks.md +0 -0
  195. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-daemon-replay/test-plan.md +0 -0
  196. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-draws-events/proposal.md +0 -0
  197. {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
  198. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-draws-events/tasks.md +0 -0
  199. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-draws-events/test-plan.md +0 -0
  200. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-log/proposal.md +0 -0
  201. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-log/tasks.md +0 -0
  202. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-log/test-plan.md +0 -0
  203. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-pass-detail/proposal.md +0 -0
  204. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-pass-detail/tasks.md +0 -0
  205. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-pass-detail/test-plan.md +0 -0
  206. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-resources-passes/proposal.md +0 -0
  207. {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
  208. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-resources-passes/tasks.md +0 -0
  209. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-resources-passes/test-plan.md +0 -0
  210. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-shader-extended/proposal.md +0 -0
  211. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-shader-extended/tasks.md +0 -0
  212. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1-shader-extended/test-plan.md +0 -0
  213. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1.5-vfs/proposal.md +0 -0
  214. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1.5-vfs/tasks.md +0 -0
  215. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase1.5-vfs/test-plan.md +0 -0
  216. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-api-fix/proposal.md +0 -0
  217. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-api-fix/tasks.md +0 -0
  218. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-api-fix/test-plan.md +0 -0
  219. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-buffer-decode/proposal.md +0 -0
  220. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-buffer-decode/tasks.md +0 -0
  221. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-buffer-decode/test-plan.md +0 -0
  222. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-pipeline-state/proposal.md +0 -0
  223. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-pipeline-state/tasks.md +0 -0
  224. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-pipeline-state/test-plan.md +0 -0
  225. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-vfs-binary/proposal.md +0 -0
  226. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-vfs-binary/tasks.md +0 -0
  227. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-19-phase2-vfs-binary/test-plan.md +0 -0
  228. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-counters/proposal.md +0 -0
  229. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-counters/tasks.md +0 -0
  230. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-counters/test-plan.md +0 -0
  231. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-descriptors/proposal.md +0 -0
  232. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-descriptors/tasks.md +0 -0
  233. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-descriptors/test-plan.md +0 -0
  234. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-search/proposal.md +0 -0
  235. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-search/tasks.md +0 -0
  236. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-search/test-plan.md +0 -0
  237. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-usage/proposal.md +0 -0
  238. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-usage/tasks.md +0 -0
  239. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2-usage/test-plan.md +0 -0
  240. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.5-aur-pkgbuild/proposal.md +0 -0
  241. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.5-aur-pkgbuild/tasks.md +0 -0
  242. {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
  243. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.5-cli-enhancements/proposal.md +0 -0
  244. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.5-cli-enhancements/tasks.md +0 -0
  245. {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
  246. {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
  247. {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
  248. {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
  249. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.5-release-ci/proposal.md +0 -0
  250. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.5-release-ci/tasks.md +0 -0
  251. {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
  252. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-daemon-crash/proposal.md +0 -0
  253. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-daemon-crash/tasks.md +0 -0
  254. {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
  255. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-output-quality/proposal.md +0 -0
  256. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-output-quality/tasks.md +0 -0
  257. {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
  258. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-pipeline-extended/proposal.md +0 -0
  259. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-pipeline-extended/tasks.md +0 -0
  260. {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
  261. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-shader-api/proposal.md +0 -0
  262. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-phase2.6-shader-api/tasks.md +0 -0
  263. {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
  264. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-vfs-path-completion/proposal.md +0 -0
  265. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-vfs-path-completion/tasks.md +0 -0
  266. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-20-vfs-path-completion/test-plan.md +0 -0
  267. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-fix-daemon-startup-timeout/proposal.md +0 -0
  268. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-fix-daemon-startup-timeout/tasks.md +0 -0
  269. {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
  270. {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
  271. {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
  272. {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
  273. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-fix-pass-detection/proposal.md +0 -0
  274. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-fix-pass-detection/tasks.md +0 -0
  275. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-fix-pass-detection/test-plan.md +0 -0
  276. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-fix-vfs-pass-consistency/proposal.md +0 -0
  277. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-fix-vfs-pass-consistency/tasks.md +0 -0
  278. {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
  279. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-phase2.7-bug-filters/proposal.md +0 -0
  280. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-phase2.7-bug-filters/tasks.md +0 -0
  281. {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
  282. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-phase2.7-refactor-structure/proposal.md +0 -0
  283. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-21-phase2.7-refactor-structure/tasks.md +0 -0
  284. {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
  285. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-blackbox-bug-fixes/proposal.md +0 -0
  286. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-blackbox-bug-fixes/tasks.md +0 -0
  287. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-blackbox-bug-fixes/test-plan.md +0 -0
  288. {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
  289. {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
  290. {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
  291. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-ci-repo-hardening/proposal.md +0 -0
  292. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-ci-repo-hardening/tasks.md +0 -0
  293. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-ci-repo-hardening/test-plan.md +0 -0
  294. {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-22-code-maintainability/proposal.md +0 -0
  295. {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-22-code-maintainability/tasks.md +0 -0
  296. {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
  297. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-consistent-output-options/proposal.md +0 -0
  298. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-consistent-output-options/tasks.md +0 -0
  299. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-consistent-output-options/test-plan.md +0 -0
  300. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-design-deviation-diff-completeness/proposal.md +0 -0
  301. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-design-deviation-diff-completeness/tasks.md +0 -0
  302. {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
  303. {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
  304. {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
  305. {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
  306. {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
  307. {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
  308. {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
  309. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-draws/proposal.md +0 -0
  310. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-draws/tasks.md +0 -0
  311. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-draws/test-plan.md +0 -0
  312. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-framebuffer/proposal.md +0 -0
  313. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-framebuffer/tasks.md +0 -0
  314. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-framebuffer/test-plan.md +0 -0
  315. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-infrastructure/proposal.md +0 -0
  316. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-infrastructure/tasks.md +0 -0
  317. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-infrastructure/test-plan.md +0 -0
  318. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-pipeline/proposal.md +0 -0
  319. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-pipeline/tasks.md +0 -0
  320. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-pipeline/test-plan.md +0 -0
  321. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-resources/proposal.md +0 -0
  322. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-resources/tasks.md +0 -0
  323. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-resources/test-plan.md +0 -0
  324. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-stats/proposal.md +0 -0
  325. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-stats/tasks.md +0 -0
  326. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-diff-stats/test-plan.md +0 -0
  327. {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-22-docs-automation/proposal.md +0 -0
  328. {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-22-docs-automation/tasks.md +0 -0
  329. {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
  330. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-image-compare/proposal.md +0 -0
  331. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-image-compare/tasks.md +0 -0
  332. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-image-compare/test-plan.md +0 -0
  333. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase3a-script/proposal.md +0 -0
  334. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase3a-script/tasks.md +0 -0
  335. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase3a-script/test-plan.md +0 -0
  336. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase3c-ci-assertions/proposal.md +0 -0
  337. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase3c-ci-assertions/tasks.md +0 -0
  338. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase3c-ci-assertions/test-plan.md +0 -0
  339. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase3c-snapshot/proposal.md +0 -0
  340. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase3c-snapshot/tasks.md +0 -0
  341. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase3c-snapshot/test-plan.md +0 -0
  342. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4a-shader-debug/proposal.md +0 -0
  343. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4a-shader-debug/tasks.md +0 -0
  344. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4a-shader-debug/test-plan.md +0 -0
  345. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4b-shader-edit-replay/proposal.md +0 -0
  346. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4b-shader-edit-replay/tasks.md +0 -0
  347. {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
  348. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4c-mesh-export/proposal.md +0 -0
  349. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4c-mesh-export/tasks.md +0 -0
  350. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4c-mesh-export/test-plan.md +0 -0
  351. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4c-overlay/proposal.md +0 -0
  352. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4c-overlay/tasks.md +0 -0
  353. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase4c-overlay/test-plan.md +0 -0
  354. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase5-debug-thread/proposal.md +0 -0
  355. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase5-debug-thread/tasks.md +0 -0
  356. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase5-debug-thread/test-plan.md +0 -0
  357. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase5-pick-pixel/proposal.md +0 -0
  358. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase5-pick-pixel/tasks.md +0 -0
  359. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase5-pick-pixel/test-plan.md +0 -0
  360. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase5-tex-stats/proposal.md +0 -0
  361. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase5-tex-stats/tasks.md +0 -0
  362. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-phase5-tex-stats/test-plan.md +0 -0
  363. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-robustness-hardening/proposal.md +0 -0
  364. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-robustness-hardening/tasks.md +0 -0
  365. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-robustness-hardening/test-plan.md +0 -0
  366. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-security-hardening-2/proposal.md +0 -0
  367. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-security-hardening-2/tasks.md +0 -0
  368. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-security-hardening-2/test-plan.md +0 -0
  369. {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
  370. {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
  371. {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
  372. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-worktree-isolation/proposal.md +0 -0
  373. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-worktree-isolation/tasks.md +0 -0
  374. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-22-worktree-isolation/test-plan.md +0 -0
  375. {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-23-docs-polish/proposal.md +0 -0
  376. {rdc_cli-0.3.3/openspec/changes → rdc_cli-0.3.4/openspec/changes/archive}/2026-02-23-docs-polish/tasks.md +0 -0
  377. {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
  378. {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
  379. {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
  380. {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
  381. {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
  382. {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
  383. {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
  384. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-23-test-gpu-coverage/proposal.md +0 -0
  385. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-23-test-gpu-coverage/tasks.md +0 -0
  386. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-23-test-gpu-coverage/test-plan.md +0 -0
  387. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-23-test-mock-accuracy/proposal.md +0 -0
  388. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-23-test-mock-accuracy/tasks.md +0 -0
  389. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/changes/archive/2026-02-23-test-mock-accuracy/test-plan.md +0 -0
  390. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/specs/architecture/spec.md +0 -0
  391. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/specs/ci/spec.md +0 -0
  392. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/specs/daemon/spec.md +0 -0
  393. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/specs/foundation/spec.md +0 -0
  394. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/specs/packaging/spec.md +0 -0
  395. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/specs/session/spec.md +0 -0
  396. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/openspec/specs/tooling/spec.md +0 -0
  397. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/pixi.lock +0 -0
  398. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/release-please-config.json +0 -0
  399. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/ruff.toml +0 -0
  400. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/capture_fixture.sh +0 -0
  401. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/e2e-test.sh +0 -0
  402. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/ensure-renderdoc.sh +0 -0
  403. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/gen-replay.py +0 -0
  404. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/gen-skill-ref.py +0 -0
  405. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/gen-stats.py +0 -0
  406. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/scripts/verify-package.sh +0 -0
  407. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/setup.cfg +0 -0
  408. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/__init__.py +0 -0
  409. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/_skills/SKILL.md +0 -0
  410. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/_skills/__init__.py +0 -0
  411. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/_transport.py +0 -0
  412. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/adapter.py +0 -0
  413. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/assert_ci.py +0 -0
  414. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/assert_image.py +0 -0
  415. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/capturefile.py +0 -0
  416. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/completion.py +0 -0
  417. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/counters.py +0 -0
  418. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/debug.py +0 -0
  419. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/diff.py +0 -0
  420. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/events.py +0 -0
  421. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/export.py +0 -0
  422. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/info.py +0 -0
  423. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/install_skill.py +0 -0
  424. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/mesh.py +0 -0
  425. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/pick_pixel.py +0 -0
  426. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/pipeline.py +0 -0
  427. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/pixel.py +0 -0
  428. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/resources.py +0 -0
  429. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/script.py +0 -0
  430. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/shader_edit.py +0 -0
  431. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/snapshot.py +0 -0
  432. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/tex_stats.py +0 -0
  433. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/unix_helpers.py +0 -0
  434. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/usage.py +0 -0
  435. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/commands/vfs.py +0 -0
  436. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/daemon_client.py +0 -0
  437. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/diff/__init__.py +0 -0
  438. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/diff/alignment.py +0 -0
  439. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/diff/draws.py +0 -0
  440. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/diff/framebuffer.py +0 -0
  441. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/diff/pipeline.py +0 -0
  442. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/diff/resources.py +0 -0
  443. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/diff/stats.py +0 -0
  444. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/diff/summary.py +0 -0
  445. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/formatters/json_fmt.py +0 -0
  446. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/formatters/options.py +0 -0
  447. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/formatters/tsv.py +0 -0
  448. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/__init__.py +0 -0
  449. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/_types.py +0 -0
  450. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/capturefile.py +0 -0
  451. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/core.py +0 -0
  452. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/debug.py +0 -0
  453. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/descriptor.py +0 -0
  454. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/pixel.py +0 -0
  455. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/script.py +0 -0
  456. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/shader_edit.py +0 -0
  457. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/texture.py +0 -0
  458. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/handlers/vfs.py +0 -0
  459. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/image_compare.py +0 -0
  460. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/protocol.py +0 -0
  461. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/services/__init__.py +0 -0
  462. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/services/query_service.py +0 -0
  463. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/vfs/__init__.py +0 -0
  464. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/vfs/formatter.py +0 -0
  465. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/vfs/router.py +0 -0
  466. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc/vfs/tree_cache.py +0 -0
  467. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc_cli.egg-info/dependency_links.txt +0 -0
  468. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc_cli.egg-info/entry_points.txt +0 -0
  469. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc_cli.egg-info/requires.txt +0 -0
  470. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/src/rdc_cli.egg-info/top_level.txt +0 -0
  471. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/conftest.py +0 -0
  472. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/fixtures/hello_triangle.rdc +0 -0
  473. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/fixtures/vkcube.rdc +0 -0
  474. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/fixtures/vkcube_validation.rdc +0 -0
  475. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/integration/test_daemon_handlers_real.py +0 -0
  476. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/integration/test_mock_api_sync.py +0 -0
  477. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/integration/test_real_replay.py +0 -0
  478. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/integration/test_vulkan_samples.py +0 -0
  479. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_adapter.py +0 -0
  480. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_assert_ci_commands.py +0 -0
  481. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_assert_image_command.py +0 -0
  482. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_binary_daemon.py +0 -0
  483. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_buffer_decode.py +0 -0
  484. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_capturefile_commands.py +0 -0
  485. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_capturefile_handlers.py +0 -0
  486. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_ci_files.py +0 -0
  487. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_cli.py +0 -0
  488. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_completion.py +0 -0
  489. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_count_shadermap.py +0 -0
  490. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_counters_commands.py +0 -0
  491. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_counters_daemon.py +0 -0
  492. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_daemon_crash_regression.py +0 -0
  493. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_daemon_output_quality.py +0 -0
  494. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_daemon_shader_api_fix.py +0 -0
  495. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_daemon_shader_extended.py +0 -0
  496. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_daemon_transport.py +0 -0
  497. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_debug_commands.py +0 -0
  498. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_debug_handlers.py +0 -0
  499. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_descriptors_daemon.py +0 -0
  500. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_diff_alignment.py +0 -0
  501. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_diff_command.py +0 -0
  502. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_diff_draws.py +0 -0
  503. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_diff_pipeline.py +0 -0
  504. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_diff_resources.py +0 -0
  505. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_diff_stats.py +0 -0
  506. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_diff_summary.py +0 -0
  507. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_discover.py +0 -0
  508. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_draws_daemon.py +0 -0
  509. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_draws_events_cli.py +0 -0
  510. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_draws_events_daemon.py +0 -0
  511. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_events_commands.py +0 -0
  512. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_export_commands.py +0 -0
  513. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_export_overlay.py +0 -0
  514. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_fix1_draws_pass_name.py +0 -0
  515. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_fix2_vfs_intermediate_dirs.py +0 -0
  516. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_fix3_friendly_pass_name.py +0 -0
  517. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_formatters.py +0 -0
  518. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_gen_skill_ref.py +0 -0
  519. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_image_compare.py +0 -0
  520. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_info_commands.py +0 -0
  521. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_install_skill.py +0 -0
  522. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_json_errors.py +0 -0
  523. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_mesh_commands.py +0 -0
  524. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_mesh_handler.py +0 -0
  525. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_mock_capture_types.py +0 -0
  526. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_mock_renderdoc.py +0 -0
  527. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_output_options.py +0 -0
  528. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_overlay_handler.py +0 -0
  529. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pick_pixel_commands.py +0 -0
  530. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pick_pixel_daemon.py +0 -0
  531. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pipeline_cli_phase27.py +0 -0
  532. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pipeline_commands.py +0 -0
  533. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pipeline_daemon.py +0 -0
  534. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pipeline_section_routing.py +0 -0
  535. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pipeline_shader.py +0 -0
  536. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pipeline_state.py +0 -0
  537. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pixel_history_commands.py +0 -0
  538. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pixel_history_daemon.py +0 -0
  539. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_pixi_files.py +0 -0
  540. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_protocol.py +0 -0
  541. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_query_service.py +0 -0
  542. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_resources_commands.py +0 -0
  543. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_resources_filter.py +0 -0
  544. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_script_command.py +0 -0
  545. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_script_handler.py +0 -0
  546. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_shader_edit_commands.py +0 -0
  547. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_shader_edit_handlers.py +0 -0
  548. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_skill_structure.py +0 -0
  549. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_snapshot_command.py +0 -0
  550. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_tex_stats_commands.py +0 -0
  551. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_tex_stats_handler.py +0 -0
  552. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_unix_helpers_commands.py +0 -0
  553. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_usage_commands.py +0 -0
  554. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_usage_daemon.py +0 -0
  555. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_vfs_binary.py +0 -0
  556. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_vfs_commands.py +0 -0
  557. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_vfs_completion.py +0 -0
  558. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_vfs_daemon.py +0 -0
  559. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_vfs_formatter.py +0 -0
  560. {rdc_cli-0.3.3 → rdc_cli-0.3.4}/tests/unit/test_vfs_router.py +0 -0
  561. {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: ubuntu-latest
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.3
4
- Summary: Unix-friendly CLI for RenderDoc .rdc captures
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** (recommended any Linux distro)
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** (recommended any Linux distro)
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] [-i] [--json]"
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 &mdash; 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 &rarr; 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> &mdash; Python version matches <code>.pyd</code></li>
68
+ <li><code>win-vs-build-tools</code> &mdash; Visual Studio Build Tools detected</li>
69
+ <li><code>win-renderdoc-install</code> &mdash; 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