labcode 0.10.2__tar.gz → 0.10.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 (113) hide show
  1. {labcode-0.10.2 → labcode-0.10.4}/CHANGELOG.md +41 -0
  2. {labcode-0.10.2 → labcode-0.10.4}/PKG-INFO +3 -3
  3. {labcode-0.10.2 → labcode-0.10.4}/labcode.egg-info/PKG-INFO +3 -3
  4. {labcode-0.10.2 → labcode-0.10.4}/labcode.egg-info/requires.txt +2 -2
  5. labcode-0.10.4/labcode.egg-info/scm_version.json +8 -0
  6. {labcode-0.10.2 → labcode-0.10.4}/pyproject.toml +13 -3
  7. labcode-0.10.2/labcode.egg-info/scm_version.json +0 -8
  8. {labcode-0.10.2 → labcode-0.10.4}/.github/workflows/ci.yml +0 -0
  9. {labcode-0.10.2 → labcode-0.10.4}/.github/workflows/publish.yml +0 -0
  10. {labcode-0.10.2 → labcode-0.10.4}/.gitignore +0 -0
  11. {labcode-0.10.2 → labcode-0.10.4}/LICENSE +0 -0
  12. {labcode-0.10.2 → labcode-0.10.4}/MANIFEST.in +0 -0
  13. {labcode-0.10.2 → labcode-0.10.4}/README.md +0 -0
  14. {labcode-0.10.2 → labcode-0.10.4}/docs/SPECIFICATIONS.md +0 -0
  15. {labcode-0.10.2 → labcode-0.10.4}/examples/README.md +0 -0
  16. {labcode-0.10.2 → labcode-0.10.4}/examples/lads_plate_cycle.env.yaml +0 -0
  17. {labcode-0.10.2 → labcode-0.10.4}/examples/lads_seal.env.yaml +0 -0
  18. {labcode-0.10.2 → labcode-0.10.4}/examples/outputs/plate_line.boundary.yaml +0 -0
  19. {labcode-0.10.2 → labcode-0.10.4}/examples/outputs/plate_line.observation.yaml +0 -0
  20. {labcode-0.10.2 → labcode-0.10.4}/examples/outputs/plate_line.plan.yaml +0 -0
  21. {labcode-0.10.2 → labcode-0.10.4}/examples/outputs/plate_line.svg +0 -0
  22. {labcode-0.10.2 → labcode-0.10.4}/examples/outputs/shared_bench.boundary.yaml +0 -0
  23. {labcode-0.10.2 → labcode-0.10.4}/examples/outputs/shared_bench.observation.yaml +0 -0
  24. {labcode-0.10.2 → labcode-0.10.4}/examples/outputs/shared_bench.plan.yaml +0 -0
  25. {labcode-0.10.2 → labcode-0.10.4}/examples/outputs/shared_bench.svg +0 -0
  26. {labcode-0.10.2 → labcode-0.10.4}/examples/outputs/sila2_plate_cycle.boundary.yaml +0 -0
  27. {labcode-0.10.2 → labcode-0.10.4}/examples/outputs/sila2_plate_cycle.observation.yaml +0 -0
  28. {labcode-0.10.2 → labcode-0.10.4}/examples/outputs/sila2_plate_cycle.plan.yaml +0 -0
  29. {labcode-0.10.2 → labcode-0.10.4}/examples/outputs/sila2_plate_cycle.svg +0 -0
  30. {labcode-0.10.2 → labcode-0.10.4}/examples/plate_line.boundary.yaml +0 -0
  31. {labcode-0.10.2 → labcode-0.10.4}/examples/plate_line.env.yaml +0 -0
  32. {labcode-0.10.2 → labcode-0.10.4}/examples/plate_line.workflow.yaml +0 -0
  33. {labcode-0.10.2 → labcode-0.10.4}/examples/preflight_sila2_env.py +0 -0
  34. {labcode-0.10.2 → labcode-0.10.4}/examples/render_plate_line.py +0 -0
  35. {labcode-0.10.2 → labcode-0.10.4}/examples/render_shared_bench.py +0 -0
  36. {labcode-0.10.2 → labcode-0.10.4}/examples/render_sila2_plate_cycle.py +0 -0
  37. {labcode-0.10.2 → labcode-0.10.4}/examples/run_all_lads_examples.py +0 -0
  38. {labcode-0.10.2 → labcode-0.10.4}/examples/run_all_sila2_examples.py +0 -0
  39. {labcode-0.10.2 → labcode-0.10.4}/examples/run_sila2_plate_cycle.py +0 -0
  40. {labcode-0.10.2 → labcode-0.10.4}/examples/run_sila2_plate_cycle_no_atc.py +0 -0
  41. {labcode-0.10.2 → labcode-0.10.4}/examples/run_sila2_seal.py +0 -0
  42. {labcode-0.10.2 → labcode-0.10.4}/examples/shared_bench.afternoon.boundary.yaml +0 -0
  43. {labcode-0.10.2 → labcode-0.10.4}/examples/shared_bench.env.yaml +0 -0
  44. {labcode-0.10.2 → labcode-0.10.4}/examples/shared_bench.morning.boundary.yaml +0 -0
  45. {labcode-0.10.2 → labcode-0.10.4}/examples/shared_bench.run.yaml +0 -0
  46. {labcode-0.10.2 → labcode-0.10.4}/examples/shared_bench.workflow.yaml +0 -0
  47. {labcode-0.10.2 → labcode-0.10.4}/examples/sila2_plate_cycle.boundary.yaml +0 -0
  48. {labcode-0.10.2 → labcode-0.10.4}/examples/sila2_plate_cycle.workflow.yaml +0 -0
  49. {labcode-0.10.2 → labcode-0.10.4}/examples/sila2_plate_cycle.wrapped.env.yaml +0 -0
  50. {labcode-0.10.2 → labcode-0.10.4}/examples/sila2_plate_cycle_no_atc.boundary.yaml +0 -0
  51. {labcode-0.10.2 → labcode-0.10.4}/examples/sila2_plate_cycle_no_atc.workflow.yaml +0 -0
  52. {labcode-0.10.2 → labcode-0.10.4}/examples/sila2_plate_cycle_no_atc.wrapped.env.yaml +0 -0
  53. {labcode-0.10.2 → labcode-0.10.4}/examples/sila2_seal.boundary.yaml +0 -0
  54. {labcode-0.10.2 → labcode-0.10.4}/examples/sila2_seal.env.yaml +0 -0
  55. {labcode-0.10.2 → labcode-0.10.4}/examples/sila2_seal.workflow.yaml +0 -0
  56. {labcode-0.10.2 → labcode-0.10.4}/examples/sila2_seal.wrapped.env.yaml +0 -0
  57. {labcode-0.10.2 → labcode-0.10.4}/labcode/__init__.py +0 -0
  58. {labcode-0.10.2 → labcode-0.10.4}/labcode/__main__.py +0 -0
  59. {labcode-0.10.2 → labcode-0.10.4}/labcode/_child.py +0 -0
  60. {labcode-0.10.2 → labcode-0.10.4}/labcode/backend.py +0 -0
  61. {labcode-0.10.2 → labcode-0.10.4}/labcode/cli.py +0 -0
  62. {labcode-0.10.2 → labcode-0.10.4}/labcode/connections.py +0 -0
  63. {labcode-0.10.2 → labcode-0.10.4}/labcode/dialect.py +0 -0
  64. {labcode-0.10.2 → labcode-0.10.4}/labcode/extension.py +0 -0
  65. {labcode-0.10.2 → labcode-0.10.4}/labcode/idgen.py +0 -0
  66. {labcode-0.10.2 → labcode-0.10.4}/labcode/lads.py +0 -0
  67. {labcode-0.10.2 → labcode-0.10.4}/labcode/lads_commands.py +0 -0
  68. {labcode-0.10.2 → labcode-0.10.4}/labcode/lads_unit.py +0 -0
  69. {labcode-0.10.2 → labcode-0.10.4}/labcode/objectid.py +0 -0
  70. {labcode-0.10.2 → labcode-0.10.4}/labcode/otel.py +0 -0
  71. {labcode-0.10.2 → labcode-0.10.4}/labcode/otel_sila2.py +0 -0
  72. {labcode-0.10.2 → labcode-0.10.4}/labcode/probe.py +0 -0
  73. {labcode-0.10.2 → labcode-0.10.4}/labcode/py.typed +0 -0
  74. {labcode-0.10.2 → labcode-0.10.4}/labcode/record.py +0 -0
  75. {labcode-0.10.2 → labcode-0.10.4}/labcode/run_cli.py +0 -0
  76. {labcode-0.10.2 → labcode-0.10.4}/labcode/runner.py +0 -0
  77. {labcode-0.10.2 → labcode-0.10.4}/labcode/sila2.py +0 -0
  78. {labcode-0.10.2 → labcode-0.10.4}/labcode/sila2_commands.py +0 -0
  79. {labcode-0.10.2 → labcode-0.10.4}/labcode/sila2_instrument.py +0 -0
  80. {labcode-0.10.2 → labcode-0.10.4}/labcode.egg-info/SOURCES.txt +0 -0
  81. {labcode-0.10.2 → labcode-0.10.4}/labcode.egg-info/dependency_links.txt +0 -0
  82. {labcode-0.10.2 → labcode-0.10.4}/labcode.egg-info/entry_points.txt +0 -0
  83. {labcode-0.10.2 → labcode-0.10.4}/labcode.egg-info/scm_file_list.json +0 -0
  84. {labcode-0.10.2 → labcode-0.10.4}/labcode.egg-info/top_level.txt +0 -0
  85. {labcode-0.10.2 → labcode-0.10.4}/setup.cfg +0 -0
  86. {labcode-0.10.2 → labcode-0.10.4}/tests/fixtures/device_script.env.yaml +0 -0
  87. {labcode-0.10.2 → labcode-0.10.4}/tests/fixtures/device_script.workflow.yaml +0 -0
  88. {labcode-0.10.2 → labcode-0.10.4}/tests/fixtures/dispense_read.workflow.yaml +0 -0
  89. {labcode-0.10.2 → labcode-0.10.4}/tests/fixtures/joint.run.yaml +0 -0
  90. {labcode-0.10.2 → labcode-0.10.4}/tests/fixtures/replenishment.env.yaml +0 -0
  91. {labcode-0.10.2 → labcode-0.10.4}/tests/fixtures/reroute_device.env.yaml +0 -0
  92. {labcode-0.10.2 → labcode-0.10.4}/tests/fixtures/reroute_transporter.env.yaml +0 -0
  93. {labcode-0.10.2 → labcode-0.10.4}/tests/fixtures/transport.env.yaml +0 -0
  94. {labcode-0.10.2 → labcode-0.10.4}/tests/fixtures/transport.workflow.yaml +0 -0
  95. {labcode-0.10.2 → labcode-0.10.4}/tests/test_backend.py +0 -0
  96. {labcode-0.10.2 → labcode-0.10.4}/tests/test_cli.py +0 -0
  97. {labcode-0.10.2 → labcode-0.10.4}/tests/test_dialect.py +0 -0
  98. {labcode-0.10.2 → labcode-0.10.4}/tests/test_joint.py +0 -0
  99. {labcode-0.10.2 → labcode-0.10.4}/tests/test_lads.py +0 -0
  100. {labcode-0.10.2 → labcode-0.10.4}/tests/test_lads_unit.py +0 -0
  101. {labcode-0.10.2 → labcode-0.10.4}/tests/test_objectid.py +0 -0
  102. {labcode-0.10.2 → labcode-0.10.4}/tests/test_otel.py +0 -0
  103. {labcode-0.10.2 → labcode-0.10.4}/tests/test_otel_child.py +0 -0
  104. {labcode-0.10.2 → labcode-0.10.4}/tests/test_otel_grpc.py +0 -0
  105. {labcode-0.10.2 → labcode-0.10.4}/tests/test_otel_sila2.py +0 -0
  106. {labcode-0.10.2 → labcode-0.10.4}/tests/test_probe.py +0 -0
  107. {labcode-0.10.2 → labcode-0.10.4}/tests/test_record.py +0 -0
  108. {labcode-0.10.2 → labcode-0.10.4}/tests/test_recording.py +0 -0
  109. {labcode-0.10.2 → labcode-0.10.4}/tests/test_run_cli.py +0 -0
  110. {labcode-0.10.2 → labcode-0.10.4}/tests/test_sila2.py +0 -0
  111. {labcode-0.10.2 → labcode-0.10.4}/tests/test_sila2_commands.py +0 -0
  112. {labcode-0.10.2 → labcode-0.10.4}/tests/test_sila2_instrument.py +0 -0
  113. {labcode-0.10.2 → labcode-0.10.4}/tests/test_structured_labcode.py +0 -0
