labcode 0.10.1__tar.gz → 0.10.3__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.1 → labcode-0.10.3}/CHANGELOG.md +39 -0
  2. {labcode-0.10.1 → labcode-0.10.3}/PKG-INFO +4 -4
  3. {labcode-0.10.1 → labcode-0.10.3}/labcode.egg-info/PKG-INFO +4 -4
  4. {labcode-0.10.1 → labcode-0.10.3}/labcode.egg-info/requires.txt +3 -3
  5. labcode-0.10.3/labcode.egg-info/scm_version.json +8 -0
  6. {labcode-0.10.1 → labcode-0.10.3}/pyproject.toml +18 -6
  7. labcode-0.10.1/labcode.egg-info/scm_version.json +0 -8
  8. {labcode-0.10.1 → labcode-0.10.3}/.github/workflows/ci.yml +0 -0
  9. {labcode-0.10.1 → labcode-0.10.3}/.github/workflows/publish.yml +0 -0
  10. {labcode-0.10.1 → labcode-0.10.3}/.gitignore +0 -0
  11. {labcode-0.10.1 → labcode-0.10.3}/LICENSE +0 -0
  12. {labcode-0.10.1 → labcode-0.10.3}/MANIFEST.in +0 -0
  13. {labcode-0.10.1 → labcode-0.10.3}/README.md +0 -0
  14. {labcode-0.10.1 → labcode-0.10.3}/docs/SPECIFICATIONS.md +0 -0
  15. {labcode-0.10.1 → labcode-0.10.3}/examples/README.md +0 -0
  16. {labcode-0.10.1 → labcode-0.10.3}/examples/lads_plate_cycle.env.yaml +0 -0
  17. {labcode-0.10.1 → labcode-0.10.3}/examples/lads_seal.env.yaml +0 -0
  18. {labcode-0.10.1 → labcode-0.10.3}/examples/outputs/plate_line.boundary.yaml +0 -0
  19. {labcode-0.10.1 → labcode-0.10.3}/examples/outputs/plate_line.observation.yaml +0 -0
  20. {labcode-0.10.1 → labcode-0.10.3}/examples/outputs/plate_line.plan.yaml +0 -0
  21. {labcode-0.10.1 → labcode-0.10.3}/examples/outputs/plate_line.svg +0 -0
  22. {labcode-0.10.1 → labcode-0.10.3}/examples/outputs/shared_bench.boundary.yaml +0 -0
  23. {labcode-0.10.1 → labcode-0.10.3}/examples/outputs/shared_bench.observation.yaml +0 -0
  24. {labcode-0.10.1 → labcode-0.10.3}/examples/outputs/shared_bench.plan.yaml +0 -0
  25. {labcode-0.10.1 → labcode-0.10.3}/examples/outputs/shared_bench.svg +0 -0
  26. {labcode-0.10.1 → labcode-0.10.3}/examples/outputs/sila2_plate_cycle.boundary.yaml +0 -0
  27. {labcode-0.10.1 → labcode-0.10.3}/examples/outputs/sila2_plate_cycle.observation.yaml +0 -0
  28. {labcode-0.10.1 → labcode-0.10.3}/examples/outputs/sila2_plate_cycle.plan.yaml +0 -0
  29. {labcode-0.10.1 → labcode-0.10.3}/examples/outputs/sila2_plate_cycle.svg +0 -0
  30. {labcode-0.10.1 → labcode-0.10.3}/examples/plate_line.boundary.yaml +0 -0
  31. {labcode-0.10.1 → labcode-0.10.3}/examples/plate_line.env.yaml +0 -0
  32. {labcode-0.10.1 → labcode-0.10.3}/examples/plate_line.workflow.yaml +0 -0
  33. {labcode-0.10.1 → labcode-0.10.3}/examples/preflight_sila2_env.py +0 -0
  34. {labcode-0.10.1 → labcode-0.10.3}/examples/render_plate_line.py +0 -0
  35. {labcode-0.10.1 → labcode-0.10.3}/examples/render_shared_bench.py +0 -0
  36. {labcode-0.10.1 → labcode-0.10.3}/examples/render_sila2_plate_cycle.py +0 -0
  37. {labcode-0.10.1 → labcode-0.10.3}/examples/run_all_lads_examples.py +0 -0
  38. {labcode-0.10.1 → labcode-0.10.3}/examples/run_all_sila2_examples.py +0 -0
  39. {labcode-0.10.1 → labcode-0.10.3}/examples/run_sila2_plate_cycle.py +0 -0
  40. {labcode-0.10.1 → labcode-0.10.3}/examples/run_sila2_plate_cycle_no_atc.py +0 -0
  41. {labcode-0.10.1 → labcode-0.10.3}/examples/run_sila2_seal.py +0 -0
  42. {labcode-0.10.1 → labcode-0.10.3}/examples/shared_bench.afternoon.boundary.yaml +0 -0
  43. {labcode-0.10.1 → labcode-0.10.3}/examples/shared_bench.env.yaml +0 -0
  44. {labcode-0.10.1 → labcode-0.10.3}/examples/shared_bench.morning.boundary.yaml +0 -0
  45. {labcode-0.10.1 → labcode-0.10.3}/examples/shared_bench.run.yaml +0 -0
  46. {labcode-0.10.1 → labcode-0.10.3}/examples/shared_bench.workflow.yaml +0 -0
  47. {labcode-0.10.1 → labcode-0.10.3}/examples/sila2_plate_cycle.boundary.yaml +0 -0
  48. {labcode-0.10.1 → labcode-0.10.3}/examples/sila2_plate_cycle.workflow.yaml +0 -0
  49. {labcode-0.10.1 → labcode-0.10.3}/examples/sila2_plate_cycle.wrapped.env.yaml +0 -0
  50. {labcode-0.10.1 → labcode-0.10.3}/examples/sila2_plate_cycle_no_atc.boundary.yaml +0 -0
  51. {labcode-0.10.1 → labcode-0.10.3}/examples/sila2_plate_cycle_no_atc.workflow.yaml +0 -0
  52. {labcode-0.10.1 → labcode-0.10.3}/examples/sila2_plate_cycle_no_atc.wrapped.env.yaml +0 -0
  53. {labcode-0.10.1 → labcode-0.10.3}/examples/sila2_seal.boundary.yaml +0 -0
  54. {labcode-0.10.1 → labcode-0.10.3}/examples/sila2_seal.env.yaml +0 -0
  55. {labcode-0.10.1 → labcode-0.10.3}/examples/sila2_seal.workflow.yaml +0 -0
  56. {labcode-0.10.1 → labcode-0.10.3}/examples/sila2_seal.wrapped.env.yaml +0 -0
  57. {labcode-0.10.1 → labcode-0.10.3}/labcode/__init__.py +0 -0
  58. {labcode-0.10.1 → labcode-0.10.3}/labcode/__main__.py +0 -0
  59. {labcode-0.10.1 → labcode-0.10.3}/labcode/_child.py +0 -0
  60. {labcode-0.10.1 → labcode-0.10.3}/labcode/backend.py +0 -0
  61. {labcode-0.10.1 → labcode-0.10.3}/labcode/cli.py +0 -0
  62. {labcode-0.10.1 → labcode-0.10.3}/labcode/connections.py +0 -0
  63. {labcode-0.10.1 → labcode-0.10.3}/labcode/dialect.py +0 -0
  64. {labcode-0.10.1 → labcode-0.10.3}/labcode/extension.py +0 -0
  65. {labcode-0.10.1 → labcode-0.10.3}/labcode/idgen.py +0 -0
  66. {labcode-0.10.1 → labcode-0.10.3}/labcode/lads.py +0 -0
  67. {labcode-0.10.1 → labcode-0.10.3}/labcode/lads_commands.py +0 -0
  68. {labcode-0.10.1 → labcode-0.10.3}/labcode/lads_unit.py +0 -0
  69. {labcode-0.10.1 → labcode-0.10.3}/labcode/objectid.py +0 -0
  70. {labcode-0.10.1 → labcode-0.10.3}/labcode/otel.py +0 -0
  71. {labcode-0.10.1 → labcode-0.10.3}/labcode/otel_sila2.py +0 -0
  72. {labcode-0.10.1 → labcode-0.10.3}/labcode/probe.py +0 -0
  73. {labcode-0.10.1 → labcode-0.10.3}/labcode/py.typed +0 -0
  74. {labcode-0.10.1 → labcode-0.10.3}/labcode/record.py +0 -0
  75. {labcode-0.10.1 → labcode-0.10.3}/labcode/run_cli.py +0 -0
  76. {labcode-0.10.1 → labcode-0.10.3}/labcode/runner.py +0 -0
  77. {labcode-0.10.1 → labcode-0.10.3}/labcode/sila2.py +0 -0
  78. {labcode-0.10.1 → labcode-0.10.3}/labcode/sila2_commands.py +0 -0
  79. {labcode-0.10.1 → labcode-0.10.3}/labcode/sila2_instrument.py +0 -0
  80. {labcode-0.10.1 → labcode-0.10.3}/labcode.egg-info/SOURCES.txt +0 -0
  81. {labcode-0.10.1 → labcode-0.10.3}/labcode.egg-info/dependency_links.txt +0 -0
  82. {labcode-0.10.1 → labcode-0.10.3}/labcode.egg-info/entry_points.txt +0 -0
  83. {labcode-0.10.1 → labcode-0.10.3}/labcode.egg-info/scm_file_list.json +0 -0
  84. {labcode-0.10.1 → labcode-0.10.3}/labcode.egg-info/top_level.txt +0 -0
  85. {labcode-0.10.1 → labcode-0.10.3}/setup.cfg +0 -0
  86. {labcode-0.10.1 → labcode-0.10.3}/tests/fixtures/device_script.env.yaml +0 -0
  87. {labcode-0.10.1 → labcode-0.10.3}/tests/fixtures/device_script.workflow.yaml +0 -0
  88. {labcode-0.10.1 → labcode-0.10.3}/tests/fixtures/dispense_read.workflow.yaml +0 -0
  89. {labcode-0.10.1 → labcode-0.10.3}/tests/fixtures/joint.run.yaml +0 -0
  90. {labcode-0.10.1 → labcode-0.10.3}/tests/fixtures/replenishment.env.yaml +0 -0
  91. {labcode-0.10.1 → labcode-0.10.3}/tests/fixtures/reroute_device.env.yaml +0 -0
  92. {labcode-0.10.1 → labcode-0.10.3}/tests/fixtures/reroute_transporter.env.yaml +0 -0
  93. {labcode-0.10.1 → labcode-0.10.3}/tests/fixtures/transport.env.yaml +0 -0
  94. {labcode-0.10.1 → labcode-0.10.3}/tests/fixtures/transport.workflow.yaml +0 -0
  95. {labcode-0.10.1 → labcode-0.10.3}/tests/test_backend.py +0 -0
  96. {labcode-0.10.1 → labcode-0.10.3}/tests/test_cli.py +0 -0
  97. {labcode-0.10.1 → labcode-0.10.3}/tests/test_dialect.py +0 -0
  98. {labcode-0.10.1 → labcode-0.10.3}/tests/test_joint.py +0 -0
  99. {labcode-0.10.1 → labcode-0.10.3}/tests/test_lads.py +0 -0
  100. {labcode-0.10.1 → labcode-0.10.3}/tests/test_lads_unit.py +0 -0
  101. {labcode-0.10.1 → labcode-0.10.3}/tests/test_objectid.py +0 -0
  102. {labcode-0.10.1 → labcode-0.10.3}/tests/test_otel.py +0 -0
  103. {labcode-0.10.1 → labcode-0.10.3}/tests/test_otel_child.py +0 -0
  104. {labcode-0.10.1 → labcode-0.10.3}/tests/test_otel_grpc.py +0 -0
  105. {labcode-0.10.1 → labcode-0.10.3}/tests/test_otel_sila2.py +0 -0
  106. {labcode-0.10.1 → labcode-0.10.3}/tests/test_probe.py +0 -0
  107. {labcode-0.10.1 → labcode-0.10.3}/tests/test_record.py +0 -0
  108. {labcode-0.10.1 → labcode-0.10.3}/tests/test_recording.py +0 -0
  109. {labcode-0.10.1 → labcode-0.10.3}/tests/test_run_cli.py +0 -0
  110. {labcode-0.10.1 → labcode-0.10.3}/tests/test_sila2.py +0 -0
  111. {labcode-0.10.1 → labcode-0.10.3}/tests/test_sila2_commands.py +0 -0
  112. {labcode-0.10.1 → labcode-0.10.3}/tests/test_sila2_instrument.py +0 -0
  113. {labcode-0.10.1 → labcode-0.10.3}/tests/test_structured_labcode.py +0 -0
@@ -6,6 +6,45 @@ 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.3 — 2026-10-08
10
+
11
+ No code changes; the siblings move.
12
+
13
+ ### Added
14
+
15
+ - **A `branch` runs where the boundary decides its arm.** A branch whose condition is
16
+ an entry input -- a flag, or one flag per element inside a `map` -- runs the arm the
17
+ flag picks: the runner states each arm in the document's `expansion.arms`
18
+ (ofplang-schedule SPEC §6.13) and the scheduler expands the branch with it
19
+ (ofplang-schedule 0.15, ofplang-run 0.15). A flag left out is `false` and reported
20
+ (`entry_input_defaulted`). A branch whose condition is produced during the run is
21
+ refused before anything runs (`branch_arm_unknown`).
22
+
23
+ Requires ofplang-schedule 0.15 and ofplang-run 0.15 (ofplang-validate 0.4.1 as before).
24
+
25
+ ## 0.10.2 — 2026-10-07
26
+
27
+ No code changes; the siblings move.
28
+
29
+ ### Added
30
+
31
+ - **A `map` / `fold` over a list of values runs.** `lc run` is given a list of labels,
32
+ volumes or the like and makes one invocation per element: the runner counts each
33
+ list and states its length in the document's `expansion` (ofplang-schedule SPEC
34
+ §6.13), and the scheduler expands by it (ofplang-schedule 0.14, ofplang-run 0.14).
35
+ Until now such a workflow was refused (`array_length_unknown`).
36
+
37
+ ### Changed — may need your attention
38
+
39
+ - **A list zipped with an Array of plates of another length is refused before the run
40
+ starts** (`each_length_mismatch`), where it used to stop that job at its first check.
41
+ - **A structured node's `outputs` is checked as the specification says** (ofplang-validate
42
+ 0.4.1). An entry with no `mode` is `missing_required_key`, and a reference to an output
43
+ the node does not expose -- one its `outputs` drops, or one dropped by default -- is
44
+ `output_not_exposed`. Both passed validation before.
45
+
46
+ Requires ofplang-validate 0.4.1, ofplang-schedule 0.14.1 and ofplang-run 0.14.1.
47
+
9
48
  ## 0.10.1 — 2026-10-07
10
49
 
11
50
  labcode follows specification revision 0.5. No code changes; the siblings move.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: labcode
3
- Version: 0.10.1
3
+ Version: 0.10.3
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
@@ -20,9 +20,9 @@ Classifier: Typing :: Typed
20
20
  Requires-Python: >=3.10
21
21
  Description-Content-Type: text/markdown
22
22
  License-File: LICENSE
23
- Requires-Dist: ofplang-validate<0.5,>=0.4
24
- Requires-Dist: ofplang-schedule<0.14,>=0.13.1
25
- Requires-Dist: ofplang-run<0.14,>=0.13.1
23
+ Requires-Dist: ofplang-validate<0.5,>=0.4.1
24
+ Requires-Dist: ofplang-schedule<0.16,>=0.15
25
+ Requires-Dist: ofplang-run<0.16,>=0.15
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.1
3
+ Version: 0.10.3
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
@@ -20,9 +20,9 @@ Classifier: Typing :: Typed
20
20
  Requires-Python: >=3.10
21
21
  Description-Content-Type: text/markdown
22
22
  License-File: LICENSE
23
- Requires-Dist: ofplang-validate<0.5,>=0.4
24
- Requires-Dist: ofplang-schedule<0.14,>=0.13.1
25
- Requires-Dist: ofplang-run<0.14,>=0.13.1
23
+ Requires-Dist: ofplang-validate<0.5,>=0.4.1
24
+ Requires-Dist: ofplang-schedule<0.16,>=0.15
25
+ Requires-Dist: ofplang-run<0.16,>=0.15
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
- ofplang-validate<0.5,>=0.4
2
- ofplang-schedule<0.14,>=0.13.1
3
- ofplang-run<0.14,>=0.13.1
1
+ ofplang-validate<0.5,>=0.4.1
2
+ ofplang-schedule<0.16,>=0.15
3
+ ofplang-run<0.16,>=0.15
4
4
 
