docs: BACKLOG + ARCH-BINDINGS appendix + RFC v1.2 for registry alignment (WS-6)
Two new BACKLOG entries capture the deliberate v1 deferrals:
- ARTIST-ADV-BINDING-MODEL — design how artist_advance form data
relates to Artist + AdvanceSection entities (when, if ever, an
Eloquent Artist class is needed, and whether bindings are even
the right abstraction for OUTPUT-shaped advance forms).
- FORM-BINDING-JSON-PATH — extend binding registry to support
JSON-path attributes (custom_fields.dietary_preferences etc).
For v1 the recommendation is TAG_PICKER + tag_categories config.
ARCH-BINDINGS.md gets an appendix explaining the v1 scope decisions
explicitly: why 'artist' has no registry entries (model class
absent + advance forms are OUTPUT-shaped, not provisioning-shaped),
why JSON-path attributes are out of scope (v1 is column-level only),
and how BindingTypeRegistryConsistencyTest prevents future drift.
RFC-WS-6.md → v1.2 with a §3 Q9 addendum tracking the registry
alignment + the 3 renames, 5 removals, and 1 new column landed in
this branch.
Refs: WS-6 sessie 3a binding-target drift audit, sessie 3a.5 cleanup
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -3,8 +3,8 @@
|
||||
## 1. Status
|
||||
|
||||
- **State:** Authoritative for sessions 1, 2, 3 of WS-6
|
||||
- **Frozen:** 2026-04-25 (v1.0); refined post-session-2 cleanup as v1.1 (see §10)
|
||||
- **Version:** v1.1
|
||||
- **Frozen:** 2026-04-25 (v1.0); refined post-session-2 cleanup as v1.1, then again as v1.2 (see §10)
|
||||
- **Version:** v1.2
|
||||
- **Owner:** Bert Hausmans
|
||||
- **Origin:** Architectural session 2026-04-25 (Claude Chat) — 13 design decisions, 4 refinements, 3 observations
|
||||
- **Related:**
|
||||
@@ -278,6 +278,37 @@ create-as-needed fallback chain when seeding event_registration
|
||||
schemas, so dev environments don't fail the publish guard out of the
|
||||
box.
|
||||
|
||||
#### Q9 v1.2 addendum — Registry alignment with model columns
|
||||
|
||||
Sessie 3a surfaced that several entries in the `BindingTypeRegistry`
|
||||
config did not match actual Eloquent model column names
|
||||
(`person.phone_number` vs `phone`, `company.email` vs `contact_email`,
|
||||
`company.phone_number` vs `contact_phone`) and that an `Artist` Eloquent
|
||||
model class is absent.
|
||||
|
||||
Sessie 3a.5 corrected this:
|
||||
|
||||
- **Renames** (registry → matches model column): `person.phone_number`
|
||||
→ `person.phone`, `company.email` → `company.contact_email`,
|
||||
`company.phone_number` → `company.contact_phone`.
|
||||
- **New column**: `companies.kvk_number` (nullable, indexed) added so
|
||||
the registry's B2B identity-key candidate is now legitimately
|
||||
bindable.
|
||||
- **Removed entries** (intentional v1 deferrals): `person.dietary_preferences`
|
||||
(custom_fields JSON path; BACKLOG `FORM-BINDING-JSON-PATH`),
|
||||
`artist.email` / `artist.stage_name` / `artist.tech_rider` /
|
||||
`artist.hospitality_rider` (column absent + Artist model absent),
|
||||
and the `artist` entity removed entirely from the registry (BACKLOG
|
||||
`ARTIST-ADV-BINDING-MODEL`).
|
||||
- **Drift-prevention test**: `BindingTypeRegistryConsistencyTest`
|
||||
extended with a model-existence + column-existence assertion. Future
|
||||
drift surfaces as a test failure, not a runtime surprise.
|
||||
|
||||
`artist_advance` schemas may still exist in v1 with empty
|
||||
`required_bindings`; the applicator runs and resolves to an empty
|
||||
binding list, COMPLETED state. See ARCH-BINDINGS.md appendix for the
|
||||
rationale.
|
||||
|
||||
### Q10 — Section-level submit: stub now, activate later
|
||||
|
||||
**Decision:** Build the listener-class structure now; gate the runtime via `config('form_builder.section_apply_enabled', false)`; activate when ARTIST_ADVANCE feature work lands.
|
||||
@@ -468,3 +499,8 @@ This document. Sessions 2 and 3 reference RFC sections by number rather than re-
|
||||
- **§3 Q9 addendum** — `form_schemas.default_crowd_type_id` (nullable ULID, no DB-level FK) replaces the silent `CrowdType::oldest()` heuristic. New `RequiresDefaultCrowdType` publish guard wired into `EventRegistrationGuards`. Runtime failsafe in `PersonProvisioner::resolveCrowdTypeId()`.
|
||||
- Snapshot dual-key cleanup (separate from RFC §3): legacy `binding` (singular) snapshot key dropped; `bindings` (plural list) is the single source of truth in `schema_snapshot.fields[*]`. ARCH-BINDINGS.md §6.4 / §6.1 already specified the plural list — code converged.
|
||||
- Route model binding (separate from RFC §3): controller-level workaround `$request->route('formSubmissionActionFailure')` replaced with explicit `Route::bind()` in `AppServiceProvider::boot()` plus `->withoutScopedBindings()` on org-scoped routes. Type-hinted parameters restored. RFC V3 (FK-chain tenant policy) unchanged.
|
||||
- 2026-04-28 — v1.2 — Registry alignment with model columns (sessie 3a.5):
|
||||
- 3 renames (registry → model): `person.phone_number` → `phone`, `company.email` → `contact_email`, `company.phone_number` → `contact_phone`.
|
||||
- 5 removals (deferred to BACKLOG): `person.dietary_preferences` (FORM-BINDING-JSON-PATH); `artist.email`/`stage_name`/`tech_rider`/`hospitality_rider` plus the `artist` entity itself (ARTIST-ADV-BINDING-MODEL).
|
||||
- 1 new model column: `companies.kvk_number` (nullable, indexed).
|
||||
- `BindingTypeRegistryConsistencyTest` extended with a model-existence + column-existence assertion preventing future drift.
|
||||
|
||||
Reference in New Issue
Block a user