Skip to content

Port version compatibility tooling to the octue.twined package layout and backfill missing versions #743

Description

@thclark

Problem

scripts/check_twined_version_compatibility_tested.py requires every new version to have an entry in octue/twined/metadata/version_compatibilities.json, both as a top-level key and inside every other version's map. That matrix is generated out-of-band by octue/octue-sdk-python-version-compatibility.

That tooling can no longer test any version from 0.67.0 onwards. It was last updated in February 2024. 0.67.0 ("Move current Octue SDK code into twined subpackage") relocated the modules it imports:

Tooling imports Location from 0.67.0
octue.cloud.pub_sub octue.twined.cloud.pub_sub
octue.cloud.pub_sub.service octue.twined.cloud.pub_sub.service
octue.resources octue.twined.resources
octue.resources.service_backends octue.twined.resources.service_backends
octue.utils.encoders octue.twined.utils.encoders

Running cli.py record-questions --parent-versions 0.69.0 checks out and installs 0.69.0 successfully, then fails immediately:

File "inter_service_compatibility/mocks.py", line 12, in <module>
    from octue.cloud.pub_sub import Subscription, Topic
ModuleNotFoundError: No module named 'octue.cloud.pub_sub'

Its VERSIONS_TO_CHECK constant is also stale, topping out at 0.52.0.

Impact

0.69.1 was released without a compatibility matrix entry, so octue.twined.compatibility.is_compatible takes its fallback path — returning True with a warning:

No data on compatibility of parent SDK version 0.69.1 and child SDK version <x>.

Degraded logging rather than degraded behaviour, but it means the compatibility warnings can't do their job for 0.69.1, and check-compatibility-tested will keep failing for every future version until this is fixed.

Proposed solution

  1. Update octue/octue-sdk-python-version-compatibility to handle both import layouts — try the octue.twined.* paths and fall back to the pre-0.67.0 paths — since the suite has to import whichever version is currently checked out. Affected files: inter_service_compatibility/mocks.py, record_question.py, process_question.py
  2. Refresh VERSIONS_TO_CHECK, or always pass --parent-versions / --child-versions explicitly
  3. Run the suite and backfill 0.69.1. --untagged-child-version-branches exists for testing unreleased candidates against released versions

Note on 0.69.1 specifically

0.69.1 was a docs-only release: git diff 0.69.0 0.69.1 -- octue/ is empty, so the shipped package is byte-identical to 0.69.0 and no wire behaviour changed. Its row and column should come out identical to 0.69.0's. That makes it a convenient smoke test for the ported tooling — a known-correct expected result.

Context

Found while merging #742, which bumped to 0.69.1 for a docs change and hit the failing check.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions