feat: implement immutable form definitions

This commit is contained in:
2026-08-01 17:48:34 +02:00
parent 5825c2c8e4
commit 343a208894
25 changed files with 2072 additions and 20 deletions
+25 -6
View File
@@ -4,12 +4,31 @@
**Repository type:** module (domain).
<!-- govoplan-repository-type:end -->
`govoplan-forms` owns reusable form definitions, validation rules, and form
package fragments. Submission runtime behavior is a separate responsibility
that should live in `govoplan-forms-runtime` when implemented.
`govoplan-forms` owns reusable, immutable form definitions, validation rules,
and form package fragments. Submission runtime behavior remains in
`govoplan-forms-runtime`.
This repository is currently a tag-only scaffold. It should gain package
metadata and module manifests only after the first backend or WebUI slice is
designed.
The module persists exact tenant-bound revisions, exposes bounded catalogue,
history, and write APIs, and provides `forms.definitions` for consumers. A
published revision can be used by Forms Runtime without importing Forms tables;
existing submissions keep their exact revision when a new schema is published.
The `/forms` designer uses shared application controls to create, revise,
publish, retire, search, and inspect definitions. It edits field order, types,
choices, validation constraints, draft behavior, attachment and signature
requirements, policy references, and permitted handoff kinds. Saving always
creates an exact immutable revision; it never mutates a published schema in
place.
Definition writes use optimistic concurrency. Replaying the same object and
revision is safe only when the payload is identical. Published definitions may
be retired but not silently returned to draft.
Focused verification:
```bash
PYTHONPATH=src:/mnt/DATA/git/govoplan-core/src \
/mnt/DATA/git/govoplan/.venv/bin/python -m unittest discover -s tests
```
See [docs/FORMS_BOUNDARY.md](docs/FORMS_BOUNDARY.md) for the boundary decision.