Skip to content

improve-modularity: split SDL core runtime-services modules (4 files) #52

Description

@Brad-Edwards

Part of #3 (modularity initiative tracker).

Context (re-scoped 2026-07-30)

Since this issue was filed the codebase moved out from under its original text, so it has been re-scoped:

No behavior change. Each file becomes a package directory behind an API-stable re-export shim.

Files (this issue)

File Lines (origin/dev) Import module
implementations/python/packages/raes/composition.py 1110 raes.composition
implementations/python/packages/raes/orchestration.py 654 raes.orchestration
implementations/python/packages/raes/participant_behavior.py 826 raes.participant_behavior
implementations/python/packages/raes/runtime_mail_service.py 525 raes.runtime_mail_service

Note: raes/participant_behavior.py (this issue) is distinct from raes/semantics/participant_behavior.py (issue #51) — they are different modules at different paths.

Mechanics (per file)

  1. Read the file. Identify cohesive subdomains by clustering classes/functions that share concepts, types, or call relationships.
  2. Convert the file to a Python package: replace <path>.py with a directory of the same base name <path>/.
  3. Move code into subdomain files <path>/<subdomain>.py. Each subdomain file MUST be ≤ 500 lines.
  4. <path>/__init__.py re-exports the public API — every name imported from the original module anywhere else in the codebase, plus any names in __all__.
  5. For each module, run git grep -E "from <module>|import <module>" (e.g. git grep -E "from raes.orchestration|import raes.orchestration") to enumerate every external import site. Confirm zero of those lines need to change.
  6. Remove the file's entry from tools/policy/oversized_allowlist.yaml.

Acceptance criteria

  • Each file above no longer exists as a .py; a package directory with __init__.py exists in its place.
  • Every .py file under each new package directory is ≤ 500 lines (verified by tools/check_repo_policy.py after the paths are removed from the allowlist).
  • No external import line referencing any of these four modules was modified by this PR (verified by diff inspection during clause verification).
  • tools/policy/oversized_allowlist.yaml no longer contains any of the four files above.
  • uv tool run --from 'nox[uv]==2026.4.10' nox -f noxfile.py -s verify passes.
  • No pre-existing test was modified to make the suite pass.
  • CHANGELOG.md has an entry for this change.

Out of scope

  • Any behavior change. This is a pure refactor — equality of public API and equality of behavior under the existing test suite is the contract.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions