pycontrol-core 3.0.0a1__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 (255) hide show
  1. pycontrol_core-3.0.0a1/.gitignore +27 -0
  2. pycontrol_core-3.0.0a1/.pre-commit-config.yaml +15 -0
  3. pycontrol_core-3.0.0a1/DELETED.md +40 -0
  4. pycontrol_core-3.0.0a1/LICENSE +674 -0
  5. pycontrol_core-3.0.0a1/PKG-INFO +226 -0
  6. pycontrol_core-3.0.0a1/README.md +186 -0
  7. pycontrol_core-3.0.0a1/cmd/pycontrol-init/README.md +75 -0
  8. pycontrol_core-3.0.0a1/cmd/pycontrol-init/go.mod +30 -0
  9. pycontrol_core-3.0.0a1/cmd/pycontrol-init/go.sum +44 -0
  10. pycontrol_core-3.0.0a1/cmd/pycontrol-init/internal/bootstrap/bootstrap.go +1327 -0
  11. pycontrol_core-3.0.0a1/cmd/pycontrol-init/internal/bootstrap/bootstrap_test.go +701 -0
  12. pycontrol_core-3.0.0a1/cmd/pycontrol-init/main.go +33 -0
  13. pycontrol_core-3.0.0a1/cmd/pycontrol-init/pycontrol-init +0 -0
  14. pycontrol_core-3.0.0a1/docs/architecture.md +224 -0
  15. pycontrol_core-3.0.0a1/docs/audit-2026-05-29.md +408 -0
  16. pycontrol_core-3.0.0a1/docs/changelog.md +83 -0
  17. pycontrol_core-3.0.0a1/docs/cli-reference.md +210 -0
  18. pycontrol_core-3.0.0a1/docs/code-review.md +122 -0
  19. pycontrol_core-3.0.0a1/docs/contracts.md +155 -0
  20. pycontrol_core-3.0.0a1/docs/data-format.md +318 -0
  21. pycontrol_core-3.0.0a1/docs/design-history/simplified-pycontrol-provenance-and-sharing-motivation.md +205 -0
  22. pycontrol_core-3.0.0a1/docs/design-history/simplified-pycontrol-provenance-and-sharing-plan.md +366 -0
  23. pycontrol_core-3.0.0a1/docs/experiment-extensions.md +290 -0
  24. pycontrol_core-3.0.0a1/docs/extension-settings.md +218 -0
  25. pycontrol_core-3.0.0a1/docs/getting-started.md +174 -0
  26. pycontrol_core-3.0.0a1/docs/hardware-definitions.md +77 -0
  27. pycontrol_core-3.0.0a1/docs/integrations.md +50 -0
  28. pycontrol_core-3.0.0a1/docs/migration-from-official.md +131 -0
  29. pycontrol_core-3.0.0a1/docs/public-api.md +248 -0
  30. pycontrol_core-3.0.0a1/docs/sharing.md +144 -0
  31. pycontrol_core-3.0.0a1/docs/subscriber-api.md +105 -0
  32. pycontrol_core-3.0.0a1/docs/task-extensions.md +320 -0
  33. pycontrol_core-3.0.0a1/docs/testing.md +174 -0
  34. pycontrol_core-3.0.0a1/docs/threading-and-state.md +169 -0
  35. pycontrol_core-3.0.0a1/docs/troubleshooting.md +249 -0
  36. pycontrol_core-3.0.0a1/docs/wire-protocol.md +209 -0
  37. pycontrol_core-3.0.0a1/docs/writing-tasks.md +67 -0
  38. pycontrol_core-3.0.0a1/pyproject.toml +138 -0
  39. pycontrol_core-3.0.0a1/src/pycontrol/__init__.py +5 -0
  40. pycontrol_core-3.0.0a1/src/pycontrol/bundles/__init__.py +48 -0
  41. pycontrol_core-3.0.0a1/src/pycontrol/bundles/collect.py +233 -0
  42. pycontrol_core-3.0.0a1/src/pycontrol/bundles/legacy.py +102 -0
  43. pycontrol_core-3.0.0a1/src/pycontrol/bundles/models.py +200 -0
  44. pycontrol_core-3.0.0a1/src/pycontrol/bundles/protocol.py +140 -0
  45. pycontrol_core-3.0.0a1/src/pycontrol/bundles/run.py +271 -0
  46. pycontrol_core-3.0.0a1/src/pycontrol/bundles/zipio.py +194 -0
  47. pycontrol_core-3.0.0a1/src/pycontrol/bus/__init__.py +31 -0
  48. pycontrol_core-3.0.0a1/src/pycontrol/bus/enriched.py +22 -0
  49. pycontrol_core-3.0.0a1/src/pycontrol/bus/events.py +91 -0
  50. pycontrol_core-3.0.0a1/src/pycontrol/bus/subscriber.py +115 -0
  51. pycontrol_core-3.0.0a1/src/pycontrol/bus/timestamps.py +16 -0
  52. pycontrol_core-3.0.0a1/src/pycontrol/cli/__init__.py +7 -0
  53. pycontrol_core-3.0.0a1/src/pycontrol/cli/commands/__init__.py +5 -0
  54. pycontrol_core-3.0.0a1/src/pycontrol/cli/commands/board.py +35 -0
  55. pycontrol_core-3.0.0a1/src/pycontrol/cli/commands/experiment.py +27 -0
  56. pycontrol_core-3.0.0a1/src/pycontrol/cli/commands/firmware.py +58 -0
  57. pycontrol_core-3.0.0a1/src/pycontrol/cli/commands/handlers.py +1055 -0
  58. pycontrol_core-3.0.0a1/src/pycontrol/cli/commands/run.py +68 -0
  59. pycontrol_core-3.0.0a1/src/pycontrol/cli/commands/setups.py +98 -0
  60. pycontrol_core-3.0.0a1/src/pycontrol/cli/commands/vars.py +74 -0
  61. pycontrol_core-3.0.0a1/src/pycontrol/cli/commands/workspace.py +51 -0
  62. pycontrol_core-3.0.0a1/src/pycontrol/cli/main.py +79 -0
  63. pycontrol_core-3.0.0a1/src/pycontrol/config/__init__.py +59 -0
  64. pycontrol_core-3.0.0a1/src/pycontrol/config/io.py +141 -0
  65. pycontrol_core-3.0.0a1/src/pycontrol/config/models.py +289 -0
  66. pycontrol_core-3.0.0a1/src/pycontrol/experiment/__init__.py +585 -0
  67. pycontrol_core-3.0.0a1/src/pycontrol/experiment/fleet_fanin.py +237 -0
  68. pycontrol_core-3.0.0a1/src/pycontrol/experiment/hooks.py +109 -0
  69. pycontrol_core-3.0.0a1/src/pycontrol/extension/__init__.py +56 -0
  70. pycontrol_core-3.0.0a1/src/pycontrol/extension/controls.py +75 -0
  71. pycontrol_core-3.0.0a1/src/pycontrol/extension/experiment_api.py +137 -0
  72. pycontrol_core-3.0.0a1/src/pycontrol/extension/loader.py +230 -0
  73. pycontrol_core-3.0.0a1/src/pycontrol/extension/task_api.py +224 -0
  74. pycontrol_core-3.0.0a1/src/pycontrol/extension/task_controls_context.py +47 -0
  75. pycontrol_core-3.0.0a1/src/pycontrol/firmware/__init__.py +29 -0
  76. pycontrol_core-3.0.0a1/src/pycontrol/firmware/device_helpers.py +261 -0
  77. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/LED_driver.py +6 -0
  78. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/MCP.py +204 -0
  79. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/VL53L4.py +435 -0
  80. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/__init__.py +39 -0
  81. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/analog_LED.py +15 -0
  82. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/audio_board.py +14 -0
  83. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/audio_player.py +39 -0
  84. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/breakout_1_2.py +24 -0
  85. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/breakout_H7.py +46 -0
  86. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/five_poke.py +28 -0
  87. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/frame_logger.py +49 -0
  88. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/frame_trigger.py +34 -0
  89. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/grid_maze.py +231 -0
  90. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/lickometer.py +18 -0
  91. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/load_cell.py +148 -0
  92. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/nine_poke.py +51 -0
  93. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/poke.py +25 -0
  94. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/port_expander.py +34 -0
  95. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/rotary_encoder.py +77 -0
  96. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/schmitt_trigger.py +119 -0
  97. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/solenoid_driver.py +12 -0
  98. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/stepper_motor.py +21 -0
  99. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/uRFID.py +25 -0
  100. pycontrol_core-3.0.0a1/src/pycontrol/firmware/devices/uart_handler.py +26 -0
  101. pycontrol_core-3.0.0a1/src/pycontrol/firmware/pyControl/__init__.py +64 -0
  102. pycontrol_core-3.0.0a1/src/pycontrol/firmware/pyControl/audio.py +117 -0
  103. pycontrol_core-3.0.0a1/src/pycontrol/firmware/pyControl/framework.py +188 -0
  104. pycontrol_core-3.0.0a1/src/pycontrol/firmware/pyControl/hardware.py +585 -0
  105. pycontrol_core-3.0.0a1/src/pycontrol/firmware/pyControl/profiles.py +105 -0
  106. pycontrol_core-3.0.0a1/src/pycontrol/firmware/pyControl/state_machine.py +98 -0
  107. pycontrol_core-3.0.0a1/src/pycontrol/firmware/pyControl/timer.py +85 -0
  108. pycontrol_core-3.0.0a1/src/pycontrol/firmware/pyControl/utility.py +171 -0
  109. pycontrol_core-3.0.0a1/src/pycontrol/fleet/__init__.py +19 -0
  110. pycontrol_core-3.0.0a1/src/pycontrol/fleet/envelope.py +94 -0
  111. pycontrol_core-3.0.0a1/src/pycontrol/integrations/__init__.py +6 -0
  112. pycontrol_core-3.0.0a1/src/pycontrol/integrations/_queue.py +118 -0
  113. pycontrol_core-3.0.0a1/src/pycontrol/integrations/notify/__init__.py +24 -0
  114. pycontrol_core-3.0.0a1/src/pycontrol/integrations/notify/slack.py +72 -0
  115. pycontrol_core-3.0.0a1/src/pycontrol/integrations/notify/telegram.py +55 -0
  116. pycontrol_core-3.0.0a1/src/pycontrol/protocol/__init__.py +39 -0
  117. pycontrol_core-3.0.0a1/src/pycontrol/protocol/analog.py +46 -0
  118. pycontrol_core-3.0.0a1/src/pycontrol/protocol/decoder.py +268 -0
  119. pycontrol_core-3.0.0a1/src/pycontrol/protocol/encoder.py +71 -0
  120. pycontrol_core-3.0.0a1/src/pycontrol/protocol/messages.py +73 -0
  121. pycontrol_core-3.0.0a1/src/pycontrol/provenance/__init__.py +57 -0
  122. pycontrol_core-3.0.0a1/src/pycontrol/provenance/archive.py +143 -0
  123. pycontrol_core-3.0.0a1/src/pycontrol/provenance/collect.py +351 -0
  124. pycontrol_core-3.0.0a1/src/pycontrol/provenance/hashing.py +92 -0
  125. pycontrol_core-3.0.0a1/src/pycontrol/provenance/models.py +92 -0
  126. pycontrol_core-3.0.0a1/src/pycontrol/recording/__init__.py +9 -0
  127. pycontrol_core-3.0.0a1/src/pycontrol/recording/analog_writer.py +141 -0
  128. pycontrol_core-3.0.0a1/src/pycontrol/recording/console.py +101 -0
  129. pycontrol_core-3.0.0a1/src/pycontrol/recording/fleet_aggregator.py +42 -0
  130. pycontrol_core-3.0.0a1/src/pycontrol/recording/formatting.py +82 -0
  131. pycontrol_core-3.0.0a1/src/pycontrol/recording/native_event_logger.py +258 -0
  132. pycontrol_core-3.0.0a1/src/pycontrol/recording/tsv_logger.py +206 -0
  133. pycontrol_core-3.0.0a1/src/pycontrol/repl/__init__.py +30 -0
  134. pycontrol_core-3.0.0a1/src/pycontrol/repl/device_helpers.py +27 -0
  135. pycontrol_core-3.0.0a1/src/pycontrol/repl/file_transfer.py +258 -0
  136. pycontrol_core-3.0.0a1/src/pycontrol/repl/json_repl.py +63 -0
  137. pycontrol_core-3.0.0a1/src/pycontrol/repl/raw_repl.py +181 -0
  138. pycontrol_core-3.0.0a1/src/pycontrol/session/__init__.py +24 -0
  139. pycontrol_core-3.0.0a1/src/pycontrol/session/board_session.py +1200 -0
  140. pycontrol_core-3.0.0a1/src/pycontrol/session/commands.py +30 -0
  141. pycontrol_core-3.0.0a1/src/pycontrol/session/device_resolution.py +237 -0
  142. pycontrol_core-3.0.0a1/src/pycontrol/session/info.py +100 -0
  143. pycontrol_core-3.0.0a1/src/pycontrol/session/services/__init__.py +6 -0
  144. pycontrol_core-3.0.0a1/src/pycontrol/session/services/firmware.py +257 -0
  145. pycontrol_core-3.0.0a1/src/pycontrol/session/services/setup.py +407 -0
  146. pycontrol_core-3.0.0a1/src/pycontrol/transport/__init__.py +12 -0
  147. pycontrol_core-3.0.0a1/src/pycontrol/transport/base.py +57 -0
  148. pycontrol_core-3.0.0a1/src/pycontrol/transport/mock.py +115 -0
  149. pycontrol_core-3.0.0a1/src/pycontrol/transport/recording.py +92 -0
  150. pycontrol_core-3.0.0a1/src/pycontrol/transport/replay.py +91 -0
  151. pycontrol_core-3.0.0a1/src/pycontrol/transport/serial.py +76 -0
  152. pycontrol_core-3.0.0a1/src/pycontrol/workspace/__init__.py +307 -0
  153. pycontrol_core-3.0.0a1/src/pycontrol/workspace/creation.py +263 -0
  154. pycontrol_core-3.0.0a1/src/pycontrol/workspace/hwdef_inspect.py +107 -0
  155. pycontrol_core-3.0.0a1/src/pycontrol/workspace/task_inspect.py +30 -0
  156. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/__init__.py +21 -0
  157. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/devices/__init__.py +11 -0
  158. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/devices/example_widget.py +22 -0
  159. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/experiments/blink_demo.json +13 -0
  160. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/hardware_definitions/encoder.py +19 -0
  161. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/hardware_definitions/encoder_h7.py +28 -0
  162. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/hardware_definitions/example.py +17 -0
  163. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/hardware_definitions/example_h7.py +16 -0
  164. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/hardware_definitions/karpova_TOF_h7.py +18 -0
  165. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/hardware_definitions/old_board.py +9 -0
  166. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/hardware_definitions/usr_button.py +17 -0
  167. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/hardware_definitions/usr_button_h7.py +22 -0
  168. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/plugins/experiment_extensions/notion_logger.py +105 -0
  169. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/plugins/experiment_extensions/s3_data_exporter.py +95 -0
  170. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/plugins/task_controls/example_dialog.py +20 -0
  171. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/plugins/task_extensions/example_extension.py +32 -0
  172. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/plugins/task_extensions/run_notify.py +73 -0
  173. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/plugins/task_extensions/trial_summary.py +18 -0
  174. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/settings.json +27 -0
  175. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/setups.json +1 -0
  176. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/tasks/blinker.py +65 -0
  177. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/tasks/examples/blinker.py +37 -0
  178. pycontrol_core-3.0.0a1/src/pycontrol/workspace_template/tasks/examples/button.py +48 -0
  179. pycontrol_core-3.0.0a1/tests/CLASSIFICATION.md +49 -0
  180. pycontrol_core-3.0.0a1/tests/__init__.py +0 -0
  181. pycontrol_core-3.0.0a1/tests/conftest.py +22 -0
  182. pycontrol_core-3.0.0a1/tests/contracts/test_bus_contract.py +60 -0
  183. pycontrol_core-3.0.0a1/tests/contracts/test_data_contract.py +70 -0
  184. pycontrol_core-3.0.0a1/tests/contracts/test_fleet_envelope_contract.py +74 -0
  185. pycontrol_core-3.0.0a1/tests/contracts/test_session_lifecycle_contract.py +18 -0
  186. pycontrol_core-3.0.0a1/tests/contracts/test_task_authoring_contract.py +42 -0
  187. pycontrol_core-3.0.0a1/tests/firmware_stubs/__init__.py +4 -0
  188. pycontrol_core-3.0.0a1/tests/firmware_stubs/micropython.py +16 -0
  189. pycontrol_core-3.0.0a1/tests/firmware_stubs/pyb.py +165 -0
  190. pycontrol_core-3.0.0a1/tests/firmware_stubs/ucollections.py +1 -0
  191. pycontrol_core-3.0.0a1/tests/firmware_stubs/ujson.py +1 -0
  192. pycontrol_core-3.0.0a1/tests/golden/__init__.py +0 -0
  193. pycontrol_core-3.0.0a1/tests/golden/build_synthetic.py +70 -0
  194. pycontrol_core-3.0.0a1/tests/golden/frames/analog.in.bin +0 -0
  195. pycontrol_core-3.0.0a1/tests/golden/frames/blinker.in.bin +0 -0
  196. pycontrol_core-3.0.0a1/tests/golden/frames/blinker_real.in.bin +0 -0
  197. pycontrol_core-3.0.0a1/tests/golden/frames/blinker_real.out.bin +109 -0
  198. pycontrol_core-3.0.0a1/tests/golden/frames/counter_demo_real.in.bin +0 -0
  199. pycontrol_core-3.0.0a1/tests/golden/frames/counter_demo_real.out.bin +0 -0
  200. pycontrol_core-3.0.0a1/tests/golden/frames/encoder_real.in.bin +0 -0
  201. pycontrol_core-3.0.0a1/tests/golden/frames/encoder_real.out.bin +111 -0
  202. pycontrol_core-3.0.0a1/tests/golden/frames/random_ratio.in.bin +0 -0
  203. pycontrol_core-3.0.0a1/tests/golden/replay.py +92 -0
  204. pycontrol_core-3.0.0a1/tests/golden/sessions/blinker_real.meta.json +8 -0
  205. pycontrol_core-3.0.0a1/tests/golden/sessions/blinker_real.tsv +23 -0
  206. pycontrol_core-3.0.0a1/tests/golden/sessions/counter_demo_real.meta.json +8 -0
  207. pycontrol_core-3.0.0a1/tests/golden/sessions/counter_demo_real.tsv +81 -0
  208. pycontrol_core-3.0.0a1/tests/golden/sessions/encoder_real.meta.json +10 -0
  209. pycontrol_core-3.0.0a1/tests/golden/sessions/encoder_real.tsv +13 -0
  210. pycontrol_core-3.0.0a1/tests/golden/sessions/encoder_real_encoder.data.npy +0 -0
  211. pycontrol_core-3.0.0a1/tests/golden/sessions/encoder_real_encoder.time.npy +0 -0
  212. pycontrol_core-3.0.0a1/tests/golden/spec_frames.py +103 -0
  213. pycontrol_core-3.0.0a1/tests/golden/tasks/blinker_real.task.py +31 -0
  214. pycontrol_core-3.0.0a1/tests/golden/tasks/counter_demo_real.task.py +46 -0
  215. pycontrol_core-3.0.0a1/tests/golden/tasks/encoder_real.task.py +24 -0
  216. pycontrol_core-3.0.0a1/tests/integration/__init__.py +0 -0
  217. pycontrol_core-3.0.0a1/tests/integration/fake_board/__init__.py +23 -0
  218. pycontrol_core-3.0.0a1/tests/integration/fake_board/responder.py +410 -0
  219. pycontrol_core-3.0.0a1/tests/integration/test_board_session.py +1180 -0
  220. pycontrol_core-3.0.0a1/tests/integration/test_cli_workspace.py +1118 -0
  221. pycontrol_core-3.0.0a1/tests/integration/test_experiment_runner.py +689 -0
  222. pycontrol_core-3.0.0a1/tests/integration/test_real_hardware_replay.py +252 -0
  223. pycontrol_core-3.0.0a1/tests/integration/test_repl.py +193 -0
  224. pycontrol_core-3.0.0a1/tests/unit/__init__.py +0 -0
  225. pycontrol_core-3.0.0a1/tests/unit/firmware/__init__.py +0 -0
  226. pycontrol_core-3.0.0a1/tests/unit/firmware/conftest.py +33 -0
  227. pycontrol_core-3.0.0a1/tests/unit/firmware/test_device_helpers.py +236 -0
  228. pycontrol_core-3.0.0a1/tests/unit/firmware/test_devices_init.py +55 -0
  229. pycontrol_core-3.0.0a1/tests/unit/firmware/test_hardware_uses_profile.py +174 -0
  230. pycontrol_core-3.0.0a1/tests/unit/firmware/test_profiles.py +173 -0
  231. pycontrol_core-3.0.0a1/tests/unit/firmware/test_timer_rounding.py +98 -0
  232. pycontrol_core-3.0.0a1/tests/unit/test_bundles_collect.py +233 -0
  233. pycontrol_core-3.0.0a1/tests/unit/test_bus_subscriber.py +175 -0
  234. pycontrol_core-3.0.0a1/tests/unit/test_cli.py +255 -0
  235. pycontrol_core-3.0.0a1/tests/unit/test_config_models.py +278 -0
  236. pycontrol_core-3.0.0a1/tests/unit/test_extension.py +398 -0
  237. pycontrol_core-3.0.0a1/tests/unit/test_file_transfer_errors.py +101 -0
  238. pycontrol_core-3.0.0a1/tests/unit/test_firmware_root.py +38 -0
  239. pycontrol_core-3.0.0a1/tests/unit/test_fleet_fanin.py +92 -0
  240. pycontrol_core-3.0.0a1/tests/unit/test_golden_fixtures.py +82 -0
  241. pycontrol_core-3.0.0a1/tests/unit/test_hwdef_ordering.py +38 -0
  242. pycontrol_core-3.0.0a1/tests/unit/test_integrations_notify.py +216 -0
  243. pycontrol_core-3.0.0a1/tests/unit/test_protocol_decoder.py +328 -0
  244. pycontrol_core-3.0.0a1/tests/unit/test_protocol_encoder.py +139 -0
  245. pycontrol_core-3.0.0a1/tests/unit/test_provenance.py +228 -0
  246. pycontrol_core-3.0.0a1/tests/unit/test_recording_tsv.py +402 -0
  247. pycontrol_core-3.0.0a1/tests/unit/test_transport_mock.py +161 -0
  248. pycontrol_core-3.0.0a1/tests/unit/test_workspace.py +521 -0
  249. pycontrol_core-3.0.0a1/tests/unit/test_workspace_hwdef_inspect.py +144 -0
  250. pycontrol_core-3.0.0a1/tests/unit/test_workspace_template.py +52 -0
  251. pycontrol_core-3.0.0a1/tools/README.md +12 -0
  252. pycontrol_core-3.0.0a1/tools/analog_diagnose.py +122 -0
  253. pycontrol_core-3.0.0a1/tools/capture_fixtures.py +203 -0
  254. pycontrol_core-3.0.0a1/tools/encoder_diagnose.py +180 -0
  255. pycontrol_core-3.0.0a1/uv.lock +893 -0
