Skip to content

Enforce monotonic exact SemVer for the shared release-recovery contract #53

Description

@rmcdaniel

Problem

The shared release-recovery conformance runner validates the contract version as a SemVer-shaped string, but its change guard rejects only an unchanged version string. A changed contract can therefore lower the published version, move to an unrelated older line, or change only build metadata and still pass the guard that claims the version advanced. The validator also accepts numeric prerelease identifiers with leading zeroes, such as 1.0.1-rc.01, even though those are not valid SemVer 2.0.0 versions.

Because the contract and runner are synchronized across every release-recovery consumer, accepting a non-successor version weakens the common identity used to coordinate semantic changes.

Acceptance criteria

  • Contract versions use exact SemVer 2.0.0 validation, including rejection of leading zeroes in numeric prerelease identifiers.
  • When a previous contract exists and its content differs, the current version has strictly greater SemVer precedence. Equal precedence, downgrades, and build-metadata-only changes fail closed.
  • First adoption remains supported when the previous commit genuinely has no contract, while an unreadable or unknown previous commit cannot silently disable the comparison.
  • Focused vectors cover an unchanged version with changed content, patch/minor/major advancement, prerelease advancement, downgrade, build-metadata-only change, malformed numeric prerelease identifiers, and an unavailable previous commit.
  • The corrected runner, contract identity, and digest pins are synchronized across every declared consumer and aggregate qualification proves the exact same version and digests on all target branches.

Delete when

Delete when no changed shared release-recovery contract can pass required qualification unless it carries a valid, strictly advancing SemVer version relative to the previous target-branch contract, and every declared consumer proves the same corrected contract and runner identity.

Required source targets

durable-workflow/.github@main
durable-workflow/cli@main
durable-workflow/sdk-php@main
durable-workflow/sdk-python@main
durable-workflow/sdk-rust@main
durable-workflow/server@main
durable-workflow/waterline@v2
durable-workflow/workflow@v2

Metadata

Metadata

Assignees

No one assigned

    Labels

    authority:githubGitHub is the authoritative lifecycle record for this workbeta:compatibleMay be completed without changing the frozen beta contractintake:approvedCurrent issue title and body revision is approved for authority intakekind:cross-repositoryWork spans more than one public repositorypriority:P2Normal-priority product workrepo:github-control-planeOwned by the public organization control planestatus:blockedWaiting on a named dependency or decision

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions