Skip to content

Commit d06c939

Browse files
[cross-repo from server#312] Conformance blocker: expand replay coverage beyond current smoke (#643)
1 parent 307c183 commit d06c939

3 files changed

Lines changed: 27 additions & 13 deletions

File tree

docs/architecture/platform-conformance-suite.md

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ The machine-readable mirror of this document is
1717
`Workflow\V2\Support\PlatformConformanceSuite`, exported by the
1818
standalone `workflow-server` from `GET /api/cluster/info` under
1919
`platform_conformance_suite`. Schema:
20-
`durable-workflow.v2.platform-conformance.suite`, version `3`.
20+
`durable-workflow.v2.platform-conformance.suite`, version `5`.
2121

2222
## Why one suite
2323

@@ -89,8 +89,9 @@ they become required when promoted to `stable` in a later suite version.
8989
The `signal_query_runtime_contract` category is stable and load-bearing.
9090
It must run against published install channels only, pin the resolved
9191
artifact versions in the result, and name every required scenario as
92-
passed, failed, or unsupported with a linked finding. A smoke-only run is
93-
nonconforming even if the covered smoke scenarios pass.
92+
`pass`, `fail`, `unsupported`, `not_covered`, or `runner_blocked` with a
93+
linked finding. A smoke-only run is nonconforming even if the covered
94+
smoke scenarios pass.
9495

9596
Required scenarios:
9697

@@ -132,8 +133,9 @@ Required scenarios:
132133
The `history_replay_bundles` category is also stable and load-bearing.
133134
It must run against published install channels only, pin the resolved
134135
artifact versions in the result, and name every required replay scenario
135-
as passed, failed, or unsupported with a linked finding. A smoke-only
136-
run is nonconforming even when the smoke path passes.
136+
as `pass`, `fail`, `unsupported`, `not_covered`, or `runner_blocked` with
137+
a linked finding. A smoke-only run is nonconforming even when the smoke
138+
path passes.
137139

138140
Required scenarios are published in the public replay scenario manifest
139141
at `static/platform-conformance/replay-runtime-scenarios.json` and
@@ -179,11 +181,13 @@ emits a structured result. The rules below are normative.
179181
release does not conform.
180182

181183
5. **Stable runtime scenario coverage.** A stable runtime category such
182-
as `signal_query_runtime_contract` or `history_replay_bundles` passes
183-
only when every scenario it declares records a pass, fail, or
184-
unsupported result with resolved artifact versions and linked
185-
findings. A smoke-only subset or omitted scenario is nonconforming,
186-
not provisional.
184+
as `signal_query_runtime_contract` or `history_replay_bundles` must
185+
report every scenario it declares with one of the statuses published
186+
by its runtime scenario manifest: `pass`, `fail`, `unsupported`,
187+
`not_covered`, or `runner_blocked`. Full conformance requires every
188+
required scenario to pass. A smoke-only subset, omitted scenario,
189+
unsupported public surface, uncovered cell, or runner-blocked cell is
190+
nonconforming and must link the owning finding.
187191

188192
6. **Provisional categories warn but do not fail.** A failed fixture in
189193
a provisional category emits a warning in the harness output. A

src/V2/Support/PlatformConformanceSuite.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ final class PlatformConformanceSuite
2929
{
3030
public const SCHEMA = 'durable-workflow.v2.platform-conformance.suite';
3131

32-
public const VERSION = 3;
32+
public const VERSION = 5;
3333

3434
public const RESULT_SCHEMA = 'durable-workflow.v2.platform-conformance.result';
3535

@@ -408,7 +408,7 @@ private static function passFailRules(): array
408408
'rule' => 'A release that claims a target must pass every required fixture category for that target. One failed required fixture means the release does not conform for that target.',
409409
],
410410
'stable_runtime_scenario_coverage' => [
411-
'rule' => 'A stable runtime fixture category passes only when every required scenario it declares records a pass, fail, or unsupported result with artifact versions and linked findings. A smoke-only subset or omitted scenario is nonconforming, not provisional.',
411+
'rule' => 'A stable runtime fixture category must report every required scenario it declares with one of the statuses published by its runtime scenario manifest: pass, fail, unsupported, not_covered, or runner_blocked. Full conformance requires every required scenario to pass. A smoke-only subset, omitted scenario, unsupported public surface, uncovered cell, or runner-blocked cell is nonconforming and must link the owning finding.',
412412
'applies_to_categories' => [
413413
'signal_query_runtime_contract',
414414
'history_replay_bundles',

tests/Unit/V2/PlatformConformanceSuiteTest.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public function testManifestAdvertisesAuthorityIdentity(): void
2828
$manifest = PlatformConformanceSuite::manifest();
2929

3030
$this->assertSame('durable-workflow.v2.platform-conformance.suite', $manifest['schema']);
31-
$this->assertSame(3, $manifest['version']);
31+
$this->assertSame(5, $manifest['version']);
3232
$this->assertSame(
3333
'https://github.com/durable-workflow/workflow/blob/v2/docs/architecture/platform-conformance-suite.md',
3434
$manifest['authority_doc'],
@@ -362,6 +362,16 @@ public function testPassFailRulesNameTheCoreContract(): void
362362
$rules['stable_runtime_scenario_coverage']['applies_to_categories'],
363363
'smoke-only replay coverage must not satisfy the stable runtime category',
364364
);
365+
$this->assertStringContainsString(
366+
'not_covered',
367+
$rules['stable_runtime_scenario_coverage']['rule'],
368+
'omitted runtime scenario cells must be representable without appearing green',
369+
);
370+
$this->assertStringContainsString(
371+
'runner_blocked',
372+
$rules['stable_runtime_scenario_coverage']['rule'],
373+
'environment-blocked runtime scenarios must be distinct from product pass/fail evidence',
374+
);
365375
}
366376

367377
public function testHarnessContractRequiresStructuredResultDocument(): void

0 commit comments

Comments
 (0)