labcode 0.10.4__tar.gz → 0.10.6__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.4 → labcode-0.10.6}/CHANGELOG.md +47 -0
  2. {labcode-0.10.4 → labcode-0.10.6}/PKG-INFO +3 -3
  3. {labcode-0.10.4 → labcode-0.10.6}/labcode.egg-info/PKG-INFO +3 -3
  4. {labcode-0.10.4 → labcode-0.10.6}/labcode.egg-info/requires.txt +2 -2
  5. labcode-0.10.6/labcode.egg-info/scm_version.json +8 -0
  6. {labcode-0.10.4 → labcode-0.10.6}/pyproject.toml +14 -3
  7. labcode-0.10.4/labcode.egg-info/scm_version.json +0 -8
  8. {labcode-0.10.4 → labcode-0.10.6}/.github/workflows/ci.yml +0 -0
  9. {labcode-0.10.4 → labcode-0.10.6}/.github/workflows/publish.yml +0 -0
  10. {labcode-0.10.4 → labcode-0.10.6}/.gitignore +0 -0
  11. {labcode-0.10.4 → labcode-0.10.6}/LICENSE +0 -0
  12. {labcode-0.10.4 → labcode-0.10.6}/MANIFEST.in +0 -0
  13. {labcode-0.10.4 → labcode-0.10.6}/README.md +0 -0
  14. {labcode-0.10.4 → labcode-0.10.6}/docs/SPECIFICATIONS.md +0 -0
  15. {labcode-0.10.4 → labcode-0.10.6}/examples/README.md +0 -0
  16. {labcode-0.10.4 → labcode-0.10.6}/examples/lads_plate_cycle.env.yaml +0 -0
  17. {labcode-0.10.4 → labcode-0.10.6}/examples/lads_seal.env.yaml +0 -0
  18. {labcode-0.10.4 → labcode-0.10.6}/examples/outputs/plate_line.boundary.yaml +0 -0
  19. {labcode-0.10.4 → labcode-0.10.6}/examples/outputs/plate_line.observation.yaml +0 -0
  20. {labcode-0.10.4 → labcode-0.10.6}/examples/outputs/plate_line.plan.yaml +0 -0
  21. {labcode-0.10.4 → labcode-0.10.6}/examples/outputs/plate_line.svg +0 -0
  22. {labcode-0.10.4 → labcode-0.10.6}/examples/outputs/shared_bench.boundary.yaml +0 -0
  23. {labcode-0.10.4 → labcode-0.10.6}/examples/outputs/shared_bench.observation.yaml +0 -0
  24. {labcode-0.10.4 → labcode-0.10.6}/examples/outputs/shared_bench.plan.yaml +0 -0
  25. {labcode-0.10.4 → labcode-0.10.6}/examples/outputs/shared_bench.svg +0 -0
  26. {labcode-0.10.4 → labcode-0.10.6}/examples/outputs/sila2_plate_cycle.boundary.yaml +0 -0
  27. {labcode-0.10.4 → labcode-0.10.6}/examples/outputs/sila2_plate_cycle.observation.yaml +0 -0
  28. {labcode-0.10.4 → labcode-0.10.6}/examples/outputs/sila2_plate_cycle.plan.yaml +0 -0
  29. {labcode-0.10.4 → labcode-0.10.6}/examples/outputs/sila2_plate_cycle.svg +0 -0
  30. {labcode-0.10.4 → labcode-0.10.6}/examples/plate_line.boundary.yaml +0 -0
  31. {labcode-0.10.4 → labcode-0.10.6}/examples/plate_line.env.yaml +0 -0
  32. {labcode-0.10.4 → labcode-0.10.6}/examples/plate_line.workflow.yaml +0 -0
  33. {labcode-0.10.4 → labcode-0.10.6}/examples/preflight_sila2_env.py +0 -0
  34. {labcode-0.10.4 → labcode-0.10.6}/examples/render_plate_line.py +0 -0
  35. {labcode-0.10.4 → labcode-0.10.6}/examples/render_shared_bench.py +0 -0
  36. {labcode-0.10.4 → labcode-0.10.6}/examples/render_sila2_plate_cycle.py +0 -0
  37. {labcode-0.10.4 → labcode-0.10.6}/examples/run_all_lads_examples.py +0 -0
  38. {labcode-0.10.4 → labcode-0.10.6}/examples/run_all_sila2_examples.py +0 -0
  39. {labcode-0.10.4 → labcode-0.10.6}/examples/run_sila2_plate_cycle.py +0 -0
  40. {labcode-0.10.4 → labcode-0.10.6}/examples/run_sila2_plate_cycle_no_atc.py +0 -0
  41. {labcode-0.10.4 → labcode-0.10.6}/examples/run_sila2_seal.py +0 -0
  42. {labcode-0.10.4 → labcode-0.10.6}/examples/shared_bench.afternoon.boundary.yaml +0 -0
  43. {labcode-0.10.4 → labcode-0.10.6}/examples/shared_bench.env.yaml +0 -0
  44. {labcode-0.10.4 → labcode-0.10.6}/examples/shared_bench.morning.boundary.yaml +0 -0
  45. {labcode-0.10.4 → labcode-0.10.6}/examples/shared_bench.run.yaml +0 -0
  46. {labcode-0.10.4 → labcode-0.10.6}/examples/shared_bench.workflow.yaml +0 -0
  47. {labcode-0.10.4 → labcode-0.10.6}/examples/sila2_plate_cycle.boundary.yaml +0 -0
  48. {labcode-0.10.4 → labcode-0.10.6}/examples/sila2_plate_cycle.workflow.yaml +0 -0
  49. {labcode-0.10.4 → labcode-0.10.6}/examples/sila2_plate_cycle.wrapped.env.yaml +0 -0
  50. {labcode-0.10.4 → labcode-0.10.6}/examples/sila2_plate_cycle_no_atc.boundary.yaml +0 -0
  51. {labcode-0.10.4 → labcode-0.10.6}/examples/sila2_plate_cycle_no_atc.workflow.yaml +0 -0
  52. {labcode-0.10.4 → labcode-0.10.6}/examples/sila2_plate_cycle_no_atc.wrapped.env.yaml +0 -0
  53. {labcode-0.10.4 → labcode-0.10.6}/examples/sila2_seal.boundary.yaml +0 -0
  54. {labcode-0.10.4 → labcode-0.10.6}/examples/sila2_seal.env.yaml +0 -0
  55. {labcode-0.10.4 → labcode-0.10.6}/examples/sila2_seal.workflow.yaml +0 -0
  56. {labcode-0.10.4 → labcode-0.10.6}/examples/sila2_seal.wrapped.env.yaml +0 -0
  57. {labcode-0.10.4 → labcode-0.10.6}/labcode/__init__.py +0 -0
  58. {labcode-0.10.4 → labcode-0.10.6}/labcode/__main__.py +0 -0
  59. {labcode-0.10.4 → labcode-0.10.6}/labcode/_child.py +0 -0
  60. {labcode-0.10.4 → labcode-0.10.6}/labcode/backend.py +0 -0
  61. {labcode-0.10.4 → labcode-0.10.6}/labcode/cli.py +0 -0
  62. {labcode-0.10.4 → labcode-0.10.6}/labcode/connections.py +0 -0
  63. {labcode-0.10.4 → labcode-0.10.6}/labcode/dialect.py +0 -0
  64. {labcode-0.10.4 → labcode-0.10.6}/labcode/extension.py +0 -0
  65. {labcode-0.10.4 → labcode-0.10.6}/labcode/idgen.py +0 -0
  66. {labcode-0.10.4 → labcode-0.10.6}/labcode/lads.py +0 -0
  67. {labcode-0.10.4 → labcode-0.10.6}/labcode/lads_commands.py +0 -0
  68. {labcode-0.10.4 → labcode-0.10.6}/labcode/lads_unit.py +0 -0
  69. {labcode-0.10.4 → labcode-0.10.6}/labcode/objectid.py +0 -0
  70. {labcode-0.10.4 → labcode-0.10.6}/labcode/otel.py +0 -0
  71. {labcode-0.10.4 → labcode-0.10.6}/labcode/otel_sila2.py +0 -0
  72. {labcode-0.10.4 → labcode-0.10.6}/labcode/probe.py +0 -0
  73. {labcode-0.10.4 → labcode-0.10.6}/labcode/py.typed +0 -0
  74. {labcode-0.10.4 → labcode-0.10.6}/labcode/record.py +0 -0
  75. {labcode-0.10.4 → labcode-0.10.6}/labcode/run_cli.py +0 -0
  76. {labcode-0.10.4 → labcode-0.10.6}/labcode/runner.py +0 -0
  77. {labcode-0.10.4 → labcode-0.10.6}/labcode/sila2.py +0 -0
  78. {labcode-0.10.4 → labcode-0.10.6}/labcode/sila2_commands.py +0 -0
  79. {labcode-0.10.4 → labcode-0.10.6}/labcode/sila2_instrument.py +0 -0
  80. {labcode-0.10.4 → labcode-0.10.6}/labcode.egg-info/SOURCES.txt +0 -0
  81. {labcode-0.10.4 → labcode-0.10.6}/labcode.egg-info/dependency_links.txt +0 -0
  82. {labcode-0.10.4 → labcode-0.10.6}/labcode.egg-info/entry_points.txt +0 -0
  83. {labcode-0.10.4 → labcode-0.10.6}/labcode.egg-info/scm_file_list.json +0 -0
  84. {labcode-0.10.4 → labcode-0.10.6}/labcode.egg-info/top_level.txt +0 -0
  85. {labcode-0.10.4 → labcode-0.10.6}/setup.cfg +0 -0
  86. {labcode-0.10.4 → labcode-0.10.6}/tests/fixtures/device_script.env.yaml +0 -0
  87. {labcode-0.10.4 → labcode-0.10.6}/tests/fixtures/device_script.workflow.yaml +0 -0
  88. {labcode-0.10.4 → labcode-0.10.6}/tests/fixtures/dispense_read.workflow.yaml +0 -0
  89. {labcode-0.10.4 → labcode-0.10.6}/tests/fixtures/joint.run.yaml +0 -0
  90. {labcode-0.10.4 → labcode-0.10.6}/tests/fixtures/replenishment.env.yaml +0 -0
  91. {labcode-0.10.4 → labcode-0.10.6}/tests/fixtures/reroute_device.env.yaml +0 -0
  92. {labcode-0.10.4 → labcode-0.10.6}/tests/fixtures/reroute_transporter.env.yaml +0 -0
  93. {labcode-0.10.4 → labcode-0.10.6}/tests/fixtures/transport.env.yaml +0 -0
  94. {labcode-0.10.4 → labcode-0.10.6}/tests/fixtures/transport.workflow.yaml +0 -0
  95. {labcode-0.10.4 → labcode-0.10.6}/tests/test_backend.py +0 -0
  96. {labcode-0.10.4 → labcode-0.10.6}/tests/test_cli.py +0 -0
  97. {labcode-0.10.4 → labcode-0.10.6}/tests/test_dialect.py +0 -0
  98. {labcode-0.10.4 → labcode-0.10.6}/tests/test_joint.py +0 -0
  99. {labcode-0.10.4 → labcode-0.10.6}/tests/test_lads.py +0 -0
  100. {labcode-0.10.4 → labcode-0.10.6}/tests/test_lads_unit.py +0 -0
  101. {labcode-0.10.4 → labcode-0.10.6}/tests/test_objectid.py +0 -0
  102. {labcode-0.10.4 → labcode-0.10.6}/tests/test_otel.py +0 -0
  103. {labcode-0.10.4 → labcode-0.10.6}/tests/test_otel_child.py +0 -0
  104. {labcode-0.10.4 → labcode-0.10.6}/tests/test_otel_grpc.py +0 -0
  105. {labcode-0.10.4 → labcode-0.10.6}/tests/test_otel_sila2.py +0 -0
  106. {labcode-0.10.4 → labcode-0.10.6}/tests/test_probe.py +0 -0
  107. {labcode-0.10.4 → labcode-0.10.6}/tests/test_record.py +0 -0
  108. {labcode-0.10.4 → labcode-0.10.6}/tests/test_recording.py +0 -0
  109. {labcode-0.10.4 → labcode-0.10.6}/tests/test_run_cli.py +0 -0
  110. {labcode-0.10.4 → labcode-0.10.6}/tests/test_sila2.py +0 -0
  111. {labcode-0.10.4 → labcode-0.10.6}/tests/test_sila2_commands.py +0 -0
  112. {labcode-0.10.4 → labcode-0.10.6}/tests/test_sila2_instrument.py +0 -0
  113. {labcode-0.10.4 → labcode-0.10.6}/tests/test_structured_labcode.py +0 -0
