Files
govoplan/docs/REPOSITORY_STRUCTURE.md

4.5 KiB

GovOPlaN Repository Structure

GovOPlaN uses separate repositories for runtime modules, connector modules, system orchestration, and public website/catalog publication.

Categories

system

System repositories are not optional runtime modules. They provide platform execution, orchestration, development entry points, installer tooling, or core runtime contracts.

Current system repositories:

  • govoplan: meta repository for whole-product orchestration.
  • govoplan-core: runtime kernel/server runner, module registry, shared UI shell, installer, migration orchestration, and core contracts.

module

Runtime modules provide user-visible product behavior. They can include backend routes, database migrations, frontend contributions, permissions, docs, workers, and lifecycle hooks.

Modules must communicate through core contracts, capabilities, providers, and routes. They must not import another module's internal implementation directly.

connector

Connector repositories adapt GovOPlaN capabilities to external protocols, platforms, and integration formats. A connector may be a runtime module, but its business responsibility is transport/integration, not product semantics.

Examples:

  • govoplan-rest
  • govoplan-soap
  • govoplan-fit-connect
  • govoplan-xoev
  • govoplan-xrechnung
  • govoplan-xta-osci
  • govoplan-connectors

website

Website repositories are public content or publication targets. They are not installed into a GovOPlaN runtime.

Current website repository:

  • addideas-govoplan-website: public website and release catalog publication target.

Meta Repository Role

govoplan is the canonical operator entry point. Whole-product commands should be available here first:

  • development launch
  • repository bootstrap/status
  • whole-product Docker composition
  • release tagging
  • catalog publication
  • installer/daemon orchestration
  • cross-repository Gitea issue/wiki/label helpers
  • security and dependency audit tooling

Whole-product command implementations live under govoplan/tools.

Core keeps runtime-specific commands only.

Repositories are linked through repositories.json and scripts rather than git submodules. Development checkouts can keep their own branches and dirty state, while release/catalog tooling can still resolve the exact repository list from one place. If a deployment profile later needs pinned SHAs for every repository, generate that lock as a release artifact instead of making day-to-day development depend on submodule updates.

Docker Placement

Whole-product Docker and production-like deployment composition belongs in govoplan.

Current shared profiles:

  • dev/postgres
  • dev/production-like

Website-specific serving profiles stay with addideas-govoplan-website.

Module-specific test beds stay in the owning module repository. Examples:

  • govoplan-files/dev/connectors
  • govoplan-campaign/dev/mail-testbed
  • connector protocol test beds in their connector repositories

This keeps local module tests close to the code while giving operators one repository for product deployment.

addideas-govoplan-website and Release Logic

addideas-govoplan-website should be treated as the public website and catalog publication target, not as the release orchestrator.

The release workflow should be invoked from govoplan. It may write signed catalog artifacts into addideas-govoplan-website/public/catalogs/... and then build or deploy the website.

A separate govoplan-release repository should only be introduced if release logic becomes an independently versioned service or toolchain. For now, a separate repository would add coordination overhead without a clear boundary.

If embeddable public widgets become a runtime capability later, create a separate installable module for that. The public website repository should stay website/publication content only.

Config Import/Export

Configuration import/export is runtime administration behavior. It should stay with core/admin until it grows into a separately installable product capability.

Create a govoplan-config module only if configuration packages need their own module lifecycle, permissions, migrations, background jobs, or public API.

No govoplan-meta Runtime Module

Do not add a govoplan-meta runtime module for repository metadata. Repository metadata belongs in this meta repository. Installed runtime metadata belongs in the core module registry and module manifests.

If a runtime "system" surface is needed, it should be a core/admin/ops feature backed by explicit capabilities, not a pseudo-module that mirrors repository state.