
TODO: TODO_78_94_31_68: split argrelay into multiple packages

The main benefit is to be able to:
*   enforce relationship between packages
*   track semver compatibility easily (see `semver_notes.md`)
*   reuse them without always downloading everything

All packages may continue to reside in the same single repo (mono repo) with some boundaries.

Start by splitting them into separate sub_modules (e.g. server API, server, client, ...).

Keep `argrelay` as an easy to install package for everything at once.

# Step 1: (short term) split into top-level modules

This has two goals:
*   Clearly define components and relationship between them.
*   Prepare for the step 2.

# Step 2: (long term) turn each top-level module into separately deployable package

This is probably a very long term target because it does not solve anything important right now,
but it also adds maintenance burden.

In the future, it will allow:
*   deploy less (including transitive dependencies) when only some parts are needed
*   reuse packages somewhere else (outside of `argrelay`)

# Components and dependencies

These are some thoughts about splitting:

*   `argrelay`

    All-in-one package.

*   `argrelay_api_plugin_abstract`

    Base plugin API for all plugins (client or server).

*   `argrelay_api_plugin_check_env_abstract`

    Interfaces between `check_env` and its plugins.

    Dependencies:
    *   `argrelay_api_plugin_client_abstract`

*   `argrelay_api_plugin_client_abstract`

    Base client-only plugin API.

*   `argrelay_api_plugin_server_abstract`

    Base server-only plugin API.

*   `argrelay_api_server_cli`

    Interfaces (REST API) between client and server for request-response.

*   `argrelay_app_bootstrap`

    Deployment automation for client and server.

*   `argrelay_app_check_env`

    Everything related to `check_env`.

    Dependencies:
    *   `argrelay_api_plugin_check_env_abstract`

*   `argrelay_app_client`

    Client implementation.

    Dependencies:
    *   `argrelay_api_server_cli`
    *   `argrelay_schema_config_client`

*   `argrelay_app_server`

    Server implementation.

    Dependencies:
    *   `argrelay_api_server_cli`
    *   `argrelay_api_plugin_server_abstract`
    *   `argrelay_schema_config_server`

*   `argrelay_lib_check_env_plugin_core`

    All important `check_env` plugins.

*   `argrelay_lib_root`

    The root of `argrelay` dependencies - anything common used everywhere.

    TODO: TODO_78_94_31_68: split argrelay into multiple packages:
          This part has to be as minimalistic as possible - target to keep it (almost) empty long term.

*   `argrelay_lib_server_plugin_check_env`

    All plugins for `check_env`.

*   `argrelay_lib_server_plugin_core`

    All important plugins.

*   `argrelay_lib_server_plugin_demo`

    All sample plugins.

*   `argrelay_schema_config_check_env`

    Config content schema and file paths for `check_env`.

*   `argrelay_schema_config_client`

    Config content schema and file paths for the client.

*   `argrelay_schema_config_server`

    Config content schema and file paths for the client.