5
5
  [dev]
6
6
  pytest>=7.0
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.10.3",
3
+ "distance": 0,
4
+ "node": "g748b5b84ca5df86201d3cf46406dd544cb84a4ab",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-10-08"
8
+ }
@@ -62,8 +62,20 @@ 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`, `ofplang-schedule>=0.13.1` and `ofplang-run>=0.13.1` are
66
- # required together: they implement specification revision 0.5, and `lc` validates at its
65
+ # `ofplang-schedule>=0.15` and `ofplang-run>=0.15` move together: a `branch` whose arm
66
+ # the boundary decides runs from these (the run states each arm as the document's
67
+ # `expansion.arms`, the scheduler expands by it), and run 0.15 needs schedule 0.15.
68
+ #
69
+ # `ofplang-validate>=0.4.1`, `ofplang-schedule>=0.14.1` and `ofplang-run>=0.14.1` were
70
+ # required together. A `map` / `fold` over a list of values is planned and run from
71
+ # these (the run states each list's length as the document's `expansion`, the scheduler
72
+ # expands by it), and the front door and the scheduler's reader agree again on what a
73
+ # structured node's `outputs` may say: an entry with no mode, and a reference to an
74
+ # output the node does not expose, are refused by both (validate 0.4.1), where before
75
+ # validate passed what the reader refused.
76
+ #
77
+ # The `ofplang-validate>=0.4`, `ofplang-schedule>=0.13.1` and `ofplang-run>=0.13.1`
78
+ # floors they replace were required together: they implement specification revision 0.5, and `lc` validates at its
67
79
  # front door with the one validate and plans and runs with the others, so the three have
68
80
  # to agree on what is valid. Under validate 0.3 a composite could leave an output
69
81
  # unreturned that the scheduler's reader now refuses, and a `scheduling` section passed
@@ -76,7 +88,7 @@ classifiers = [
76
88
  # labcode keys each plate's `_id` by its element. `RunResult.run_warnings`, which `lc run`
77
89
  # fills with what labcode defaulted, is new in run 0.13 too.
78
90
  #
79
- # 🔴 The schedule `<0.14` bound is a bound, not a floor: 0.10 refuses two jobs binding one
91
+ # 🔴 The schedule upper bound is a bound, not a floor: 0.10 refuses two jobs binding one
80
92
  # boundary spot where it used to warn, and 0.12 refuses a plan it can show has no
81
93
  # schedule before the solve instead of returning `unknown`. Both change what happens to
82
94
  # a document this package hands over rather than anything it calls.
@@ -95,9 +107,9 @@ dependencies = [
95
107
  # would pick up the next such sibling and start refusing its own examples. The
96
108
  # bounds cannot protect what is already on PyPI without one, which is why they go
97
109
  # in now rather than at the first breakage.
98
- "ofplang-validate>=0.4,<0.5",
99
- "ofplang-schedule>=0.13.1,<0.14",
100
- "ofplang-run>=0.13.1,<0.14",
110
+ "ofplang-validate>=0.4.1,<0.5",
111
+ "ofplang-schedule>=0.15,<0.16",
112
+ "ofplang-run>=0.15,<0.16",
101
113
  ]
102
114
 
103
115
  [project.urls]
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "0.10.1",
3
- "distance": 0,
4
- "node": "g1787216e03cd07ec2fe1ed38539ba7006be08494",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-10-06"
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