solverforge 0.6.2__tar.gz → 0.6.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.
- {solverforge-0.6.2 → solverforge-0.6.3}/Cargo.lock +13 -13
- {solverforge-0.6.2 → solverforge-0.6.3}/Cargo.toml +8 -8
- {solverforge-0.6.2 → solverforge-0.6.3}/PKG-INFO +19 -13
- {solverforge-0.6.2 → solverforge-0.6.3}/README.md +18 -12
- {solverforge-0.6.2 → solverforge-0.6.3}/pyproject.toml +1 -1
- {solverforge-0.6.2 → solverforge-0.6.3}/python/solverforge/__init__.py +1 -1
- {solverforge-0.6.2 → solverforge-0.6.3}/LICENSE +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/python/solverforge/_native.pyi +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/python/solverforge/config.py +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/python/solverforge/console.py +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/python/solverforge/constraints.py +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/python/solverforge/decorators.py +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/python/solverforge/errors.py +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/python/solverforge/events.py +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/python/solverforge/fields.py +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/python/solverforge/groups.py +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/python/solverforge/joiner.py +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/python/solverforge/manager.py +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/python/solverforge/model.py +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/python/solverforge/py.typed +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/python/solverforge/score.py +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/python/solverforge/solver.py +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/python/solverforge/typing.py +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/python/solverforge/ui.py +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/rust-toolchain.toml +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/bindings.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/callbacks/call.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/callbacks/mod.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/callbacks/registry.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/callbacks/threading.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/config.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/constraints/compiled.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/constraints/evaluate.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/constraints/incremental.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/constraints/list_precedence.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/constraints/matches.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/constraints/mod.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/constraints/state.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/constraints/stream_plan.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/descriptor/extractor.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/descriptor/mod.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/descriptor/variable.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/error.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/intern.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/lib.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/manager/candidate_trace.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/manager/events.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/manager/jobs.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/manager/mod.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/manager/provenance.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/proxy/entity.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/proxy/list.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/proxy/mod.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/proxy/solution.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/runtime/candidate_metric.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/runtime/dynamic_assignment_group.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/runtime/dynamic_provider.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/runtime/list_slots.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/runtime/mod.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/runtime/scalar_slots.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/schema/build.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/schema/compiled.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/schema/mod.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/schema/parse.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/schema/python.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/schema/runtime_plan.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/schema/types.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/schema/validate.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/score.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/solver/api.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/solver/console.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/solver/mod.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/solver/progress.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/solver/result.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/solver/solvable.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/state/callback_view.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/state/clone.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/state/entity_table.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/state/marshal.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/state/mod.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/state/solution.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/state/variables.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/ui.rs +0 -0
- {solverforge-0.6.2 → solverforge-0.6.3}/src/value.rs +0 -0
|
@@ -560,9 +560,9 @@ checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
|
|
|
560
560
|
|
|
561
561
|
[[package]]
|
|
562
562
|
name = "solverforge-bridge"
|
|
563
|
-
version = "0.19.
|
|
563
|
+
version = "0.19.1"
|
|
564
564
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
565
|
-
checksum = "
|
|
565
|
+
checksum = "6bc1bbd14aa7b23a845359b408747b6b783ed31529f1b2cfa12512d425e305f5"
|
|
566
566
|
dependencies = [
|
|
567
567
|
"solverforge-config",
|
|
568
568
|
"solverforge-core",
|
|
@@ -572,9 +572,9 @@ dependencies = [
|
|
|
572
572
|
|
|
573
573
|
[[package]]
|
|
574
574
|
name = "solverforge-config"
|
|
575
|
-
version = "0.19.
|
|
575
|
+
version = "0.19.1"
|
|
576
576
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
577
|
-
checksum = "
|
|
577
|
+
checksum = "3251fc0471e05f2c05f9148f648618aa8d021fa4dff9af626ac7f05843f114f8"
|
|
578
578
|
dependencies = [
|
|
579
579
|
"serde",
|
|
580
580
|
"serde_yaml",
|
|
@@ -585,9 +585,9 @@ dependencies = [
|
|
|
585
585
|
|
|
586
586
|
[[package]]
|
|
587
587
|
name = "solverforge-console"
|
|
588
|
-
version = "0.19.
|
|
588
|
+
version = "0.19.1"
|
|
589
589
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
590
|
-
checksum = "
|
|
590
|
+
checksum = "42794d46f6685a00e9387a67b0037d49321f7e34796cd5a97b8fd99a72e20377"
|
|
591
591
|
dependencies = [
|
|
592
592
|
"num-format",
|
|
593
593
|
"owo-colors",
|
|
@@ -597,18 +597,18 @@ dependencies = [
|
|
|
597
597
|
|
|
598
598
|
[[package]]
|
|
599
599
|
name = "solverforge-core"
|
|
600
|
-
version = "0.19.
|
|
600
|
+
version = "0.19.1"
|
|
601
601
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
602
|
-
checksum = "
|
|
602
|
+
checksum = "32858c2be2505640f60a0bcee902a29e7b9dd136aec49928601ca8764920cb79"
|
|
603
603
|
dependencies = [
|
|
604
604
|
"thiserror",
|
|
605
605
|
]
|
|
606
606
|
|
|
607
607
|
[[package]]
|
|
608
608
|
name = "solverforge-scoring"
|
|
609
|
-
version = "0.19.
|
|
609
|
+
version = "0.19.1"
|
|
610
610
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
611
|
-
checksum = "
|
|
611
|
+
checksum = "50bd20153f578099fe768873f8d5c07f8e4a56e79bb3da4611776ca5f65941e4"
|
|
612
612
|
dependencies = [
|
|
613
613
|
"solverforge-core",
|
|
614
614
|
"thiserror",
|
|
@@ -616,9 +616,9 @@ dependencies = [
|
|
|
616
616
|
|
|
617
617
|
[[package]]
|
|
618
618
|
name = "solverforge-solver"
|
|
619
|
-
version = "0.19.
|
|
619
|
+
version = "0.19.1"
|
|
620
620
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
621
|
-
checksum = "
|
|
621
|
+
checksum = "ae2870ba2c94f03150870d84224fc009936071f9e9313161979473735e059988"
|
|
622
622
|
dependencies = [
|
|
623
623
|
"rand",
|
|
624
624
|
"rand_chacha",
|
|
@@ -644,7 +644,7 @@ dependencies = [
|
|
|
644
644
|
|
|
645
645
|
[[package]]
|
|
646
646
|
name = "solverforge_py"
|
|
647
|
-
version = "0.6.
|
|
647
|
+
version = "0.6.3"
|
|
648
648
|
dependencies = [
|
|
649
649
|
"indexmap",
|
|
650
650
|
"once_cell",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "solverforge_py"
|
|
3
|
-
version = "0.6.
|
|
3
|
+
version = "0.6.3"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
license = "Apache-2.0"
|
|
6
6
|
rust-version = "1.95"
|
|
@@ -26,7 +26,7 @@ name = "solverforge_py"
|
|
|
26
26
|
crate-type = ["cdylib", "rlib"]
|
|
27
27
|
|
|
28
28
|
[package.metadata.solverforge]
|
|
29
|
-
version = "0.19.
|
|
29
|
+
version = "0.19.1"
|
|
30
30
|
|
|
31
31
|
[dependencies]
|
|
32
32
|
indexmap = "2.12.1"
|
|
@@ -42,12 +42,12 @@ toml = "0.9.8"
|
|
|
42
42
|
tracing = "0.1.44"
|
|
43
43
|
tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
|
|
44
44
|
|
|
45
|
-
solverforge-config = { version = "=0.19.
|
|
46
|
-
solverforge-bridge = { version = "=0.19.
|
|
47
|
-
solverforge-console = { version = "=0.19.
|
|
48
|
-
solverforge-core = { version = "=0.19.
|
|
49
|
-
solverforge-scoring = { version = "=0.19.
|
|
50
|
-
solverforge-solver = { version = "=0.19.
|
|
45
|
+
solverforge-config = { version = "=0.19.1" }
|
|
46
|
+
solverforge-bridge = { version = "=0.19.1" }
|
|
47
|
+
solverforge-console = { version = "=0.19.1", features = ["verbose-logging"] }
|
|
48
|
+
solverforge-core = { version = "=0.19.1" }
|
|
49
|
+
solverforge-scoring = { version = "=0.19.1" }
|
|
50
|
+
solverforge-solver = { version = "=0.19.1" }
|
|
51
51
|
solverforge-ui = { version = "=0.7.0", default-features = false }
|
|
52
52
|
|
|
53
53
|
[dev-dependencies]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: solverforge
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.3
|
|
4
4
|
Classifier: Development Status :: 3 - Alpha
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -39,10 +39,10 @@ The native extension owns the working solution state in Rust so SolverForge can
|
|
|
39
39
|
clone, mutate, and snapshot solutions safely. Python callbacks are the single
|
|
40
40
|
constraint authoring surface.
|
|
41
41
|
|
|
42
|
-
The package targets CPython 3.14 and Rust 1.95.0. This checkout
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
The package targets CPython 3.14 and Rust 1.95.0. This checkout targets the
|
|
43
|
+
SolverForge Rust crates `0.19.1` and pins `solverforge-ui` to `0.7.0` through
|
|
44
|
+
exact crates.io versions in `Cargo.toml` and registry checksums in `Cargo.lock`.
|
|
45
|
+
There is no local path or Git dependency override. The `solverforge`
|
|
46
46
|
`0.6.x` line is the current dynamic binding architecture and intentionally
|
|
47
47
|
supersedes the older incompatible `0.2.x` and `0.3.0` artifacts in the same PyPI
|
|
48
48
|
namespace. Those older artifacts exposed `SolverFactory`, `PlanningVariable`,
|
|
@@ -50,12 +50,12 @@ Java service requirements, and other APIs that are not part of this package.
|
|
|
50
50
|
|
|
51
51
|
## Installation
|
|
52
52
|
|
|
53
|
-
The package version prepared by this checkout is `solverforge` `0.6.
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
The package version prepared by this checkout is `solverforge` `0.6.3`, targeting
|
|
54
|
+
the published and locked SolverForge Rust `0.19.1` registry dependency base.
|
|
55
|
+
Install the matching package after its Python release with:
|
|
56
56
|
|
|
57
57
|
```sh
|
|
58
|
-
python3.14 -m pip install "solverforge==0.6.
|
|
58
|
+
python3.14 -m pip install "solverforge==0.6.3"
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
The installable wheel contains the core `solverforge` package, native extension,
|
|
@@ -80,7 +80,7 @@ installed package without `PYTHONPATH` or an editable checkout:
|
|
|
80
80
|
```sh
|
|
81
81
|
python3.14 -m venv .venv-examples
|
|
82
82
|
. .venv-examples/bin/activate
|
|
83
|
-
python -m pip install "solverforge[examples]==0.6.
|
|
83
|
+
python -m pip install "solverforge[examples]==0.6.3"
|
|
84
84
|
python examples/nqueens.py
|
|
85
85
|
python -m examples.solverforge_hospital
|
|
86
86
|
python -m examples.solverforge_deliveries
|
|
@@ -187,9 +187,13 @@ Run `make help` for focused targets such as `make test-hospital`,
|
|
|
187
187
|
`list_cheapest_insertion`, `list_regret_insertion`, `list_clarke_wright`, and
|
|
188
188
|
`list_k_opt`, with the final two requiring their respective savings and route
|
|
189
189
|
metadata bundles. These are core graph nodes over the immutable runtime
|
|
190
|
-
model.
|
|
191
|
-
|
|
192
|
-
|
|
190
|
+
model. All configured limits remain binding during construction. A solve
|
|
191
|
+
publishes a best or completed solution only after every list element,
|
|
192
|
+
required assignment row, and non-optional scalar variable is assigned; if a
|
|
193
|
+
limit is reached first, a direct solve raises and a retained job enters
|
|
194
|
+
`FAILED` without exposing a partial snapshot. Omitted construction still
|
|
195
|
+
resolves required and optional stages in core, but required work never
|
|
196
|
+
bypasses a configured limit. Default local search is assembled only when the top-level
|
|
193
197
|
termination has an effective finite limit, so an empty or invalid termination
|
|
194
198
|
cannot accidentally create an unbounded solve. There is no wrapper assignment
|
|
195
199
|
placer, required stream, phase tree, TLS slot state, synthetic metric, or
|
|
@@ -197,6 +201,8 @@ Run `make help` for focused targets such as `make test-hospital`,
|
|
|
197
201
|
- `SolverManager` is backed by upstream retained jobs, statuses, events, and
|
|
198
202
|
snapshots. `SolverManager.solve(...)` returns `JobHandle(job_id=...)`; the
|
|
199
203
|
manager supports pause, resume, cancel, delete, and exact snapshot reads.
|
|
204
|
+
A pause before mandatory construction completes remains resumable internal
|
|
205
|
+
state and does not expose an incomplete solution snapshot.
|
|
200
206
|
Retained event payloads read current score from the attached solution snapshot
|
|
201
207
|
when present. Long-running phases publish progress at the shared upstream
|
|
202
208
|
cadence, and telemetry includes the current phase type, index, counters, and
|
|
@@ -8,10 +8,10 @@ The native extension owns the working solution state in Rust so SolverForge can
|
|
|
8
8
|
clone, mutate, and snapshot solutions safely. Python callbacks are the single
|
|
9
9
|
constraint authoring surface.
|
|
10
10
|
|
|
11
|
-
The package targets CPython 3.14 and Rust 1.95.0. This checkout
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
The package targets CPython 3.14 and Rust 1.95.0. This checkout targets the
|
|
12
|
+
SolverForge Rust crates `0.19.1` and pins `solverforge-ui` to `0.7.0` through
|
|
13
|
+
exact crates.io versions in `Cargo.toml` and registry checksums in `Cargo.lock`.
|
|
14
|
+
There is no local path or Git dependency override. The `solverforge`
|
|
15
15
|
`0.6.x` line is the current dynamic binding architecture and intentionally
|
|
16
16
|
supersedes the older incompatible `0.2.x` and `0.3.0` artifacts in the same PyPI
|
|
17
17
|
namespace. Those older artifacts exposed `SolverFactory`, `PlanningVariable`,
|
|
@@ -19,12 +19,12 @@ Java service requirements, and other APIs that are not part of this package.
|
|
|
19
19
|
|
|
20
20
|
## Installation
|
|
21
21
|
|
|
22
|
-
The package version prepared by this checkout is `solverforge` `0.6.
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
The package version prepared by this checkout is `solverforge` `0.6.3`, targeting
|
|
23
|
+
the published and locked SolverForge Rust `0.19.1` registry dependency base.
|
|
24
|
+
Install the matching package after its Python release with:
|
|
25
25
|
|
|
26
26
|
```sh
|
|
27
|
-
python3.14 -m pip install "solverforge==0.6.
|
|
27
|
+
python3.14 -m pip install "solverforge==0.6.3"
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
The installable wheel contains the core `solverforge` package, native extension,
|
|
@@ -49,7 +49,7 @@ installed package without `PYTHONPATH` or an editable checkout:
|
|
|
49
49
|
```sh
|
|
50
50
|
python3.14 -m venv .venv-examples
|
|
51
51
|
. .venv-examples/bin/activate
|
|
52
|
-
python -m pip install "solverforge[examples]==0.6.
|
|
52
|
+
python -m pip install "solverforge[examples]==0.6.3"
|
|
53
53
|
python examples/nqueens.py
|
|
54
54
|
python -m examples.solverforge_hospital
|
|
55
55
|
python -m examples.solverforge_deliveries
|
|
@@ -156,9 +156,13 @@ Run `make help` for focused targets such as `make test-hospital`,
|
|
|
156
156
|
`list_cheapest_insertion`, `list_regret_insertion`, `list_clarke_wright`, and
|
|
157
157
|
`list_k_opt`, with the final two requiring their respective savings and route
|
|
158
158
|
metadata bundles. These are core graph nodes over the immutable runtime
|
|
159
|
-
model.
|
|
160
|
-
|
|
161
|
-
|
|
159
|
+
model. All configured limits remain binding during construction. A solve
|
|
160
|
+
publishes a best or completed solution only after every list element,
|
|
161
|
+
required assignment row, and non-optional scalar variable is assigned; if a
|
|
162
|
+
limit is reached first, a direct solve raises and a retained job enters
|
|
163
|
+
`FAILED` without exposing a partial snapshot. Omitted construction still
|
|
164
|
+
resolves required and optional stages in core, but required work never
|
|
165
|
+
bypasses a configured limit. Default local search is assembled only when the top-level
|
|
162
166
|
termination has an effective finite limit, so an empty or invalid termination
|
|
163
167
|
cannot accidentally create an unbounded solve. There is no wrapper assignment
|
|
164
168
|
placer, required stream, phase tree, TLS slot state, synthetic metric, or
|
|
@@ -166,6 +170,8 @@ Run `make help` for focused targets such as `make test-hospital`,
|
|
|
166
170
|
- `SolverManager` is backed by upstream retained jobs, statuses, events, and
|
|
167
171
|
snapshots. `SolverManager.solve(...)` returns `JobHandle(job_id=...)`; the
|
|
168
172
|
manager supports pause, resume, cancel, delete, and exact snapshot reads.
|
|
173
|
+
A pause before mandatory construction completes remains resumable internal
|
|
174
|
+
state and does not expose an incomplete solution snapshot.
|
|
169
175
|
Retained event payloads read current score from the attached solution snapshot
|
|
170
176
|
when present. Long-running phases publish progress at the shared upstream
|
|
171
177
|
cadence, and telemetry includes the current phase type, index, counters, and
|
|
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
|