lamina-formslisted
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