← ClaudeAtlas

lamina-formslisted

Form behavior in contracts — validation timing, field semantics, and recovery UX. Use when data entry blocks workflows or causes scenario gaps.
aryaniyaps/lamina · ★ 114 · AI & Automation · score 80
Install: claude install-skill aryaniyaps/lamina
# Forms (agent-native) Specify **how data entry behaves** in the transactional graph — field semantics, validation timing, and recovery — not CSS or component libraries. ## Contract encoding | Concern | Where | |---------|--------| | Fields per screen | `surfaces[].fields[]` or workflow step notes | | Validation timing | scenario `trigger.when: validation_failed` | | Recoverable vs blocking | scenario `category: partial` vs `failure` | | Data immunity vs integrity | `decisions.md` + form policy in `implement.md` | **Data immunity** (default for high-volume entry): accept input, flag uncertainty, audit later — never halt batch flow for recoverable format issues. **Bounded controls**: match widget semantics to data type in screen spec; allow override when domain requires. ## Design checklists 1. Prefer immunity over keystroke-level rejection unless invariant requires hard stop. 2. Batch-review anomalies instead of modal-blocking each error. 3. Preserve entered data on validation failure (scenario + `implement.md`). 4. Required fields only when invariant or workflow depends on them. 5. Map each field to domain entity attribute — not database column names in user-facing copy. 6. Classify date/time fields before choosing a control. A `datetime-local` value has no zone: submit its untouched local components plus the subject/place IANA zone for trusted resolution. Never convert it in the browser and attach another zone afterward. 7. Invalid DST-gap times preserve input and of