Skip to content

Commit 10c50cd

Browse files
Conformance blocker: complete Python SDK parity coverage beyond smoke (#167)
1 parent be57e38 commit 10c50cd

7 files changed

Lines changed: 1318 additions & 1 deletion

File tree

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77
## [Unreleased]
88

99
### Added
10+
- `durable-workflow-python-conformance` now exposes the Python SDK
11+
published-artifact parity contract and evaluates host result documents,
12+
rejecting smoke-only evidence unless the official CLI path, cold first-user
13+
setup, protocol traces, no-PHP-assumption audit, concrete artifact versions,
14+
and complete capability table are all present.
1015
- `Client.delete_namespace()` now exercises the namespace lifecycle cleanup
1116
control-plane surface and returns the server's per-table cleanup counts on
1217
`NamespaceDescription.deleted`.

CONFORMANCE.md

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,42 @@ The fixtures in this repo are exercised today by:
4040
- `tests/test_replay.py`
4141
- `tests/test_golden_history_replay.py`
4242
- `scripts/check-cli-parity.py`
43+
- `durable-workflow-python-conformance --manifest`
4344
- the `cli-parity` job in `.github/workflows/ci.yml`
4445

4546
These are the per-repo gates that already enforce the contract; the
4647
public conformance harness, when it lands, will read the same fixtures
4748
from this repo's declared paths.
4849

50+
## Published-artifact Python parity contract
51+
52+
The package ships a machine-readable contract in
53+
`durable_workflow.python_conformance` and exposes it through the
54+
`durable-workflow-python-conformance` console script. Host conformance
55+
runners use this contract to distinguish a Python worker smoke test from
56+
the full published-artifact property.
57+
58+
The result gate requires one result for every scenario below, all marked
59+
`pass`, before the Python SDK conformance property can pass:
60+
61+
- `published_artifact_install_only`
62+
- `official_cli_install_start_result_path`
63+
- `cold_first_user_setup`
64+
- `python_worker_registration`
65+
- `activity_backed_workflow_execution`
66+
- `workflow_result_surface`
67+
- `worker_restart_activity_and_signal_state`
68+
- `protocol_trace_capture`
69+
- `php_assumption_audit`
70+
- `capability_table_complete`
71+
72+
A passing result must also record concrete artifact versions for
73+
`server`, `cli`, `sdk-python`, `workflow`, and `waterline`; run
74+
timestamps; protocol traces; a no-PHP-assumption audit; and the complete
75+
capability table. Any omitted scenario, placeholder artifact version,
76+
runner-blocked cell, unsupported public surface, or non-pass scenario
77+
without linked findings is nonconforming.
78+
4979
## Release gate
5080

5181
A release of `durable_workflow` (PyPI) must produce a passing harness
@@ -56,7 +86,7 @@ result document before tag, with the conformance level at `full` or
5686
| --- | --- |
5787
| Required claimed targets | `official_sdk`, `worker_protocol_implementation` |
5888
| Required suite version | `PlatformConformanceSuite::VERSION` (currently `8`, mirrored at `/platform-conformance-contract.json`) |
59-
| CI job | `platform-conformance` (lands when the harness reference implementation publishes; until then `cli-parity` and `test_history_event_contract.py` cover the same ground) |
89+
| CI job | `platform-conformance` (lands when the harness reference implementation publishes; until then `cli-parity`, `test_history_event_contract.py`, and `durable-workflow-python-conformance --evaluate` cover the same ground) |
6090
| Block on `nonconforming` | yes |
6191
| Artifact attached to release | harness result document, schema `durable-workflow.v2.platform-conformance.result` |
6292

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,21 @@ bundle simulation does not execute workflow code in Python, a clean
262262
integrity-only simulation recommends `review_before_promote` rather than
263263
`safe_to_promote`.
264264

265+
## Python conformance gate
266+
267+
The package includes the Python SDK published-artifact parity contract used by
268+
host conformance runners:
269+
270+
```bash
271+
durable-workflow-python-conformance --manifest --pretty
272+
durable-workflow-python-conformance --evaluate python-conformance-result.json --pretty
273+
```
274+
275+
The evaluator rejects smoke-only evidence. A passing record must include the
276+
official CLI install/start/result path, cold first-user setup, concrete
277+
artifact versions, protocol traces, a no-PHP-assumption audit, and the complete
278+
Python capability table.
279+
265280
## External payload storage
266281

267282
Large payload offload is opt-in. `serializer.external_storage_envelope(...)`

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ Issues = "https://github.com/durable-workflow/sdk-python/issues"
5959
[project.scripts]
6060
durable-workflow-replay-verify = "durable_workflow.replay_verify:main"
6161
durable-workflow-history-bundle-verify = "durable_workflow.history_bundle_verify:main"
62+
durable-workflow-python-conformance = "durable_workflow.python_conformance:main"
6263

6364
[tool.setuptools.packages.find]
6465
where = ["src"]

scripts/smoke-built-package.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ def completed(result):
8989
"durable_workflow.external_task_result",
9090
"durable_workflow.invocable",
9191
"durable_workflow.metrics",
92+
"durable_workflow.python_conformance",
9293
"durable_workflow.retry_policy",
9394
"durable_workflow.serializer",
9495
"durable_workflow.sync",

0 commit comments

Comments
 (0)