@@ -6,6 +6,53 @@ 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.6 — 2026-10-13
10
+
11
+ No code changes; the siblings move.
12
+
13
+ ### Changed
14
+
15
+ - **A replan after a branch or loop decided during the run is always constructible.** A
16
+ branch decided on the arm not assumed, or a loop going on, used to leave the scheduler
17
+ with only a search; the plan it replaces, with that region's new work spliced in, is
18
+ now its starting point, and what a replan gets if the search runs out of time
19
+ (ofplang-schedule 0.18, ofplang-run 0.18, design.md D67).
20
+
21
+ ### Fixed (already picked up by 0.10.5 through ofplang-schedule 0.17.1 and 0.17.2)
22
+
23
+ - A replan could come back infeasible -- stopping every job of a run -- when work that
24
+ ran late left an Object resting where an open branch keeps its spots, or when a branch
25
+ inside a loop was decided before the loop's own reading and another job took the spot
26
+ the loop's next invocation needs.
27
+
28
+ ## 0.10.5 — 2026-10-13
29
+
30
+ No code changes; the siblings move.
31
+
32
+ ### Added
33
+
34
+ - **A `do_while` runs.** A loop whose condition is read during the run -- a script's
35
+ verdict on each measurement -- is planned to end after the invocation it is in, and
36
+ grows by one invocation each time the reading says go on, up to `max_iterations`
37
+ (ofplang-schedule 0.17, ofplang-run 0.17). Stopping at the limit is reported
38
+ (`loop_exhausted`), never failed.
39
+ - **A branch or loop decided during the run keeps its places.** While it is open, the
40
+ plan keeps every spot any of its outcomes may need (a `reservation`), so a second job
41
+ sharing the only sink or reader waits outside instead of the two locking when the
42
+ outcome is not the one assumed. Whatever such a region hands on leaves through a
43
+ `gate` in the plan.
44
+
45
+ ### Changed
46
+
47
+ - A run no longer skips planning a branch's other arm on a replan: what the branch keeps
48
+ for itself comes from planning both arms, so a branch whose other arm could never be
49
+ planned is refused (`arm_unplannable`) on any plan, not only the first.
50
+
51
+ ### Known limitations
52
+
53
+ - **`lc export` cannot read such a plan yet.** The export viewer does not know the
54
+ `decision`, `gate` and `reservation` entries; plans without them are unaffected.
55
+
9
56
  ## 0.10.4 — 2026-10-10