@@ -0,0 +1,27 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *$py.class
4
+ .venv/
5
+ .env
6
+ .mypy_cache/
7
+ .ruff_cache/
8
+ .pytest_cache/
9
+ .coverage
10
+ .coverage.*
11
+ htmlcov/
12
+ dist/
13
+ build/
14
+ *.egg-info/
15
+ .DS_Store
16
+ node_modules/
17
+ .idea/
18
+ .vscode/
19
+
20
+ # never commit ad-hoc data captured during dev runs
21
+ /scratch/
22
+ /data/
23
+
24
+ # but keep the test fixtures
25
+ !tests/golden/**
26
+ # (still ignore caches inside the kept dir)
27
+ tests/golden/**/__pycache__/
@@ -0,0 +1,15 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: v0.5.7
4
+ hooks:
5
+ - id: ruff
6
+ args: [--fix]
7
+ - id: ruff-format
8
+ - repo: https://github.com/pre-commit/pre-commit-hooks
9
+ rev: v4.6.0
10
+ hooks:
11
+ - id: trailing-whitespace
12
+ - id: end-of-file-fixer
13
+ - id: check-yaml
14
+ - id: check-toml
15
+ - id: check-merge-conflict
@@ -0,0 +1,40 @@
1
+ # Deleted Surface
2
+
3
+ This file records compatibility surfaces removed before the v3.0.0a1 release.
4
+
5
+ ## Removed / dropped compatibility surface
6
+
7
+ - Legacy integration config keys from model defaults and shipped examples:
8
+ - `telegram`
9
+ - `notion`
10
+ - `cerebro`
11
+ - `notion_and_network`
12
+ - Unknown experiment top-level keys are ignored by the current config model.
13
+ - BoardSession public service facades:
14
+ - `connection`
15
+ - `firmware`
16
+ - `setup`
17
+ - `run`
18
+ - `commands`
19
+ - `mcu_guard`
20
+ - `pycontrol setups import --from-upstream`.
21
+ - Placeholder S3 and Notion integration modules:
22
+ - `pycontrol.integrations.s3`
23
+ - `pycontrol.integrations.notion`
24
+ Notion and S3 are supported as workspace example experiment extensions with
25
+ optional dependencies (`pycontrol-core[notion]`, `pycontrol-core[s3]`), not as
26
+ core facade modules.
27
+ - Empty `pycontrol dev` CLI surface and `pycontrol.devtools` placeholder package.
28
+ - `pycontrol.sharing` compatibility package. `collect_task_files` and
29
+ `find_task_variables` moved to `pycontrol.bundles.collect`; archive helpers
30
+ now use the canonical `pycontrol.bundles.ProtocolBundleManifest` and
31
+ `create_protocol_bundle` / `validate_protocol_bundle` /
32
+ `extract_protocol_bundle` names.
33
+
34
+ ## Removed Extension Hooks
35
+
36
+ - `TaskExtension.get_reply` was removed (no call sites in this repository).
37
+
38
+ ## Notes
39
+
40
+ - Tests are classified in `tests/CLASSIFICATION.md` for future cleanup passes.