feat: implement immutable form definitions
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user