10
57
 
11
58
  No code changes; the siblings move.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: labcode
3
- Version: 0.10.4
3
+ Version: 0.10.6
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.17,>=0.16
25
- Requires-Dist: ofplang-run<0.17,>=0.16
24
+ Requires-Dist: ofplang-schedule<0.19,>=0.18
25
+ Requires-Dist: ofplang-run<0.19,>=0.18
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.4
3
+ Version: 0.10.6
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.17,>=0.16
25
- Requires-Dist: ofplang-run<0.17,>=0.16
24
+ Requires-Dist: ofplang-schedule<0.19,>=0.18
25
+ Requires-Dist: ofplang-run<0.19,>=0.18
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.17,>=0.16
3
- ofplang-run<0.17,>=0.16
2
+ ofplang-schedule<0.19,>=0.18
3
+ ofplang-run<0.19,>=0.18
4
4
 
5
5
  [dev]
6
6
  pytest>=7.0
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.10.6",
3
+ "distance": 0,
4
+ "node": "gaeac1c020aa45ecc2cb4d88af06b046f7a8ce57e",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-10-13"
8
+ }
@@ -62,7 +62,18 @@ 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.16` and `ofplang-run>=0.16` move together: a `branch` whose
65
+ # `ofplang-schedule>=0.18` and `ofplang-run>=0.18` move together: a replan after a branch
66
+ # decided during the run on the arm not assumed, or a loop going on, is constructed from
67
+ # the plan it replaces, so a run whose solver runs out of budget no longer stops there
68
+ # (ofplang-schedule design.md D67); run 0.18 needs schedule 0.18.
69
+ #
70
+ # `ofplang-schedule>=0.17` and `ofplang-run>=0.17` moved together: a `do_while` whose
71
+ # condition a script reads during the run runs from these, and a branch or loop decided
72
+ # only during the run keeps the spots it may yet need while it is open, so jobs sharing a
73
+ # machine no longer lock on an assumed outcome (ofplang-schedule design.md D65, D66);
74
+ # run 0.17 needs schedule 0.17.
75
+ #
76
+ # `ofplang-schedule>=0.16` and `ofplang-run>=0.16` moved together: a `branch` whose
66
77
  # condition is produced during the run -- a script's verdict on a measurement -- runs
67
78
  # from these (the scheduler plans it on an assumed arm and holds it back until the
68
79
  # condition exists, the run states the arm once the value is recorded and replans), and
@@ -114,8 +125,8 @@ dependencies = [
114
125
  # bounds cannot protect what is already on PyPI without one, which is why they go
115
126
  # in now rather than at the first breakage.
116
127
  "ofplang-validate>=0.4.1,<0.5",
117
- "ofplang-schedule>=0.16,<0.17",
118
- "ofplang-run>=0.16,<0.17",
128
+ "ofplang-schedule>=0.18,<0.19",
129
+ "ofplang-run>=0.18,<0.19",
119
130
  ]
120
131
 
121
132
  [project.urls]
@@ -1,8 +0,0 @@
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
- }
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