feat: implement governed project portfolio

This commit is contained in:
2026-08-01 17:48:38 +02:00
parent df8c3907c5
commit 8bfcf2d6b4
23 changed files with 4577 additions and 20 deletions
+16 -2
View File
@@ -8,8 +8,18 @@
milestones, participants, work structure, and links to project evidence. It is
the native GovOPlaN project context and the integration target for OpenProject.
The runtime module ID is `projects`. This initial scaffold registers the
boundary, permissions, roles, documentation, and module entry point.
The runtime module ID is `projects`. The module persists tenant-scoped
portfolios, projects, and milestones as immutable revisions with optimistic
concurrency, replay-safe lifecycle events, membership-based restricted access,
and permission-aware Search indexing. Planning records can retain outcomes,
benefits, dependencies, capacity assumptions, change impacts, benefit reviews,
module resource links, and canonical external-system references.
The `/projects` workspace provides catalogue, detail, create, and core-field
editing views. The governed API exposes the complete planning record at
`/api/v1/projects/objects`. OpenProject transport and synchronization remain in
Connectors; Projects stores only the native planning object and canonical
external reference.
See [docs/PROJECTS_DOMAIN_BOUNDARY.md](docs/PROJECTS_DOMAIN_BOUNDARY.md).
@@ -20,3 +30,7 @@ cd /mnt/DATA/git/govoplan-projects
PYTHONPATH=src:/mnt/DATA/git/govoplan-core/src \
/mnt/DATA/git/govoplan/.venv/bin/python -m unittest discover -s tests
```
The module migration is applied through the platform migration runner when the
module is enabled. Destructive retirement requires the normal snapshot and
uninstall-guard process because it removes planning history and events.