labcode 0.10.3__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.
- {labcode-0.10.3 → labcode-0.10.4}/CHANGELOG.md +25 -0
- {labcode-0.10.3 → labcode-0.10.4}/PKG-INFO +3 -3
- {labcode-0.10.3 → labcode-0.10.4}/labcode.egg-info/PKG-INFO +3 -3
- {labcode-0.10.3 → labcode-0.10.4}/labcode.egg-info/requires.txt +2 -2
- labcode-0.10.4/labcode.egg-info/scm_version.json +8 -0
- {labcode-0.10.3 → labcode-0.10.4}/pyproject.toml +9 -3
- labcode-0.10.3/labcode.egg-info/scm_version.json +0 -8
- {labcode-0.10.3 → labcode-0.10.4}/.github/workflows/ci.yml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/.github/workflows/publish.yml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/.gitignore +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/LICENSE +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/MANIFEST.in +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/README.md +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/docs/SPECIFICATIONS.md +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/README.md +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/lads_plate_cycle.env.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/lads_seal.env.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/outputs/plate_line.boundary.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/outputs/plate_line.observation.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/outputs/plate_line.plan.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/outputs/plate_line.svg +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/outputs/shared_bench.boundary.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/outputs/shared_bench.observation.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/outputs/shared_bench.plan.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/outputs/shared_bench.svg +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/outputs/sila2_plate_cycle.boundary.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/outputs/sila2_plate_cycle.observation.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/outputs/sila2_plate_cycle.plan.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/outputs/sila2_plate_cycle.svg +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/plate_line.boundary.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/plate_line.env.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/plate_line.workflow.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/preflight_sila2_env.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/render_plate_line.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/render_shared_bench.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/render_sila2_plate_cycle.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/run_all_lads_examples.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/run_all_sila2_examples.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/run_sila2_plate_cycle.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/run_sila2_plate_cycle_no_atc.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/run_sila2_seal.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/shared_bench.afternoon.boundary.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/shared_bench.env.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/shared_bench.morning.boundary.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/shared_bench.run.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/shared_bench.workflow.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/sila2_plate_cycle.boundary.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/sila2_plate_cycle.workflow.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/sila2_plate_cycle.wrapped.env.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/sila2_plate_cycle_no_atc.boundary.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/sila2_plate_cycle_no_atc.workflow.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/sila2_plate_cycle_no_atc.wrapped.env.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/sila2_seal.boundary.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/sila2_seal.env.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/sila2_seal.workflow.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/examples/sila2_seal.wrapped.env.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/__init__.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/__main__.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/_child.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/backend.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/cli.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/connections.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/dialect.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/extension.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/idgen.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/lads.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/lads_commands.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/lads_unit.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/objectid.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/otel.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/otel_sila2.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/probe.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/py.typed +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/record.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/run_cli.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/runner.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/sila2.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/sila2_commands.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode/sila2_instrument.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode.egg-info/SOURCES.txt +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode.egg-info/dependency_links.txt +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode.egg-info/entry_points.txt +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode.egg-info/scm_file_list.json +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/labcode.egg-info/top_level.txt +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/setup.cfg +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/fixtures/device_script.env.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/fixtures/device_script.workflow.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/fixtures/dispense_read.workflow.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/fixtures/joint.run.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/fixtures/replenishment.env.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/fixtures/reroute_device.env.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/fixtures/reroute_transporter.env.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/fixtures/transport.env.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/fixtures/transport.workflow.yaml +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/test_backend.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/test_cli.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/test_dialect.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/test_joint.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/test_lads.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/test_lads_unit.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/test_objectid.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/test_otel.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/test_otel_child.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/test_otel_grpc.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/test_otel_sila2.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/test_probe.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/test_record.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/test_recording.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/test_run_cli.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/test_sila2.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/test_sila2_commands.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/test_sila2_instrument.py +0 -0
- {labcode-0.10.3 → labcode-0.10.4}/tests/test_structured_labcode.py +0 -0
|
@@ -6,6 +6,31 @@ 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
|
+
|
|
9
34
|
## 0.10.3 — 2026-10-08
|
|
10
35
|
|
|
11
36
|
No code changes; the siblings move.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: labcode
|
|
3
|
-
Version: 0.10.
|
|
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.
|
|
25
|
-
Requires-Dist: ofplang-run<0.
|
|
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.
|
|
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.
|
|
25
|
-
Requires-Dist: ofplang-run<0.
|
|
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"
|
|
@@ -62,7 +62,13 @@ 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-schedule>=0.
|
|
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
|
|
66
72
|
# the boundary decides runs from these (the run states each arm as the document's
|
|
67
73
|
# `expansion.arms`, the scheduler expands by it), and run 0.15 needs schedule 0.15.
|
|
68
74
|
#
|
|
@@ -108,8 +114,8 @@ dependencies = [
|
|
|
108
114
|
# bounds cannot protect what is already on PyPI without one, which is why they go
|
|
109
115
|
# in now rather than at the first breakage.
|
|
110
116
|
"ofplang-validate>=0.4.1,<0.5",
|
|
111
|
-
"ofplang-schedule>=0.
|
|
112
|
-
"ofplang-run>=0.
|
|
117
|
+
"ofplang-schedule>=0.16,<0.17",
|
|
118
|
+
"ofplang-run>=0.16,<0.17",
|
|
113
119
|
]
|
|
114
120
|
|
|
115
121
|
[project.urls]
|
|
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
|
|
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
|
|
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
|
|
File without changes
|