plesty-bench 0.3.2__tar.gz → 0.4.0.dev1__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 (228) hide show
  1. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/.gitlab-ci.yml +42 -8
  2. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/CHANGELOG.md +315 -0
  3. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/PKG-INFO +27 -30
  4. plesty_bench-0.4.0.dev1/README.md +68 -0
  5. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/api_reference.md +2 -2
  6. plesty_bench-0.4.0.dev1/docs/cli/files.md +152 -0
  7. plesty_bench-0.4.0.dev1/docs/cli/index.md +44 -0
  8. plesty_bench-0.4.0.dev1/docs/cli/plesty-bench.md +106 -0
  9. plesty_bench-0.4.0.dev1/docs/cli/plesty-server.md +176 -0
  10. plesty_bench-0.4.0.dev1/docs/cross_bench.md +198 -0
  11. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/design/agent.md +24 -3
  12. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/design/architecture.md +19 -4
  13. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/design/console.md +49 -6
  14. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/design/cross_platform.md +6 -5
  15. plesty_bench-0.4.0.dev1/docs/design/experiments.md +128 -0
  16. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/design/index.md +3 -0
  17. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/design/installer.md +13 -6
  18. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/design/packaging.md +51 -18
  19. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/design/ports.md +1 -1
  20. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/design/processes.md +6 -3
  21. plesty_bench-0.4.0.dev1/docs/gui/devices.md +226 -0
  22. plesty_bench-0.4.0.dev1/docs/gui/experiments.md +180 -0
  23. plesty_bench-0.4.0.dev1/docs/gui/index.md +76 -0
  24. plesty_bench-0.4.0.dev1/docs/gui/menus.md +196 -0
  25. plesty_bench-0.4.0.dev1/docs/imgs/bench_overview.svg +73 -0
  26. plesty_bench-0.4.0.dev1/docs/imgs/cross_bench.svg +55 -0
  27. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-data-collapse.png +0 -0
  28. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-data-expand.png +0 -0
  29. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-clear_log.png +0 -0
  30. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-control.png +0 -0
  31. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-edit.png +0 -0
  32. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-field_test.png +0 -0
  33. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-install.png +0 -0
  34. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-remove.png +0 -0
  35. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-restart.png +0 -0
  36. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-start.png +0 -0
  37. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-stop.png +0 -0
  38. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-uninstall.png +0 -0
  39. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-update.png +0 -0
  40. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-exp-create.png +0 -0
  41. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-exp-duplicate.png +0 -0
  42. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-exp-load.png +0 -0
  43. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-experiment-abort.png +0 -0
  44. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-experiment-configure.png +0 -0
  45. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-experiment-install.png +0 -0
  46. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-experiment-open.png +0 -0
  47. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-experiment-pause.png +0 -0
  48. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-experiment-remove.png +0 -0
  49. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-experiment-run.png +0 -0
  50. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-experiment-stop.png +0 -0
  51. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-experiment-update.png +0 -0
  52. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-fleet-control.png +0 -0
  53. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-fleet-declare.png +0 -0
  54. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-fleet-down.png +0 -0
  55. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-fleet-refresh.png +0 -0
  56. plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-fleet-up.png +0 -0
  57. plesty_bench-0.4.0.dev1/docs/imgs/gui/capture.py +842 -0
  58. plesty_bench-0.4.0.dev1/docs/imgs/gui/capture_cross_bench.py +317 -0
  59. plesty_bench-0.4.0.dev1/docs/imgs/gui/control-window.png +0 -0
  60. plesty_bench-0.4.0.dev1/docs/imgs/gui/detail-card.png +0 -0
  61. plesty_bench-0.4.0.dev1/docs/imgs/gui/detail-jobs.png +0 -0
  62. plesty_bench-0.4.0.dev1/docs/imgs/gui/detail-log.png +0 -0
  63. plesty_bench-0.4.0.dev1/docs/imgs/gui/detail-reports.png +0 -0
  64. plesty_bench-0.4.0.dev1/docs/imgs/gui/detail-terminal.png +0 -0
  65. plesty_bench-0.4.0.dev1/docs/imgs/gui/detail-traffic.png +0 -0
  66. plesty_bench-0.4.0.dev1/docs/imgs/gui/devices-card.png +0 -0
  67. plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-add-experiment.png +0 -0
  68. plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-agent.png +0 -0
  69. plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-configure-tab2.png +0 -0
  70. plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-configure.png +0 -0
  71. plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-create-run.png +0 -0
  72. plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-declare.png +0 -0
  73. plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-device-config-tab2.png +0 -0
  74. plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-device-config.png +0 -0
  75. plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-field-test.png +0 -0
  76. plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-fleet-file.png +0 -0
  77. plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-load-from.png +0 -0
  78. plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-problem.png +0 -0
  79. plesty_bench-0.4.0.dev1/docs/imgs/gui/run-data.png +0 -0
  80. plesty_bench-0.4.0.dev1/docs/imgs/gui/run-log.png +0 -0
  81. plesty_bench-0.4.0.dev1/docs/imgs/gui/run-report.png +0 -0
  82. plesty_bench-0.4.0.dev1/docs/imgs/gui/run-visualization.png +0 -0
  83. plesty_bench-0.4.0.dev1/docs/imgs/gui/runs-card.png +0 -0
  84. plesty_bench-0.4.0.dev1/docs/imgs/gui/start-device.gif +0 -0
  85. plesty_bench-0.4.0.dev1/docs/imgs/gui/status-line.png +0 -0
  86. plesty_bench-0.4.0.dev1/docs/imgs/gui/take-control.gif +0 -0
  87. plesty_bench-0.4.0.dev1/docs/imgs/gui/window-devices.png +0 -0
  88. plesty_bench-0.4.0.dev1/docs/imgs/gui/window-experiments.png +0 -0
  89. plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-completed.png +0 -0
  90. plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-devices-before.png +0 -0
  91. plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-devices-during.png +0 -0
  92. plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-dialog-agent.png +0 -0
  93. plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-dialog-benches.png +0 -0
  94. plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-dialog-configure-tab2.png +0 -0
  95. plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-dialog-create-run.png +0 -0
  96. plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-report-fss.png +0 -0
  97. plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-report-setup.png +0 -0
  98. plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-report.gif +0 -0
  99. plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-run.gif +0 -0
  100. plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-visualization.png +0 -0
  101. plesty_bench-0.4.0.dev1/docs/index.md +56 -0
  102. plesty_bench-0.4.0.dev1/docs/install.md +104 -0
  103. plesty_bench-0.4.0.dev1/docs/toc.yaml +45 -0
  104. plesty_bench-0.4.0.dev1/docs/usage/experiment.md +210 -0
  105. plesty_bench-0.4.0.dev1/docs/usage/field_test.md +84 -0
  106. plesty_bench-0.4.0.dev1/docs/usage/first_bench.md +115 -0
  107. plesty_bench-0.4.0.dev1/docs/usage/headless.md +52 -0
  108. plesty_bench-0.4.0.dev1/docs/usage/index.md +18 -0
  109. {plesty_bench-0.3.2/docs → plesty_bench-0.4.0.dev1/docs/usage}/maintenance.md +36 -13
  110. plesty_bench-0.4.0.dev1/docs/usage/modules.md +94 -0
  111. plesty_bench-0.4.0.dev1/docs/usage/remote.md +90 -0
  112. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/gl-secret-detection-report.json +6 -6
  113. plesty_bench-0.4.0.dev1/packaging/windows/install.ps1 +359 -0
  114. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/windows/plesty-server.iss +22 -7
  115. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/windows/uninstall.ps1 +30 -10
  116. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/bench/__init__.py +2 -0
  117. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/assets/console.qss +94 -5
  118. plesty_bench-0.4.0.dev1/plesty/server/assets/report.css +394 -0
  119. plesty_bench-0.4.0.dev1/plesty/server/assets/report.html +113 -0
  120. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/cli/main.py +144 -0
  121. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/__init__.py +38 -0
  122. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/agent.py +42 -2
  123. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/catalogue.py +14 -2
  124. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/device.py +36 -1
  125. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/device_manager.py +36 -5
  126. plesty_bench-0.4.0.dev1/plesty/server/model/experiment.py +419 -0
  127. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/fleet.py +78 -7
  128. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/home.py +20 -0
  129. plesty_bench-0.4.0.dev1/plesty/server/model/peer.py +187 -0
  130. plesty_bench-0.4.0.dev1/plesty/server/presenter/bench.py +3352 -0
  131. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/services/__init__.py +78 -0
  132. plesty_bench-0.4.0.dev1/plesty/server/services/experiments.py +645 -0
  133. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/services/installer.py +214 -5
  134. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/services/jobs.py +23 -1
  135. plesty_bench-0.4.0.dev1/plesty/server/services/nodes.py +266 -0
  136. plesty_bench-0.4.0.dev1/plesty/server/services/problem_report.py +232 -0
  137. plesty_bench-0.4.0.dev1/plesty/server/services/run_report.py +789 -0
  138. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/view/control.py +39 -6
  139. plesty_bench-0.4.0.dev1/plesty/server/view/dialogs.py +3553 -0
  140. plesty_bench-0.4.0.dev1/plesty/server/view/window.py +3199 -0
  141. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/pyproject.toml +31 -10
  142. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/reports/check.json +4 -4
  143. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_bench.py +84 -1
  144. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_cli.py +28 -1
  145. plesty_bench-0.4.0.dev1/tests/test_experiments.py +1269 -0
  146. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_installer.py +122 -1
  147. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_jobs.py +30 -1
  148. plesty_bench-0.4.0.dev1/tests/test_nodes.py +396 -0
  149. plesty_bench-0.4.0.dev1/tests/test_problem_report.py +183 -0
  150. plesty_bench-0.4.0.dev1/tests/test_run_report.py +554 -0
  151. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_view.py +407 -24
  152. plesty_bench-0.4.0.dev1/tests/test_view_experiment.py +1674 -0
  153. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/uv.lock +26 -14
  154. plesty_bench-0.3.2/README.md +0 -71
  155. plesty_bench-0.3.2/docs/bench_setup.md +0 -154
  156. plesty_bench-0.3.2/docs/cli.md +0 -136
  157. plesty_bench-0.3.2/docs/console.md +0 -180
  158. plesty_bench-0.3.2/docs/field_test.md +0 -85
  159. plesty_bench-0.3.2/docs/index.md +0 -137
  160. plesty_bench-0.3.2/docs/modules.md +0 -118
  161. plesty_bench-0.3.2/docs/remote.md +0 -148
  162. plesty_bench-0.3.2/docs/running.md +0 -130
  163. plesty_bench-0.3.2/docs/toc.yaml +0 -29
  164. plesty_bench-0.3.2/packaging/windows/install.ps1 +0 -254
  165. plesty_bench-0.3.2/plesty/server/presenter/bench.py +0 -1636
  166. plesty_bench-0.3.2/plesty/server/view/dialogs.py +0 -1228
  167. plesty_bench-0.3.2/plesty/server/view/window.py +0 -1257
  168. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/.gitignore +0 -0
  169. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/LICENSE +0 -0
  170. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/LICENSES/LGPL-3.0-or-later.txt +0 -0
  171. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/REUSE.toml +0 -0
  172. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/install.sh +0 -0
  173. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/plesty-mark.png +0 -0
  174. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/server_dist.py +0 -0
  175. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/windows/build-installer.ps1 +0 -0
  176. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/windows/probes/README.md +0 -0
  177. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/windows/probes/probe.iss +0 -0
  178. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/windows/probes/probe.ps1 +0 -0
  179. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/windows/probes/probe2.iss +0 -0
  180. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/windows/probes/probe2.ps1 +0 -0
  181. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/bench/cli.py +0 -0
  182. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/bench/client.py +0 -0
  183. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/__init__.py +0 -0
  184. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/__main__.py +0 -0
  185. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/assets/env.example +0 -0
  186. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/assets/fleet.example.yaml +0 -0
  187. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/assets/plesty-mark.svg +0 -0
  188. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/cli/__init__.py +0 -0
  189. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/config.yaml +0 -0
  190. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/host.py +0 -0
  191. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/envfile.py +0 -0
  192. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/errors.py +0 -0
  193. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/field_test.py +0 -0
  194. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/job.py +0 -0
  195. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/ports.py +0 -0
  196. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/process.py +0 -0
  197. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/purge.py +0 -0
  198. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/traffic.py +0 -0
  199. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/presenter/__init__.py +0 -0
  200. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/reexec.py +0 -0
  201. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/services/agent.py +0 -0
  202. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/services/catalogue.py +0 -0
  203. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/services/control.py +0 -0
  204. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/services/gitbin.py +0 -0
  205. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/services/launch.py +0 -0
  206. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/services/supervisor.py +0 -0
  207. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/view/__init__.py +0 -0
  208. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/view/app.py +0 -0
  209. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/view/workers.py +0 -0
  210. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/__init__.py +0 -0
  211. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/conftest.py +0 -0
  212. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/fake_server.py +0 -0
  213. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_agent.py +0 -0
  214. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_agent_settings.py +0 -0
  215. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_catalogue.py +0 -0
  216. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_control.py +0 -0
  217. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_device_manager.py +0 -0
  218. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_field_test.py +0 -0
  219. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_fleet.py +0 -0
  220. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_gitbin.py +0 -0
  221. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_home.py +0 -0
  222. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_host.py +0 -0
  223. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_job.py +0 -0
  224. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_packaging.py +0 -0
  225. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_purge.py +0 -0
  226. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_server.py +0 -0
  227. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_supervisor.py +0 -0
  228. {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_traffic.py +0 -0
@@ -87,6 +87,14 @@ tests:windows:
87
87
  rules:
88
88
  - if: $CI_COMMIT_TAG
89
89
 
90
+ # The installers and the release page are for released versions only. A
91
+ # snapshot tag (v0.4.0.dev1) publishes both wheels to PyPI and stops there:
92
+ # an installer pins the version it installs, and a .dev one is not something a
93
+ # bench should be pinned to — the installer job refuses it outright.
94
+ .released-version-rules:
95
+ rules:
96
+ - if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/
97
+
90
98
  release:server-wheel:
91
99
  stage: release
92
100
  extends: .release-rules
@@ -139,10 +147,10 @@ release:server-wheel:
139
147
 
140
148
  installer:windows:
141
149
  stage: release
142
- # on tags, and on demand from an installer/<name> branch to prove a change
150
+ # on release tags (not snapshots), and on demand from an installer/<name> branch to prove a change
143
151
  # to the Inno Setup script before it is tagged
144
152
  rules:
145
- - if: $CI_COMMIT_TAG
153
+ - if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/
146
154
  - if: $CI_COMMIT_BRANCH =~ /^installer\//
147
155
  tags:
148
156
  - saas-windows-medium-amd64
@@ -191,7 +199,7 @@ installer:windows:
191
199
  # distributions — the Releases page is the download list.
192
200
  release:assets:
193
201
  stage: release
194
- extends: .release-rules
202
+ extends: .released-version-rules
195
203
  image: registry.gitlab.com/gitlab-org/release-cli:latest
196
204
  needs:
197
205
  - job: installer:windows
@@ -214,14 +222,40 @@ release:assets:
214
222
  grep -q "release_version=\"$version\"" install.sh || { echo "install.sh not stamped"; exit 1; }
215
223
  curl --fail --silent --show-error --header "JOB-TOKEN: $CI_JOB_TOKEN" \
216
224
  --upload-file install.sh "$REGISTRY/install.sh"
225
+ - |
226
+ # The release page says what this release changed. It used to carry one
227
+ # fixed sentence, identical on every tag, so the Releases list read as
228
+ # eight copies of the same paragraph and "See CHANGELOG.md" was the only
229
+ # thing that ever differed -- a pointer where the note should have been.
230
+ # The changelog entry for the tag is the note; a tag without one fails
231
+ # the job rather than publishing an empty release.
232
+ version="${CI_COMMIT_TAG#v}"
233
+ awk -v v="$version" '
234
+ $0 == "## [" v "]" || index($0, "## [" v "] ") == 1 { found = 1; next }
235
+ found && /^## \[/ { exit }
236
+ found { print }
237
+ ' CHANGELOG.md > changes.md
238
+ grep -q '[^[:space:]]' changes.md || { echo "no CHANGELOG entry for $version"; exit 1; }
239
+ {
240
+ echo "**Install** — Windows: run the installer below; it installs uv and the"
241
+ echo "application from PyPI and adds a Start-menu entry and an optional desktop"
242
+ echo "shortcut. macOS and Linux: download \`install.sh\` and run it with \`sh\`."
243
+ echo "Developer machines: \`uv tool install plesty-bench\`."
244
+ echo
245
+ echo "**Update a bench** — \`uv tool upgrade plesty-server\` on macOS and Linux."
246
+ echo "On Windows use the *Update PLESTY Bench* Start-menu entry: since 0.3.3 the"
247
+ echo "application lives in its own environment there, not in uv's tool environment."
248
+ echo
249
+ echo "## What changed in $CI_COMMIT_TAG"
250
+ cat changes.md
251
+ } > release_notes.md
252
+ cat release_notes.md
217
253
  release:
218
254
  tag_name: $CI_COMMIT_TAG
219
255
  name: "plesty-server $CI_COMMIT_TAG"
220
- description: >-
221
- Windows: run the installer (it installs uv and the application from PyPI;
222
- Start-menu entry, optional desktop shortcut). macOS and Linux: download
223
- install.sh and run it with sh. Developer machines: uv tool install plesty-bench.
224
- Update a bench with uv tool upgrade plesty-server. See CHANGELOG.md.
256
+ # A path, not prose: release-cli reads the file the script above wrote, so
257
+ # the note is this release's changelog entry rather than a constant.
258
+ description: release_notes.md
225
259
  assets:
226
260
  links:
227
261
  - name: "plesty-server-$CI_COMMIT_TAG-windows-setup.exe (Windows installer)"
@@ -2,6 +2,321 @@
2
2
 
3
3
  The format is based on [Keep a Changelog](https://keepachangelog.com).
4
4
 
5
+ ## [Unreleased]
6
+
7
+ ### Added
8
+ - **A run keeps its own report.** When a run ends — completed, stopped,
9
+ aborted or crashed — the job writes `report.html` into the run directory,
10
+ beside the data it reports on. A run directory handed to somebody months
11
+ later now reads itself without the console that made it; *Export HTML* is
12
+ still there and still writes a copy wherever you point it. A report that
13
+ cannot be compiled is a line in the job log, never a failed run.
14
+ - **Open run** opens the selected run's directory — records, journal,
15
+ analyses and report. Offered while the run is going, which is when watching
16
+ the files appear is most useful, and on a run loaded from elsewhere.
17
+ - **The views come out of the pane.** *Console ▸ Open these views in a window*,
18
+ on the views' own menu bar, floats the whole viewer — every panel, its menus
19
+ and its layout — into a window of its own, which is what a plot read closely
20
+ wants. *Dock them back here*, or the button the pane then shows, returns it.
21
+ It is the only way to take the views out as a whole: the viewer's own
22
+ *Panels* menu hides and shows them, and dragging one out by its title bar
23
+ floats that one.
24
+ - **Starting a run says what it is waiting on.** Every device the setup names
25
+ is opened on its bench before the module is launched — seconds of hardware
26
+ per instrument, during which the console showed nothing and a working Run
27
+ read as a broken one. A dialog now names the device being opened. It is
28
+ closable and closing it stops nothing: the run starts either way, and
29
+ Devices has the detail.
30
+ - **Configure… changes the selected run, and nothing else.** Create run copies
31
+ the chosen configuration file into the run directory as `config.yaml`, and
32
+ the run is started and resumed with that copy. With a created run selected,
33
+ Configure edits the copy — choosing another file gives the run that file —
34
+ and leaves the module's files and the other runs as they are; a started run
35
+ shows its configuration read-only. Duplicate repeats the run's own copy.
36
+ Before, Configure changed the experiment, so a run created a moment earlier
37
+ was still started with the file it was created with.
38
+ - **The measurement report has a Device setup section**: each device's bench,
39
+ the address the run reached it on and where that bench sees the shared data
40
+ disk, with the run's shared point and raw data folder — as plesty-lib
41
+ journals them when a run starts. A resumed run lists each start, since the
42
+ ports change between starts; a run from an older plesty-lib says it did not
43
+ record them.
44
+ - **The measurement report switches between light and dark** — Auto, the
45
+ reader's system setting, or Light or Dark from the switch in its header.
46
+ The switch is radio buttons read by the stylesheet, so the report still
47
+ runs no script.
48
+ - **An experiment runs with its module's `setup.yaml`** — plesty-lib's
49
+ contract (`plesty.lib.experiment.setup`). Every experiment module ships one
50
+ at its root: a fleet file's `devices:` with bench entries beside them as
51
+ `benches:` — where each bench's agent listens, its token, and where it sees
52
+ the lab's shared data disk, each written as the variable holding it
53
+ (`${SPEC_PC_HOST}`); the values live in the checkout's `.env`. Installing
54
+ the module seeds that `.env` with a line per variable. The bench without an
55
+ address is the machine the experiment runs on; a device names its bench,
56
+ and no port. **Run** checks that every bench sees the one shared disk — a
57
+ probe written here, read and answered through each other bench's agent
58
+ (`plesty-server share-check`) — then has each device served by its bench
59
+ (`plesty-server serve`): declared from its entry when that bench lacks it,
60
+ started on a port the bench picks, with `DEVICE_DATA_PATH`, its bench's
61
+ view of the disk, under which it may write anywhere. The run is given
62
+ `PLESTY_DATA` and each `<DEVICE>_ADDRESS` from the port its bench said;
63
+ this replaces working out a run's devices from the fleet's ports. The
64
+ devices a run started are stopped when it ends, however it ends — the run's
65
+ job waits on the module and stops them (`_job experiment-run`), and Kill
66
+ stops them itself. Runs go
67
+ to the root the module declares, on the shared disk (`pol-pl` →
68
+ `<PLESTY_DATA>/pol-pl`), so a device on any bench can write into a run;
69
+ without a shared point they stay under this bench's home. A value set by hand in
70
+ the `.env` or the declaration still wins, and a value still missing is
71
+ named with its variable when a run cannot start. *Configure… ▸ Device
72
+ Setup* replaces the Environment tab and edits it — the benches by value,
73
+ this machine's first, saved as variables in the setup and values in the
74
+ `.env`, then a group per device. *Server ▸ Benches…* stays the list of
75
+ benches this console drives. A fleet file may carry `benches:`, so `fleet
76
+ up -f setup.yaml` works. Needs the plesty-lib that ships the contract.
77
+ - **Hub ▸ Load from… puts a repository on this machine onto the bench, where
78
+ it lives.** Pick a module's folder and a branch: the bench reads what the
79
+ module is from its `pyproject.toml` (`[tool.plesty] module_type`), checks out
80
+ the branch — refused over uncommitted changes — and records the folder, its
81
+ version and commit under `<home>/packages/<package>/`, running it with the
82
+ folder's own `.venv` (made with `uv sync` only when there is none). Nothing
83
+ is copied; removing it forgets the record and never deletes the folder. A
84
+ loaded module serves only a declaration that names its folder (`path:`), so
85
+ loading one never changes what an existing declaration runs. *Create run*
86
+ offers a loaded experiment as `pol-pl (local)`. Also `plesty-server module
87
+ load FOLDER [--ref BRANCH]`.
88
+ - **An experiment's configuration is laid out, not listed.** *Configure…*'s
89
+ first tab is **Experiment Config**: each group a titled box, a list of
90
+ records as rows with + and − at the end of each, grey text in an empty field
91
+ taken with Tab, and a picker over the module's `config/*.yaml` — each file
92
+ keeps its edits, and the one chosen when saving is the one runs read. The
93
+ YAML tab became **Edit YAML…**, which opens the file with the form's edits in
94
+ it; a file nobody changed is written back as it was, comments and all. The
95
+ dialog can be made as narrow as a key and a field allow. A double-click on an
96
+ experiment opens *Configure…*, on a device *Edit ▸ Device config…*; *Hub ▸
97
+ Search & install…* is now **Hub ▸ Marketplace…**.
98
+ - **The run report shows what each analyzer says it found** (plesty-lib#55).
99
+ An analyzer's own report, saved beside its outputs as
100
+ `analysis/<name>.report.json`, becomes the analysis section: its sentence, its
101
+ tables — units, grouped headings, footnotes, math — and its figures, rendered
102
+ by plesty-lib as inline SVG and MathML, so the file still fetches and runs
103
+ nothing. The outputs a report covers (same provenance) are no longer guessed
104
+ at from their array names as well. A console whose plesty-lib predates
105
+ reports, or refuses one from a newer version, reads the outputs as before.
106
+ - **A finished run compiles into one HTML report** (#13). *Export HTML* on the
107
+ Report pane lays out what a measurement is worth to somebody who was not
108
+ standing there: what was run and how it ended, the module and instruments it
109
+ recorded, the configuration frozen into its plan, the operator's notes, what
110
+ each analyzer made of the sweep with the options it was given, and every
111
+ committed record.
112
+
113
+ One file — the stylesheet is inlined, there is no script and nothing is
114
+ fetched, because a report has to open from an attachment and in ten years.
115
+ The markup is an asset and the colours are plesty-lib's palette tokens, so
116
+ nothing about how it looks is decided in Python.
117
+
118
+ The run is read directly rather than through plesty-lib's document readers:
119
+ an experiment runs in an environment of its own, so the library that wrote a
120
+ run is routinely newer than the console's, and a bench on 0.4.1 would
121
+ otherwise refuse to report a run it can plainly see.
122
+
123
+ - **Help ▸ Report a problem fills the report in and filters it** (#14). The
124
+ first question a maintainer asks is what were you running and on what, so the
125
+ entry answers it: the machine, the interpreter, the Plesty versions, every
126
+ declared device with its package, version, state and port, and the tail of
127
+ each device log. What is sent is shown in full and stays editable — a review
128
+ is only real if what is on screen is what goes.
129
+
130
+ The bench files nothing itself. It holds no credential that could write to
131
+ the tracker, and giving it one would put a token on every lab machine for a
132
+ convenience; *Copy & open tracker* puts the report on the clipboard and opens
133
+ the project's new-issue page with the title filled in, and the operator
134
+ submits as themselves. Nothing that looks like a credential leaves the bench:
135
+ a device environment is reported by key and never by value, and every
136
+ captured line — the operator's own words included — loses assignments named
137
+ like secrets, credentials inside URLs, tokens that announce themselves by
138
+ prefix, and Authorization headers. Matched on names rather than shapes, so a
139
+ commit hash stays a commit hash.
140
+
141
+ - **Experiments are set up, run and watched from the console.** `fleet.yaml`
142
+ grows an `experiments:` section beside `devices:`, and the Experiment tab is
143
+ the Devices half's shape: what this bench holds above, the detail of the
144
+ selected one below, with Status, Runs, Log, Data and Visualization panes.
145
+
146
+ **The settings form is the module's, not ours.** An experiment publishes
147
+ what it takes — `python -m <module> --manifest` prints every configuration
148
+ key with its type, unit, bounds and meaning — and *Configure…* renders that
149
+ with the same schema-to-widget mapping a device panel uses. The console
150
+ holds no per-experiment code and cannot offer a setting the module does not
151
+ take, or bound one differently from the way the module bounds it. A key
152
+ whose value is a document is offered as text; the YAML tab is the file
153
+ itself and is what is saved, so a key the schema does not declare — and the
154
+ comments explaining one — survive an edit made in the form. The Environment
155
+ tab names what the module reads and what of it is not set.
156
+
157
+ **A run is a detached job**, so closing the console does not stop the
158
+ measurement, and *Run* becomes *Resume* on a run that stopped unfinished.
159
+ *Pause* holds it before the next step with the rig still connected — the
160
+ difference from stopping and resuming, which pays a reconnect, a preflight
161
+ and possibly a re-home to come back. *Stop* lets the step in flight commit
162
+ first; *Abort* does not wait, releasing the instruments at once and leaving
163
+ that step to run again. All three take effect at a step boundary, where the
164
+ journal commits; a request made during a long exposure is pending, not
165
+ ignored, and the Status pane says so. *Report…* records what happened —
166
+ a helium top-up, a realignment — in the journal between the steps it sits
167
+ between.
168
+
169
+ **Status is read, never asked.** The journal, the plan and the progress file
170
+ are this bench's own files: a refresh costs a directory read and cannot
171
+ disturb a run. The journal is replayed here rather than through plesty-lib,
172
+ because the run was written by a module whose library version has nothing to
173
+ do with this console's — delegating would make the same run read differently
174
+ on two benches.
175
+
176
+ Visualization is a placeholder that says why: an experiment's views need its
177
+ own dependencies, so *Watch run* opens the module's viewer as a process of
178
+ its own.
179
+
180
+ An experiment is installed from its repository rather than from a release —
181
+ its `config/` and `.env.example` are in the checkout, not in the wheel.
182
+ Needs a module whose command line is built on
183
+ `plesty.lib.experiment.ExperimentCLI` (plesty-lib#54).
184
+
185
+ - **One console for several benches.** A bench declares `role: master` or
186
+ `role: node` under *Server ▸ Configure…*. A master lists the other benches
187
+ under *Server ▸ Benches…* — name, address and agent token, kept in
188
+ `<home>/peers.yaml` — and shows their devices in the device table beside its
189
+ own, under a new **Host** column. It starts, stops, restarts, installs and
190
+ updates them, and opens their control panels, all over the agent's existing
191
+ `exec` and `device` requests; an install on another bench is started there
192
+ and its job id reported, since this console keeps no job list for a device it
193
+ does not host. One master to a group of benches and no chaining. It is how a
194
+ console is configured and not a permission: the agent checks one shared
195
+ secret and knows no caller identity, so a bench's token drives that bench
196
+ whoever holds it.
197
+
198
+ A device on another bench has no *Log*, *Jobs*, *Reports*, *Terminal* or
199
+ *Traffic*: all five read files in the bench that hosts it, and reading a log
200
+ tail off another machine every three seconds is the cost this avoids. Those
201
+ tabs are disabled, and the pane says which bench to read them on. Editing the
202
+ declaration, clearing the log, uninstalling, removing from the fleet and the
203
+ field test stay with the host bench too.
204
+
205
+ - **The Hub offers experiments as well as devices.** *Catalogue* is now
206
+ **Hub**, and *Search & install…* lists the registry's experiment modules
207
+ beside its device modules, with a kind filter and a Kind column. The install
208
+ path is unchanged — it was always keyed by the package rather than by a
209
+ device. Only modules at the quantum standard are offered, as before;
210
+ analyzers are not listed, an analyzer being a library an experiment brings
211
+ with it.
212
+
213
+ - **Control is a button, and each kind opens what it says.** *Control* on the
214
+ detail card opens the selected device's controls in a window of its own,
215
+ named for it; *Control* on the device table opens the wall — one window with
216
+ the controls of every running device. They were one window before, which
217
+ meant asking for one device's controls showed the last device's docked beside
218
+ them.
219
+
220
+ - **Fleet up and Fleet down reach the nodes.** A master brings a rig up, and
221
+ the rig is every bench the table shows; each node is asked for its own
222
+ working fleet, which is that bench's declaration. A node that refuses costs a
223
+ line in the status bar and not the rest of the rig.
224
+
225
+ - **plesty-lib 0.4.1 is the floor.** A panel on 0.4.0 cannot read or write a
226
+ grouped configuration parameter at all — it addresses one by its bare name,
227
+ which the device refuses — and sends an optional numeric argument as the text
228
+ typed into it. Both are fixed in 0.4.1, along with the panel's layout,
229
+ reading on request rather than on a clock, and units with real exponents.
230
+
231
+ ### Changed
232
+ - **The Report pane says something about the report.** It names the run's own
233
+ `report.html` — when it was written and how big — or says when it will have
234
+ one. The operator's notes, which the pane also called "reports", are now
235
+ under **Notes**: two different things under one heading was what made the
236
+ pane hard to read.
237
+ - **Requires plesty-lib 0.5.0.dev6** (was 0.5.0.dev5), which retires
238
+ `PLESTY_DATA_DIR` and `PLESTY_DATA_MOUNT` for the one shared root
239
+ `PLESTY_DATA` and makes a manifest's `run_root` relative to the shared point.
240
+ A run's environment is built from that contract, so a console on dev5 and a
241
+ module on dev6 do not agree on where a run writes. Still a prerelease until
242
+ the bound moves to 0.5.0, but the Windows installer needs no flag for it: it
243
+ installs with pip, which takes a prerelease a requirement names.
244
+ - **The tables refresh every second**, not every three: the Progress column
245
+ follows a run step by step instead of jumping several at a time.
246
+ - **The report's raw data is one table per kind of step**, one short line per
247
+ record: a field the same in every row is said once above the table, a file
248
+ shows by its name with its folder said once, and a timestamp by its time of
249
+ day with its date said once. A step recorded once, such as the rig's
250
+ identity, is a list of its fields.
251
+ - **The window has two halves, Devices and Experiment**, and the menu bar reads
252
+ File, Edit, Device, Experiment, Hub, Server, View, Help. The Experiment tab is
253
+ empty and every item of the Experiment menu is disabled in this version: they
254
+ are built now so that the window does not change shape when the work behind
255
+ them lands.
256
+ - **The documentation is rewritten for the people who use a bench.** It is in
257
+ three parts — *GUI*, the window element by element with its real buttons,
258
+ dialogs and screenshots; *CLI*, every command, file and setting; *Usages*,
259
+ tasks step by step — after *Install* and a walkthrough of a pol-pl run
260
+ across two benches, filmed from a real run. Every page was checked against
261
+ the code; `docs/imgs/gui/capture.py` and `capture_cross_bench.py` make the
262
+ images again.
263
+
264
+ ## [0.3.3] - 2026-09-09
265
+
266
+ ### Changed
267
+ - **The release page says what the release changed.** Every release carried the
268
+ same fixed paragraph, so the Releases list read as eight copies of one
269
+ sentence and `See CHANGELOG.md` was the only part that could be right. The
270
+ note is now the changelog entry for the tag, and a tag without one fails the
271
+ job rather than publishing an empty release. The install lines above it were
272
+ wrong for Windows from this release on: a bench there updates from the
273
+ *Update PLESTY Bench* entry, not `uv tool upgrade`.
274
+
275
+ ### Fixed
276
+ - **Renaming a device keeps the highlight on it.** The console refreshes every
277
+ three seconds into a four-task pool, so a refresh that started before a
278
+ rename lands after it, carrying the device under its old name. That repaint
279
+ took the pending selection, found no row to move to, selected nothing and
280
+ cleared it; the repaint that did carry the new row then fell back to the
281
+ current selection, which was the old name. The rename worked and the
282
+ highlight jumped back to a device that no longer existed. The pending
283
+ selection is now held until a repaint can honour it. Found as a Windows CI
284
+ failure that passed on a second run of the same commit — the race is wider
285
+ on a loaded machine, not absent on a fast one.
286
+ - **The Windows installer installs with pip instead of `uv tool install`.**
287
+ Roughly one install in five failed on a bench with an on-access virus
288
+ scanner: `Failed to update Windows PE resources ... os error -2147024786`,
289
+ always naming the `pyside6-essentials` wheel. uv writes each console-script
290
+ launcher to a temp file and reopens it to patch its PE resources, and the
291
+ scanner blocks the reopen. `plesty-server[gui]` builds about 25 launchers,
292
+ 23 of them PySide6 tools nothing here calls, so a per-file failure rate near
293
+ 1% became a per-install failure rate near 20%. uv 0.12 has no way to skip
294
+ launchers it does not need.
295
+
296
+ The wizard now takes a Python from uv, builds a virtual environment under
297
+ `%LOCALAPPDATA%\PLESTY Bench\app`, and `pip install`s into it; pip writes a
298
+ launcher as one write of stub + shebang + zip payload to its final path and
299
+ reopens nothing. `plesty-server` and `plesty-server-gui` are copied to
300
+ `~\.local\bin` as before, so the shortcuts, PATH and `purge` are unchanged.
301
+ The install is slower.
302
+
303
+ Windows consequences, both carried by the wizard: an upgrade is the *Update
304
+ PLESTY Bench* entry (`python -m pip install --upgrade "plesty-server[gui]"`
305
+ in that environment) and not `uv tool upgrade`, and the uninstaller removes
306
+ the environment itself — it still takes off a pre-0.3.3 install from uv's
307
+ tool environment when it finds one. macOS and Linux are untouched and still
308
+ use `uv tool install`.
309
+ - **The install retries are spread out instead of fired back to back.** Three
310
+ immediate retries all land inside the same burst of scanner activity, which
311
+ makes them one attempt rather than three. The whole install is now retried
312
+ after roughly 2, 8 and 30 seconds with jitter, and only for causes that can
313
+ clear — a version that is not on the index still fails at once.
314
+ - **The uv interpreter search sorts by version again.** The version was
315
+ captured by the filter and read by the sort, but `Sort-Object` reads every
316
+ candidate before comparing any, so every one of them sorted on the last
317
+ directory's number. It also prefers the 3.12 series now: a bench carrying a
318
+ Python newer than PySide6 publishes wheels for would resolve to nothing.
319
+
5
320
  ## [0.3.2] - 2026-09-07
6
321
 
7
322
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: plesty-bench
3
- Version: 0.3.2
3
+ Version: 0.4.0.dev1
4
4
  Summary: Client for a PLESTY bench running plesty-server: run its commands and fetch its reports from another machine.
5
5
  Author-email: Yunshuang Yuan <yuanyunshuang@gmail.com>
6
6
  Maintainer-email: Plesty Development Team <plesty.dev@example.com>
@@ -11,36 +11,38 @@ Requires-Python: >=3.12
11
11
  Requires-Dist: click>=8.1
12
12
  Requires-Dist: pyzmq>=26
13
13
  Provides-Extra: control
14
- Requires-Dist: plesty-lib[gui]>=0.4.0; extra == 'control'
14
+ Requires-Dist: plesty-lib[gui]>=0.5.0.dev8; extra == 'control'
15
15
  Provides-Extra: gui
16
- Requires-Dist: plesty-lib>=0.4.0; extra == 'gui'
17
- Requires-Dist: plesty-lib[gui]>=0.4.0; extra == 'gui'
16
+ Requires-Dist: plesty-lib[gui]>=0.5.0.dev8; extra == 'gui'
17
+ Requires-Dist: plesty-lib[report]>=0.5.0.dev8; extra == 'gui'
18
18
  Requires-Dist: pyside6==6.11.2; extra == 'gui'
19
19
  Requires-Dist: pyyaml>=6.0; extra == 'gui'
20
20
  Provides-Extra: server
21
- Requires-Dist: plesty-lib>=0.4.0; extra == 'server'
21
+ Requires-Dist: plesty-lib[report]>=0.5.0.dev8; extra == 'server'
22
22
  Requires-Dist: pyyaml>=6.0; extra == 'server'
23
23
  Description-Content-Type: text/markdown
24
24
 
25
25
  # plesty-server · plesty-bench
26
26
 
27
- **The bench PC's own console for the PLESTY platform.** It installs hub device
28
- modules, starts and supervises their device servers, runs field tests against
29
- the real instruments and keeps the logs — so a lab bench is set up and kept
30
- running from one place instead of one venv, one terminal and one hand-written
31
- `uv` pin per instrument.
27
+ **The bench PC's own console for the PLESTY platform.** It installs hub
28
+ modules, starts and supervises device servers, runs field tests against the
29
+ real instruments, and runs experiments across the lab's benches — keeping the
30
+ logs, the runs and their reports — so a lab bench is set up and kept running
31
+ from one place instead of one venv, one terminal and one hand-written `uv` pin
32
+ per instrument.
32
33
 
33
34
  This repository publishes two packages:
34
35
 
35
36
  | | Install on | Install with |
36
37
  |---|---|---|
37
- | **`plesty-server`** — the bench application: CLI, Qt console, agent | the bench PC | `uv tool install "plesty-server[gui]"` |
38
+ | **`plesty-server`** — the bench application: CLI, Qt console, agent | the bench PC | the installer from the [releases](https://gitlab.com/plesty/core/plesty-bench/-/releases) |
38
39
  | **`plesty-bench`** — the client that drives a bench from elsewhere | your own machine | `uv tool install plesty-bench` |
39
40
 
40
- On a Windows bench, the [releases](https://gitlab.com/plesty/core/plesty-bench/-/releases)
41
- carry a `setup.exe` (per-user, no admin); macOS and Linux have `install.sh`.
42
- Both install `uv`, run the command above and add a Start-menu / Launchpad
43
- entry — they contain no application code of their own.
41
+ Each release carries a Windows `setup.exe` (per-user, no admin) and an
42
+ `install.sh` for macOS and Linux. Both install the whole application,
43
+ console included, pinned to that release, and add a Start-menu or Launchpad
44
+ entry. Without an installer, `uv tool install "plesty-server[gui]"` installs
45
+ the same thing on macOS or Linux.
44
46
 
45
47
  ## Bringing up a bench
46
48
 
@@ -70,25 +72,20 @@ plesty-bench -b lab-bench-03 control pm100d # a control panel per devic
70
72
  ## Documentation
71
73
 
72
74
  **[Full documentation](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/index.md)**
73
- — start there if anything below is unfamiliar. It is in two parts.
75
+ — start there if anything below is unfamiliar. It is in three parts:
74
76
 
75
- *Using a bench*, in the order you meet it:
76
-
77
- | | |
77
+ | Part | Covers |
78
78
  |---|---|
79
- | [Setting up a bench](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/bench_setup.md) | The fleet file, declaring devices, ports, the `.env` |
80
- | [Device modules](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/modules.md) | The catalogue, installing, several versions side by side |
81
- | [Running device servers](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/running.md) | Start, stop, status, logs, the working fleet, headless benches |
82
- | [Field tests](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/field_test.md) | Running a module's field test against the instrument |
83
- | [The console](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/console.md) | Every part of the window, and the control panels |
84
- | [Working remotely](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/remote.md) | The agent and the `plesty-bench` client |
85
- | [Maintenance](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/maintenance.md) | Upgrading, clearing logs, purging, uninstalling |
86
- | [Command reference](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/cli.md) | Every `plesty-server` command |
79
+ | [GUI](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/gui/index.md) | The window element by element: the Devices and Experiments tabs, every menu, every dialog, the Control window |
80
+ | [CLI](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/cli/index.md) | `plesty-server`, `plesty-bench`, and every file and setting |
81
+ | [Usages](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/usage/index.md) | Tasks start to finish: set up a bench, install modules, field-test, run an experiment, work remotely, run without a window, maintain |
82
+
83
+ A new bench starts at [Set up a bench](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/usage/first_bench.md).
87
84
 
88
85
  *[Design and internals](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/design/index.md)*
89
- is the other part: the architecture, the process model, the port rules, the
90
- installer, the agent protocol, the platform differences and the release
91
- machinery — for contributors, and for anyone debugging behaviour that only
86
+ covers the architecture, the process model, the port rules, the
87
+ installer, the agent protocol, experiment runs, the platform differences and
88
+ the release machinery — for contributors, and for anyone debugging behaviour that only
92
89
  makes sense once the mechanism is visible.
93
90
 
94
91
  New to the platform? The [PLESTY quickstart](https://plesty.net/learn/quickstart/index.html)
@@ -0,0 +1,68 @@
1
+ # plesty-server · plesty-bench
2
+
3
+ **The bench PC's own console for the PLESTY platform.** It installs hub
4
+ modules, starts and supervises device servers, runs field tests against the
5
+ real instruments, and runs experiments across the lab's benches — keeping the
6
+ logs, the runs and their reports — so a lab bench is set up and kept running
7
+ from one place instead of one venv, one terminal and one hand-written `uv` pin
8
+ per instrument.
9
+
10
+ This repository publishes two packages:
11
+
12
+ | | Install on | Install with |
13
+ |---|---|---|
14
+ | **`plesty-server`** — the bench application: CLI, Qt console, agent | the bench PC | the installer from the [releases](https://gitlab.com/plesty/core/plesty-bench/-/releases) |
15
+ | **`plesty-bench`** — the client that drives a bench from elsewhere | your own machine | `uv tool install plesty-bench` |
16
+
17
+ Each release carries a Windows `setup.exe` (per-user, no admin) and an
18
+ `install.sh` for macOS and Linux. Both install the whole application,
19
+ console included, pinned to that release, and add a Start-menu or Launchpad
20
+ entry. Without an installer, `uv tool install "plesty-server[gui]"` installs
21
+ the same thing on macOS or Linux.
22
+
23
+ ## Bringing up a bench
24
+
25
+ ```bash
26
+ plesty-server fleet init # a fleet.yaml to declare into
27
+ plesty-server declare pm100d plesty-pm100d --version 0.2.1 \
28
+ --arg --address --arg "USB0::0x1313::…::INSTR"
29
+ plesty-server start pm100d # installs, launches, waits until it answers
30
+ plesty-server status
31
+ ```
32
+
33
+ The instrument is now reachable from an experiment PC at this machine's
34
+ address on the port `status` reports. `plesty-server gui` opens the same bench
35
+ in a window; `plesty-server fleet run` keeps it up headless after a reboot.
36
+
37
+ ## Driving it from your own machine
38
+
39
+ The bench serves an agent; the client sends it `plesty-server` command lines
40
+ and follows the output.
41
+
42
+ ```bash
43
+ plesty-bench -b lab-bench-03 status
44
+ plesty-bench -b lab-bench-03 field-test pm100d --gates connect,drain
45
+ plesty-bench -b lab-bench-03 control pm100d # a control panel per device
46
+ ```
47
+
48
+ ## Documentation
49
+
50
+ **[Full documentation](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/index.md)**
51
+ — start there if anything below is unfamiliar. It is in three parts:
52
+
53
+ | Part | Covers |
54
+ |---|---|
55
+ | [GUI](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/gui/index.md) | The window element by element: the Devices and Experiments tabs, every menu, every dialog, the Control window |
56
+ | [CLI](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/cli/index.md) | `plesty-server`, `plesty-bench`, and every file and setting |
57
+ | [Usages](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/usage/index.md) | Tasks start to finish: set up a bench, install modules, field-test, run an experiment, work remotely, run without a window, maintain |
58
+
59
+ A new bench starts at [Set up a bench](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/usage/first_bench.md).
60
+
61
+ *[Design and internals](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/design/index.md)*
62
+ covers the architecture, the process model, the port rules, the
63
+ installer, the agent protocol, experiment runs, the platform differences and
64
+ the release machinery — for contributors, and for anyone debugging behaviour that only
65
+ makes sense once the mechanism is visible.
66
+
67
+ New to the platform? The [PLESTY quickstart](https://plesty.net/learn/quickstart/index.html)
68
+ runs a whole experiment against a bench and is the gentlest way in.
@@ -3,8 +3,8 @@
3
3
  Entry pages: the [bench application `plesty.server`](reference/plesty/server/index)
4
4
  and the [client `plesty.bench`](reference/plesty/bench/index).
5
5
 
6
- Most work is done through the [command line](cli.md) or the
7
- [client](remote.md); this is for code that drives a bench directly, and for
6
+ Most work is done through the [command line](cli/plesty-server.md) or the
7
+ [client](cli/plesty-bench.md); this is for code that drives a bench directly, and for
8
8
  contributors. What each layer is allowed to depend on is set out in
9
9
  [Architecture](design/architecture.md).
10
10