Let a landlord save an Appartement with no Espace privatif, while making every added Espace privatif complete and actionable across backend validation, Angular controls, and tests.
Acceptance criteria
An Appartement with no Espace privatif remains valid for creation and editing.
Every added Espace privatif visibly requires a trimmed nonblank label; whitespace-only labels are rejected inline.
Family and subtype controls permit only compatible domain combinations and retain the existing derived main-room count.
Backend validation returns indexed field paths and stable codes for every invalid nested Espace privatif in one response.
An invalid submit focuses the first invalid dynamic card, preserves every card, and editing one field clears only its server error.
Technical ID failures remain backend-protected without inventing an editable ID control.
Component, backend HTTP, and composed-form tests cover the slice and relevant checks pass.
## Parent
#41
## What to build
Let a landlord save an Appartement with no Espace privatif, while making every added Espace privatif complete and actionable across backend validation, Angular controls, and tests.
## Acceptance criteria
- [ ] An Appartement with no Espace privatif remains valid for creation and editing.
- [ ] Every added Espace privatif visibly requires a trimmed nonblank label; whitespace-only labels are rejected inline.
- [ ] Family and subtype controls permit only compatible domain combinations and retain the existing derived main-room count.
- [ ] Backend validation returns indexed field paths and stable codes for every invalid nested Espace privatif in one response.
- [ ] An invalid submit focuses the first invalid dynamic card, preserves every card, and editing one field clears only its server error.
- [ ] Technical ID failures remain backend-protected without inventing an editable ID control.
- [ ] Component, backend HTTP, and composed-form tests cover the slice and relevant checks pass.
## Blocked by
- #43
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Parent
#41
What to build
Let a landlord save an Appartement with no Espace privatif, while making every added Espace privatif complete and actionable across backend validation, Angular controls, and tests.
Acceptance criteria
Blocked by
/blocked_by #43
mentioned in issue #46
mentioned in commit c1b7c709a8ec94f9ee55cf7ff904e7f3543c0d8a
Preserved GitLab #44 history: source attribution, exact timestamps, discussion grouping and review positions. Historical diff snapshots: 1; visible source notes: 3.
gitlab-47-issue-44.md (SHA-256
077f31a63aadc79af2a66deff143221b8eb93725cc868711a2a8e020589c2f29)gitlab-47-issue-44.json (SHA-256
da34da45de94020b8e3780addc276ee07aa3669fdf8807b0e4ebb42b4d9d7222)Old CI job execution and reports are omitted. Original source files and rollback backups remain protected.