- evidence: Morfo declares scope: ['soma', 'sema'] but eidos recipe directory exists at src/uix/eidos/components/textarea/ with full visual layer (textarea.svelte, textarea-input.svelte, textarea-count.svelte, textarea.css, types.ts, index.ts)
- impact: Scope drift creates maintenance risk: schema generators and validators may not handle eidos layer, causing potential mismatches during component evolution or tooling updates
- proposed-fix: Add 'eidos' to morfo scope declaration on line 18: scope: ['soma', 'sema', 'eidos']
- verify: [confirmed] CONFIRMED at MEDIUM. textarea.ts:18 declares `scope: ['soma', 'sema'],` while a full eidos visual layer exists: Glob of src/uix/eidos/components/textarea/ returns textarea.svelte, textarea-input.svelte, textarea-count.svelte, textarea.css, types.ts, index.ts. The `Morfo.scope` field is documented in types.ts:798-799 as 'Layers that implement this component. Eidos-only primitives may declare [eidos].' — so an implementing eidos layer belongs in scope. This is the systemic SYS-1 pattern, not a one-off: the audit's REFERENCE baseline NumberField shows the IDENTICAL omission — number-field.ts:7 also reads `scope: ['soma', 'sema'],` yet src/uix/eidos/components/number-field/ has a full recipe + 8 svelte files. Severity stays MEDIUM (systemic doctrine drift, no runtime/a11y impact), matching the pre-established SYS-1 classification.
### MEDIUM: SemaExpressionMode coverage (types.ts:835-837 — morfo with events[] + scope sema SHOULD se — textarea-002 <!-- id: textarea-002 -->
- dimension: scope
- rule: SemaExpressionMode coverage (types.ts:835-837 — morfo with events[] + scope sema SHOULD set `expression` explicitly; the morfo-coverage check warns when missing)
- evidence: textareaMorfo declares two sema events (`commit-submit`, `signal-warn-count-overflow`) and `scope: ['soma', 'sema']`, AND a sema pack exists at src/uix/sema/components/textarea.ts (946 bytes). Yet `grep expression` over textarea.ts returns nothing — the `expression` field is absent. types.ts:835-837 states: 'If a morfo declares events[] AND scope: [sema], `expression` SHOULD be set explicitly. The morfo-coverage check warns when it is missing.' Since a pack exists, the correct value is `expression: 'pack'`.
- impact: The absence of a pack is confused with 'we forgot to write one' — the very ambiguity the field was designed to remove. The morfo-coverage check (`npm run morfo:vocabulary`) emits a warning for this morfo, adding noise to the build's coverage report.
- proposed-fix: Add `expression: 'pack',` to textareaMorfo (a sema pack already exists at src/uix/sema/components/textarea.ts).
- verify: [verifier-added] added by adversarial verify pass
- label-font (one step below input?): N/A - textarea is not a Field component; label font scaling is handled by Field.css (one step below control per line 154: calc formula)
## Tests (F)
- exists: false · env: N/A
- covers:
- untested: Expected F gap per component notes: textarea provider test intentionally absent