You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte-kit-vice/scripts/morfo-vocabulary-check.ts

323 lines
11 KiB

morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
/**
* Morfo vocabulary consistency check.
*
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
* Three checks in one script:
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
*
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
* 1. **data attr enums** (WARN) — walks every morfo's `data` declarations
* and reports any attr with `values: string[]` whose set is NOT one of
* the canonical vocabularies declared in `CANONICAL_VOCABULARIES`.
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
*
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
* 2. **declared semantic.verb against canon** (FAIL) — every morfo
* `events[].semantic.verb` must be in the canon defined in
* `sema/verbs.ts` (which mirrors «Diseñando lo que ocurre» cap. 22-29).
* This is the doctrinal contract: cross-family selectors and sema
* cascades subscribe by family+verb, so a non-canonical verb is a
* real semantic drift, not just a naming choice. Fails unless the
* `{morfo}:{eventName}` pair is in `EVENT_NAME_ALLOWLIST`.
*
* 3. **event name shape** (WARN) — checks each `events[].name` against
* the convention `{family}-{verb}[-{variant}]` or `{verb}[-{variant}]`.
* Names that don't parse are WARN: subscribers grep by name, so drift
* here hurts discoverability, but the canonical truth lives in
* `semantic.verb` (check #2). The book authorises verb-level variation
* (cap. 8 §1: "Algunas diferencias pertenecen al verbo, a la fase, al
* intent o a la realización"), so a domain-specific label like
* `commit-clear` whose declared verb is `reset` is acceptable.
*
* Allowlisted entries are tracked deliberate exceptions, each with a
* TODO pointing at where they will be resolved.
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
*
* Exit codes:
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
* 0 — every declared verb is canonical (or allowlisted).
* 1 — at least one declared verb drifts from canon AND is not allowlisted.
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
*/
import { readdirSync } from 'node:fs';
import { fileURLToPath, pathToFileURL } from 'node:url';
import { dirname, join } from 'node:path';
import type { Morfo, MorfoPart } from '../src/uix/morfo/types';
import { validateMorfo, CANONICAL_VOCABULARIES } from '../src/uix/morfo/schema';
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
import { validateEventName, SEMA_VERBS } from '../src/uix/sema/verbs';
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
const __dirname = dirname(fileURLToPath(import.meta.url));
const MORFOS_DIR = join(__dirname, '..', 'src', 'uix', 'morfo', 'components');
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
/**
* Event names that knowingly diverge from the canonical vocabulary,
* tracked as explicit technical debt. Each entry must reference WHERE
* the divergence is resolved or formally accepted.
*
* Add new entries only after a documented design discussion — the point
* of this allowlist is to make the divergence visible, not to dodge the
* canon. Remove an entry the moment the underlying morfo is updated.
*/
const EVENT_NAME_ALLOWLIST: Record<string, string> = {
refactor(button): align with book cap. 22 — contact.activate, intent visual-only (Plan B commit 2) Button morfo declared `commit-action` with verb `action` (not in canon) and full intent range. Per «Diseñando lo que ocurre»: - Cap 22 §10: "Botón: contact.press" — the press is reception of the gesture, not the commit. - Cap 22 §11: "el intent fuerte no debería vivir en el contacto, sino en la señal o consecuencia posterior. La interfaz puede anticipar el peso mediante forma, color o señal previa." - Cap 22 §8: "Error típico: contact.press + fulfill — Esto hace que el sistema diga 'ya terminó' cuando solo ha empezado." Strict book reading applied: - Morfo event renamed: `commit-action` → `contact-activate` (family: `contact`, verb: `activate`, no intent binding) - Soma provider trigger string + comments updated - `intent` prop survives as VISUAL signal only — drives `data-color` and chip variant (anticipatory weight via form/color per cap. 22 §11) - README + types JSDoc updated with the book's prescription and the composition pattern: perceptual richness emerges from the OTHER morfos in the flow (Dialog warning, Item being deleted, etc.) firing their own commit/signal events at the actual moment of the consequence - `EVENT_NAME_ALLOWLIST` in morfo-vocabulary-check.ts emptied — no exceptions to the canon needed No `declaresOutcome` props, no imperative sema escape hatches: the morfo remains the single source of truth for events. If a flow loses perceptual differentiation, the answer is to model the missing morfo, not to overload the Button. Verification: - npm run morfo:vocabulary → EXIT 0 (zero allowlisted) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass - npm run check → no new errors from these changes Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
// Empty — Plan B commit 2 resolved `button.commit-action` to
// `button.contact-activate` per book cap. 22 §10-11.
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
};
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
async function loadMorfos(): Promise<Morfo[]> {
const files = readdirSync(MORFOS_DIR).filter(
(f) => f.endsWith('.ts') && !f.endsWith('.test.ts')
);
const out: Morfo[] = [];
for (const f of files) {
const url = pathToFileURL(join(MORFOS_DIR, f)).href;
const mod = (await import(url)) as Record<string, unknown>;
for (const v of Object.values(mod)) {
if (typeof v === 'object' && v !== null && 'kebab' in v && 'parts' in v) {
out.push(validateMorfo(v));
}
}
}
return out;
}
function flatParts(parts: readonly MorfoPart[]): MorfoPart[] {
const out: MorfoPart[] = [];
for (const p of parts) {
out.push(p);
if (p.parts && p.parts.length > 0) out.push(...flatParts(p.parts));
}
return out;
}
type Classification =
| { kind: 'match'; vocabulary: string }
| { kind: 'subset'; vocabulary: string; extra: string[] }
| { kind: 'superset'; vocabulary: string; missing: string[] }
| { kind: 'unknown' };
function classify(values: readonly string[]): Classification {
const valueSet = new Set(values);
for (const [name, canonical] of Object.entries(CANONICAL_VOCABULARIES)) {
const canonicalSet = new Set(canonical);
if (
canonicalSet.size === valueSet.size &&
[...valueSet].every((v) => canonicalSet.has(v))
) {
return { kind: 'match', vocabulary: name };
}
// Enum extends a canonical (added values)
if ([...canonicalSet].every((v) => valueSet.has(v))) {
const extra = [...valueSet].filter((v) => !canonicalSet.has(v));
if (extra.length > 0 && extra.length <= 3) {
return { kind: 'subset', vocabulary: name, extra };
}
}
// Enum shrinks a canonical (removed values)
if ([...valueSet].every((v) => canonicalSet.has(v))) {
const missing = [...canonicalSet].filter((v) => !valueSet.has(v));
if (missing.length > 0 && missing.length <= 3) {
return { kind: 'superset', vocabulary: name, missing };
}
}
}
return { kind: 'unknown' };
}
// ── Main ────────────────────────────────────────────────────────────────────
const morfos = await loadMorfos();
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
console.error(
`Scanning ${morfos.length} morfo${morfos.length === 1 ? '' : 's'} for vocabulary divergence...`
);
// ── 1. data attr enums (WARN only) ─────────────────────────────────────────
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
type DataFinding = {
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
morfo: string;
part: string;
attr: string;
values: readonly string[];
classification: Classification;
};
/**
* Attrs whose value sets are per-component by design, not shared vocabulary.
* Skipped by the consistency check — Dialog's `saved|cancelled|…` is correctly
* different from Toast's `dismissed|auto-timeout|action`.
*/
const PER_COMPONENT_ATTRS = new Set(['data-last-action']);
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
const dataFindings: DataFinding[] = [];
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
for (const morfo of morfos) {
for (const part of flatParts(morfo.parts)) {
for (const data of part.data) {
if (!data.values) continue;
if (PER_COMPONENT_ATTRS.has(data.attr)) continue;
const classification = classify(data.values);
if (classification.kind !== 'match') {
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
dataFindings.push({
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
morfo: morfo.kebab,
part: part.kebab,
attr: data.attr,
values: data.values,
classification
});
}
}
}
}
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
// ── 2. declared semantic.verb canon (FAIL) ─────────────────────────────────
type VerbFinding = {
morfo: string;
eventName: string;
declaredFamily: string;
declaredVerb: string;
allowlisted: boolean;
allowlistReason?: string;
};
const verbFindings: VerbFinding[] = [];
// ── 3. event name shape (WARN) ─────────────────────────────────────────────
type NameFinding = {
morfo: string;
eventName: string;
parsedFamily: string | undefined;
parsedVerb: string | undefined;
};
const nameFindings: NameFinding[] = [];
for (const morfo of morfos) {
for (const evt of morfo.events ?? []) {
const declaredFamily = evt.semantic?.family;
const declaredVerb = evt.semantic?.verb;
// Check #2 — declared verb must be in the family's canon.
if (declaredFamily && declaredVerb) {
const familyVerbs = SEMA_VERBS[declaredFamily as keyof typeof SEMA_VERBS] as
| readonly string[]
| undefined;
if (familyVerbs && !familyVerbs.includes(declaredVerb)) {
const allowlistKey = `${morfo.kebab}:${evt.name}`;
const allowlistReason = EVENT_NAME_ALLOWLIST[allowlistKey];
verbFindings.push({
morfo: morfo.kebab,
eventName: evt.name,
declaredFamily,
declaredVerb,
allowlisted: allowlistReason !== undefined,
allowlistReason
});
}
}
// Check #3 — event name shape (WARN only).
const parsed = validateEventName(evt.name);
if (!parsed.matchesCanonical) {
nameFindings.push({
morfo: morfo.kebab,
eventName: evt.name,
parsedFamily: parsed.family,
parsedVerb: parsed.verb
});
}
}
}
// ── Reporting ──────────────────────────────────────────────────────────────
let hadHardErrors = false;
if (dataFindings.length > 0) {
console.log('');
console.log(
`Found ${dataFindings.length} divergent data attr enum${dataFindings.length === 1 ? '' : 's'} (warn):`
);
console.log('');
for (const f of dataFindings) {
const loc = `${f.morfo}.${f.part}.${f.attr}`;
const values = `[${f.values.join(', ')}]`;
switch (f.classification.kind) {
case 'subset':
console.log(
`WARN ${loc} ${values} extends "${f.classification.vocabulary}" with: ${f.classification.extra.join(', ')}`
);
break;
case 'superset':
console.log(
`WARN ${loc} ${values} shrinks "${f.classification.vocabulary}" missing: ${f.classification.missing.join(', ')}`
);
break;
case 'unknown':
console.log(
`WARN ${loc} ${values} no canonical vocabulary matches. Consider if this should use one of: ${Object.keys(CANONICAL_VOCABULARIES).join(', ')}`
);
break;
}
}
console.log('');
console.log(
`These are WARNINGS — novel vocabularies may be legitimate. If the value set SHOULD match a canonical vocabulary, align it. If the component introduces a NEW canonical vocabulary, add it to CANONICAL_VOCABULARIES in src/uix/morfo/schema.ts.`
);
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
}
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
if (verbFindings.length > 0) {
console.log('');
const drift = verbFindings.filter((f) => !f.allowlisted);
const allowlisted = verbFindings.filter((f) => f.allowlisted);
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
if (allowlisted.length > 0) {
console.log(
`Found ${allowlisted.length} allowlisted declared-verb divergence${allowlisted.length === 1 ? '' : 's'}:`
);
console.log('');
for (const f of allowlisted) {
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
console.log(
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
`ALLOW ${f.morfo}.${f.eventName} family=${f.declaredFamily} verb=${f.declaredVerb} → ${f.allowlistReason}`
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
);
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
}
}
if (drift.length > 0) {
console.log('');
console.log(
`Found ${drift.length} non-canonical declared verb${drift.length === 1 ? '' : 's'} (FAIL):`
);
console.log('');
for (const f of drift) {
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
console.log(
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
`FAIL ${f.morfo}.${f.eventName} family=${f.declaredFamily} verb=${f.declaredVerb}`
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
);
console.log(
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
` Verb "${f.declaredVerb}" is not in SEMA_VERBS.${f.declaredFamily} (see src/uix/sema/verbs.ts).`
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
);
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
}
console.log('');
console.log(
`Declared semantic.verb must be in the canon in sema/verbs.ts (which mirrors «Diseñando lo que ocurre» cap. 22-29). If a new verb is genuinely needed in the canon, add it after a design discussion and ensure at least two components share it. If the divergence is deliberate and time-bounded, add it to EVENT_NAME_ALLOWLIST in this script with a TODO.`
);
hadHardErrors = true;
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
}
}
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
if (nameFindings.length > 0) {
console.log('');
console.log(
`Found ${nameFindings.length} event name${nameFindings.length === 1 ? '' : 's'} that don't follow the canonical shape (warn):`
);
console.log('');
for (const f of nameFindings) {
console.log(`WARN ${f.morfo}.${f.eventName} does not parse to {family}-{verb}[-{variant}]`);
}
console.log('');
console.log(
`These are WARNINGS — the declared semantic.verb is canonical, but the event name doesn't surface the family+verb (which makes \`[data-event^="..."]\` selectors and verb-grouped sema cascades harder to author). Consider renaming to \`{family}-{verb}-{domain-label}\`.`
);
}
if (dataFindings.length === 0 && verbFindings.length === 0 && nameFindings.length === 0) {
console.log(
'All enum values match canonical vocabularies and all event names are canonical.'
);
}
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired Morfo (src/uix/morfo/): machine-readable contract of a component's public DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment. Types, sium-based validator with cross-field invariants, dialog.ts as the first canonical morfo with data-last-action for Sema-causal exits, 7 passing unit tests. createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy inline signature removed. Dialog provider refactored to derive parts + data contract from dialogMorfo. The other 65 soma components need porting (svelte-check lists them) — tracked work. Tooling: scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes scripts/morfo-check.ts — validates emitted DOM vs morfo scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency npm run smoke / morfo:check / morfo:vocabulary WAI-ARIA APG components added (100% APG coverage now): Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress, SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel pattern; hierarchical Table rows deprecated — use TreeGrid instead). air: Link, Banner. Sema prep: src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements. Morfo already provides everything Sema needs (data-last-action patterns, transition markers, enumerable state values, cross-component consistency). Sema implementation deferred. COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM topology vs .require() audit, npm run smoke is part of done) + A34 rule with incident log. WAI-ARIA pattern listed as soma membership criterion. Pagination translation bug fixed (soma.pagination.page -> idlangref PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.* -> components.table.*). Avatar demo now offline-safe (SVG data URL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
refactor(sema): align verb canon with «Diseñando lo que ocurre» (Plan B commit 1) Codifies the doctrinal source for the semantic system per the user's book at src/docs/Disenando_lo_que_ocurre_manuscrito_completo_revisado_v2.docx. Canon (book cap. 8 + cap. 22-29 + cap. 10): - 8th family `delegate` added (offer/plan/authorize/act/review/escalate/return) - `signal.inform` added (book cap. 24 listed 7 signal verbs; we had 6) - Commit contextual verbs from case studies: apply, partial, block, move, upload - `sustain.upload` added - SemaFamily union, SEMA_FAMILY_POLICY, sema-map, visual chan, morfo schema all extended to include delegate (intentPolicy: 'optional' — no intent by default per cap. 29 §4) Lint (scripts/morfo-vocabulary-check.ts): - Hard-fails on declared `semantic.verb` not in family canon (the doctrinal contract: subscribers query by family+verb) - Soft-warns on event name shape drift (declared verb is the truth, name is informational) - Allowlists `button.commit-action` with TODO referencing Plan B commit 2 (Button's intent vs contact question per cap. 22 §11 needs design sign-off) 3 mechanical violation fixes: - textarea: `shift-count-overflow` (family shift, verb limit) → `signal-warn-count-overflow` (signal.warn + risk per cap. 24 — corregible warning, not context shift) - password-field: `shift-toggle-visibility` → `commit-toggle-visibility` (commit.toggle + affirm per cap. 23 — state fixation, not context shift) - password-field: `shift-caps-state` → `signal-notify-caps-state` (signal.notify + neutral per cap. 24 — system orients attention without urgency) - month-grid + year-grid: `nav-step` → `shift-navigate-step` (family/verb already canonical, name aligned to {family}-{verb}-{variant}) Verification: - npm run morfo:vocabulary → EXIT 0 (1 allowlisted, 59 pre-existing name-shape warns documenting visible drift for future sprints) - npx vitest src/uix/sema src/uix/morfo → 194/194 pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
process.exit(hadHardErrors ? 1 : 0);

Powered by TurnKey Linux.