docs(form-builder): WS-5a follow-up — §6.2 registry, §6.7 dual activity-log note, Q3 commit-3 caveat
This commit is contained in:
@@ -154,6 +154,8 @@ class FormField extends Model
|
||||
|
||||
**Service-grens:** `FormFieldBindingService` is de enige schrijver. `FormFieldService::insertFromLibrary` kopieert rijen via `copyBindings`, niet JSON (Q3 row-copy mandaat). Snapshot-writer en API-resources lezen via `toJsonShape` zodat het externe JSON-contract ongewijzigd blijft.
|
||||
|
||||
**Git-log kanttekening commit 3.** De 1Password signer gaf herhaalde "failed to fill whole buffer" errors op de lange HEREDOC body van de bedoelde commit-message; de uiteindelijke commit landde met alleen de titel (`refactor(form-builder): pre-publish check reads form_field_bindings; drop binding JSON columns`, SHA `61719bf`). De volledige rationale — pre-publish check switch van JSON naar relationele query, kolom-drops op `form_fields.binding` en `form_field_library.default_binding`, factory/resource/form-request cleanup, fixture-rewrites — staat in de WS-5a completion notitie, niet in `git show 61719bf`. Amenden is niet geprobeerd: CLAUDE.md verbiedt signed-commit amenden.
|
||||
|
||||
---
|
||||
|
||||
## Q4 — Sanctum `personal_access_tokens`
|
||||
|
||||
@@ -1124,6 +1124,7 @@ return [
|
||||
'admin_notes' => ['type' => 'text', 'label' => 'Notities', 'writable' => true, 'admin_only' => true],
|
||||
],
|
||||
'company' => [
|
||||
'name' => ['type' => 'string', 'label' => 'Bedrijfsnaam', 'writable' => true],
|
||||
'contact_first_name' => ['type' => 'string', 'label' => 'Contact voornaam', 'writable' => true],
|
||||
'contact_last_name' => ['type' => 'string', 'label' => 'Contact achternaam', 'writable' => true],
|
||||
'contact_email' => ['type' => 'string', 'label' => 'Contact e-mail', 'writable' => true],
|
||||
@@ -1289,6 +1290,23 @@ table itself.
|
||||
snapshot writer embeds at most one binding per field. Multi-binding on a
|
||||
single field (per §6.1 future scenarios) needs a snapshot shape decision.
|
||||
|
||||
**Activity log events.** Changing a field's bindings emits two
|
||||
entries on the parent `FormField` subject:
|
||||
|
||||
- `field.updated` — payload includes `old.binding` / `new.binding`
|
||||
shapes reconstructed from the relational table via
|
||||
`FormFieldBindingService::toJsonShape()`. Preserves the pre-WS-5a
|
||||
audit-consumer contract for downstream tooling that parses
|
||||
`field.updated` diffs.
|
||||
- `field.bindings_replaced` — the semantic binding-change event,
|
||||
emitted by `FormFieldBindingService::replaceBindings()`.
|
||||
|
||||
Both fire for the same semantic change. Aggregate queries over
|
||||
activity-log event counts should filter on one, not both.
|
||||
Downstream consumers that migrate to the semantic event can stop
|
||||
listening to `field.updated` binding diffs once all their callers
|
||||
have moved.
|
||||
|
||||
---
|
||||
|
||||
## 7. Filter architecture
|
||||
|
||||
Reference in New Issue
Block a user