@@ -6,6 +6,47 @@ specification the section numbers refer to is [`docs/SPECIFICATIONS.md`](docs/SP
6
6
  Releases before 0.9.0 are described in the messages of their `Release vX.Y.Z` commits
7
7
  (`git log --grep '^Release v'`).
8
8
 
9
+ ## 0.10.4 — 2026-10-10
10
+
11
+ No code changes; the siblings move.
12
+
13
+ ### Added
14
+
15
+ - **A `branch` runs on a condition produced during the run.** A branch whose
16
+ condition is made by an activity -- a script's verdict on a measured value, an
17
+ instrument's flag -- runs the arm the value picks. The scheduler plans the branch on
18
+ its `then` arm until the value exists and lets nothing of it start before then,
19
+ marking the moment in the plan with a `decision` (ofplang-schedule SPEC §6.14); the
20
+ run states the arm in the document's `expansion.arms` as soon as the value is
21
+ recorded and replans (ofplang-schedule 0.16, ofplang-run 0.16). The arm not planned
22
+ is checked without a solve, and a workflow whose other arm could never be planned is
23
+ refused before anything runs (`arm_unplannable`). In 0.10.3 such a branch was refused
24
+ (`branch_arm_unknown`).
25
+
26
+ ### Known limitations
27
+
28
+ - **`lc export` cannot read a plan that waits on such a branch yet.** The export viewer
29
+ does not know the `decision` entry, so a plan with one is refused; plans without one
30
+ are unaffected. Planning and running are not.
31
+
32
+ Requires ofplang-schedule 0.16 and ofplang-run 0.16 (ofplang-validate 0.4.1 as before).
33
+
34
+ ## 0.10.3 — 2026-10-08
35
+
36
+ No code changes; the siblings move.
37
+
38
+ ### Added
39
+
40
+ - **A `branch` runs where the boundary decides its arm.** A branch whose condition is
41
+ an entry input -- a flag, or one flag per element inside a `map` -- runs the arm the
42
+ flag picks: the runner states each arm in the document's `expansion.arms`
43
+ (ofplang-schedule SPEC §6.13) and the scheduler expands the branch with it
44
+ (ofplang-schedule 0.15, ofplang-run 0.15). A flag left out is `false` and reported
45
+ (`entry_input_defaulted`). A branch whose condition is produced during the run is
46
+ refused before anything runs (`branch_arm_unknown`).
47
+
48
+ Requires ofplang-schedule 0.15 and ofplang-run 0.15 (ofplang-validate 0.4.1 as before).
49
+
9
50
  ## 0.10.2 — 2026-10-07
10
51
 
11
52
  No code changes; the siblings move.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: labcode
3
- Version: 0.10.2
3
+ Version: 0.10.4
4
4
  Summary: labcode -- a dialect wrapper over the Object-Flow Programming Language toolchain
5
5
  Author-email: Kazunari Kaizu <kwaizu@gmail.com>
6
6
  License-Expression: MIT
@@ -21,8 +21,8 @@ Requires-Python: >=3.10
21
21
  Description-Content-Type: text/markdown
22
22
  License-File: LICENSE
23
23
  Requires-Dist: ofplang-validate<0.5,>=0.4.1
24
- Requires-Dist: ofplang-schedule<0.15,>=0.14.1
25
- Requires-Dist: ofplang-run<0.15,>=0.14.1
24
+ Requires-Dist: ofplang-schedule<0.17,>=0.16
25
+ Requires-Dist: ofplang-run<0.17,>=0.16
26
26
  Provides-Extra: test
27
27
  Requires-Dist: pytest>=7.0; extra == "test"
28
28
  Requires-Dist: opentelemetry-sdk>=1.20; extra == "test"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: labcode
3
- Version: 0.10.2
3
+ Version: 0.10.4
4
4
  Summary: labcode -- a dialect wrapper over the Object-Flow Programming Language toolchain
5
5
  Author-email: Kazunari Kaizu <kwaizu@gmail.com>
6
6
  License-Expression: MIT
@@ -21,8 +21,8 @@ Requires-Python: >=3.10
21
21
  Description-Content-Type: text/markdown
22
22
  License-File: LICENSE
23
23
  Requires-Dist: ofplang-validate<0.5,>=0.4.1
24
- Requires-Dist: ofplang-schedule<0.15,>=0.14.1
25
- Requires-Dist: ofplang-run<0.15,>=0.14.1
24
+ Requires-Dist: ofplang-schedule<0.17,>=0.16
25
+ Requires-Dist: ofplang-run<0.17,>=0.16
26
26
  Provides-Extra: test
27
27
  Requires-Dist: pytest>=7.0; extra == "test"
28
28
  Requires-Dist: opentelemetry-sdk>=1.20; extra == "test"
@@ -1,6 +1,6 @@
1
1
  ofplang-validate<0.5,>=0.4.1
2
- ofplang-schedule<0.15,>=0.14.1
3
- ofplang-run<0.15,>=0.14.1
2
+ ofplang-schedule<0.17,>=0.16
3
+ ofplang-run<0.17,>=0.16
4
4
 
5
5
  [dev]
6
6
  pytest>=7.0
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.10.4",
3
+ "distance": 0,
4
+ "node": "gf9b42309e214b33b38fee7bacb4e940fd4bfbb76",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-10-10"
8
+ }
@@ -62,7 +62,17 @@ classifiers = [
62
62
  # every real-lab example already happens on it, and run's own floor requires it anyway
63
63
  # (an older scheduler reports a running refill free before it is).
64
64
  #
65
- # `ofplang-validate>=0.4.1`, `ofplang-schedule>=0.14.1` and `ofplang-run>=0.14.1` are
65
+ # `ofplang-schedule>=0.16` and `ofplang-run>=0.16` move together: a `branch` whose
66
+ # condition is produced during the run -- a script's verdict on a measurement -- runs
67
+ # from these (the scheduler plans it on an assumed arm and holds it back until the
68
+ # condition exists, the run states the arm once the value is recorded and replans), and
69
+ # run 0.16 needs schedule 0.16.
70
+ #
71
+ # `ofplang-schedule>=0.15` and `ofplang-run>=0.15` moved together: a `branch` whose arm
72
+ # the boundary decides runs from these (the run states each arm as the document's
73
+ # `expansion.arms`, the scheduler expands by it), and run 0.15 needs schedule 0.15.
74
+ #
75
+ # `ofplang-validate>=0.4.1`, `ofplang-schedule>=0.14.1` and `ofplang-run>=0.14.1` were
66
76
  # required together. A `map` / `fold` over a list of values is planned and run from
67
77
  # these (the run states each list's length as the document's `expansion`, the scheduler
68
78
  # expands by it), and the front door and the scheduler's reader agree again on what a
@@ -104,8 +114,8 @@ dependencies = [
104
114
  # bounds cannot protect what is already on PyPI without one, which is why they go
105
115
  # in now rather than at the first breakage.
106
116
  "ofplang-validate>=0.4.1,<0.5",
107
- "ofplang-schedule>=0.14.1,<0.15",
108
- "ofplang-run>=0.14.1,<0.15",
117
+ "ofplang-schedule>=0.16,<0.17",
118
+ "ofplang-run>=0.16,<0.17",
109
119
  ]
110
120
 
111
121
  [project.urls]
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "0.10.2",
3
- "distance": 0,
4
- "node": "g702546d47fa25fa78a8e2b3246f173db95c1ecf3",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-10-07"
8
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes