@symbo.ls/mcp 1.0.0 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,468 @@
1
+ # Default design system
2
+
3
+ This document describes every token defined in `smbls/designSystem/` and how they are used in Symbols/DOMQL v3.
4
+
5
+ ## Files
6
+
7
+ | File | Purpose |
8
+ |------|---------|
9
+ | `COLOR.js` | Named color palette |
10
+ | `GRADIENT.js` | Gradient definitions (empty by default) |
11
+ | `THEME.js` | Semantic surface themes (document, dialog, field, primary…) |
12
+ | `FONT.js` | Custom font faces |
13
+ | `FONT_FAMILY.js` | Font family stacks |
14
+ | `TYPOGRAPHY.js` | Type scale configuration |
15
+ | `SPACING.js` | Spacing scale configuration |
16
+ | `TIMING.js` | Easing curves |
17
+ | `CLASS.js` | Utility CSS class overrides (empty by default) |
18
+ | `GRID.js` | Grid presets (empty by default) |
19
+ | `SHAPE.js` | Shape/border-radius presets (empty by default) |
20
+ | `ANIMATION.js` | Named keyframe animations |
21
+ | `MEDIA.js` | Custom media query breakpoints |
22
+ | `CASES.js` | Conditional cases (environment flags) |
23
+ | `RESET.js` | Global CSS reset overrides (empty by default) |
24
+
25
+ ---
26
+
27
+ ## COLOR
28
+
29
+ File: `smbls/designSystem/COLOR.js`
30
+
31
+ Named hex values and semantic adaptive colors used everywhere via `color`, `background`, `borderColor`, and `theme` props.
32
+
33
+ ### Static colors
34
+
35
+ | Token | Value | Usage |
36
+ |-------|-------|-------|
37
+ | `green` | `#389d34` | Success states |
38
+ | `red` | `#e15c55` | Warning/error states |
39
+ | `yellow` | `#EDCB38` | Attention states |
40
+ | `orange` | `#e97c16` | Accent states |
41
+ | `blue` | `#0474f2` | Primary interactive color |
42
+ | `phosphorus` | `#4db852` | Alternate success |
43
+ | `black` | `black` | Pure black |
44
+ | `white` | `#ffffff` | Pure white |
45
+ | `gray` | `#4e4e50` | Neutral mid-tone base |
46
+ | `codGray` | `#171717` | Near-black page background |
47
+ | `solitude` | `#e5f1ff` | Light blue tint |
48
+ | `anakiwa` | `#a3cdfd` | Light blue accent |
49
+ | `concrete` | `#f2f2f2` | Light neutral |
50
+ | `transparent` | `rgba(0,0,0,0)` | Fully transparent |
51
+
52
+ ### Adaptive semantic colors
53
+
54
+ These tokens resolve to different values in dark and light mode. The `[dark, light]` tuple is applied automatically via the theme system.
55
+
56
+ | Token | Dark value | Light value | Usage |
57
+ |-------|-----------|-------------|-------|
58
+ | `title` | `gray 1 −168` (near-white) | `gray 1 +168` (near-black) | Primary text |
59
+ | `caption` | `gray 1 −68` | `gray 1 +68` | Secondary/meta text |
60
+ | `paragraph` | `gray 1 −42` | `gray 1 +42` | Body copy |
61
+ | `disabled` | `gray 1 −26` | `gray 1 +26` | Disabled state text |
62
+ | `line` | `gray 1 −16` | `gray 1 +16` | Dividers and borders |
63
+
64
+ The `gray X ±Y` notation is a Symbols color function: start from `gray` at opacity `X`, then lighten or darken by `Y` steps.
65
+
66
+ ### Usage in components
67
+
68
+ ```js
69
+ // Static color
70
+ Text: { color: 'blue' }
71
+
72
+ // Adaptive semantic color
73
+ Caption: { color: 'caption' }
74
+
75
+ // Inline tint/shade
76
+ Box: { background: 'gray 0.1' }
77
+ ```
78
+
79
+ ---
80
+
81
+ ## THEME
82
+
83
+ File: `smbls/designSystem/THEME.js`
84
+
85
+ Themes define paired `background` + `color` (and optional effects) for dark and light modes. Apply with `theme: 'name'` on any element.
86
+
87
+ ### Available themes
88
+
89
+ #### `document`
90
+
91
+ The page root surface.
92
+
93
+ | Mode | Background | Text |
94
+ |------|-----------|------|
95
+ | dark | `codGray` (`#171717`) | `title` |
96
+ | light | `gray 1 +168` (near-white) | `title` |
97
+
98
+ ```js
99
+ Page: { extends: 'Flex', theme: 'document', minHeight: '100dvh' }
100
+ ```
101
+
102
+ #### `dialog`
103
+
104
+ Elevated card or panel surface, with glass blur.
105
+
106
+ | Mode | Background | Text | Blur |
107
+ |------|-----------|------|------|
108
+ | dark | `gray 0.95 −68` | `title` | `blur(3px)` |
109
+ | light | `gray .95 +150` | `title` | `blur(3px)` |
110
+
111
+ ```js
112
+ Card: { extends: 'Flex', theme: 'dialog', round: 'A', padding: 'A' }
113
+ ```
114
+
115
+ #### `dialog-elevated`
116
+
117
+ Higher elevation than `dialog`, used for active/selected states in tab bars.
118
+
119
+ | Mode | Background | Text |
120
+ |------|-----------|------|
121
+ | dark | `gray 1 +68` | `title` |
122
+ | light | `gray 0.95 +140` | `title` |
123
+
124
+ ```js
125
+ Tab: { '.isActive': { theme: 'dialog-elevated' } }
126
+ ```
127
+
128
+ #### `field`
129
+
130
+ Input control surface.
131
+
132
+ | Mode | Background | Text | Placeholder |
133
+ |------|-----------|------|-------------|
134
+ | dark | `gray 0.95 −65` | `white` | `white 1 −78` |
135
+ | light | transparent | `black` | `gray 1 −68` |
136
+
137
+ ```js
138
+ Input: { theme: 'field' }
139
+ ```
140
+
141
+ #### `field-dialog`
142
+
143
+ Slightly elevated input variant, used inside dialog panels.
144
+
145
+ | Mode | Background | Text |
146
+ |------|-----------|------|
147
+ | dark | `gray 1 −16` | `title` |
148
+ | light | `gray 1 −96` | `title` |
149
+
150
+ #### `primary`
151
+
152
+ Main call-to-action color (blue background, white text).
153
+
154
+ | Mode | Background | Text |
155
+ |------|-----------|------|
156
+ | dark | `blue` | `white` |
157
+ | light | `blue` | `white` |
158
+
159
+ ```js
160
+ Button: { theme: 'primary', text: 'Save' }
161
+ ```
162
+
163
+ #### `warning`
164
+
165
+ Destructive or alert state (red background, white text).
166
+
167
+ | Mode | Background | Text |
168
+ |------|-----------|------|
169
+ | dark | `red` | `white` |
170
+ | light | `red` | `white` |
171
+
172
+ ```js
173
+ Badge: { theme: 'warning', text: 'Error' }
174
+ ```
175
+
176
+ #### `success`
177
+
178
+ Positive confirmation state (green background, white text).
179
+
180
+ | Mode | Background | Text |
181
+ |------|-----------|------|
182
+ | dark | `green` | `white` |
183
+ | light | `green` | `white` |
184
+
185
+ #### `transparent`
186
+
187
+ No background, inherits current text color.
188
+
189
+ ```js
190
+ Button: { theme: 'transparent', text: 'Cancel' }
191
+ ```
192
+
193
+ #### `bordered`
194
+
195
+ Transparent background with a 1 px border.
196
+
197
+ | Mode | Border |
198
+ |------|--------|
199
+ | dark | `1px solid #4e4e50` |
200
+ | light | `1px solid #a3cdfd` |
201
+
202
+ ```js
203
+ Card: { theme: 'bordered' }
204
+ ```
205
+
206
+ #### `none`
207
+
208
+ Resets both color and background to `none`.
209
+
210
+ ---
211
+
212
+ ## FONT
213
+
214
+ File: `smbls/designSystem/FONT.js`
215
+
216
+ Declares custom font faces loaded via the design system's `useFontImport` option.
217
+
218
+ | Font | URL | Weight | Variable |
219
+ |------|-----|--------|---------|
220
+ | `AvenirNext_Variable` | Symbols CDN | 400 | yes |
221
+
222
+ The variable font covers all weights from a single file. It is used as the default UI font across the design system.
223
+
224
+ ```js
225
+ // In component
226
+ Text: { fontFamily: 'AvenirNext_Variable' }
227
+ ```
228
+
229
+ ---
230
+
231
+ ## FONT_FAMILY
232
+
233
+ File: `smbls/designSystem/FONT_FAMILY.js`
234
+
235
+ Defines font stack aliases.
236
+
237
+ | Token | Stack | Type | Default |
238
+ |-------|-------|------|---------|
239
+ | `Default` | `San Francisco, Helvetica Neue, Helvetica, Arial` | `sans-serif` | yes |
240
+
241
+ The `Default` stack is the system UI fallback used before `AvenirNext_Variable` loads.
242
+
243
+ ```js
244
+ Text: { fontFamily: 'Default' }
245
+ ```
246
+
247
+ ---
248
+
249
+ ## TYPOGRAPHY
250
+
251
+ File: `smbls/designSystem/TYPOGRAPHY.js`
252
+
253
+ Controls the font-size scale used for all typographic tokens (`A`, `B`, `C`, `Z1`, `W2`, etc.).
254
+
255
+ ```js
256
+ {
257
+ '@default': {
258
+ base: 16, // 16 px root font size
259
+ ratio: 1.25, // Major Third scale
260
+ range: [-5, 12],
261
+ subSequence: true
262
+ }
263
+ }
264
+ ```
265
+
266
+ The scale generates tokens from `W4` (smallest) to `C2` (largest) using the Fibonacci-like progression:
267
+
268
+ | Token | Approx size |
269
+ |-------|------------|
270
+ | `W4`–`W1` | ~8–10 px |
271
+ | `W`–`Z4` | ~10–11 px |
272
+ | `Z3`–`Z` | ~11–12 px |
273
+ | `Y4`–`A` | ~12–16 px |
274
+ | `A1`–`B` | ~18–24 px |
275
+ | `B1`–`C` | ~28–40 px |
276
+ | `C1`–`C2` | ~48–64 px |
277
+
278
+ Use these tokens as `fontSize` values on any text element.
279
+
280
+ ```js
281
+ Heading: { fontSize: 'C' }
282
+ Caption: { fontSize: 'Z2' }
283
+ ```
284
+
285
+ ---
286
+
287
+ ## SPACING
288
+
289
+ File: `smbls/designSystem/SPACING.js`
290
+
291
+ Controls the spacing scale used for all layout tokens (`padding`, `margin`, `gap`, `width`, `height`, `boxSize`, etc.).
292
+
293
+ ```js
294
+ {
295
+ '@default': {
296
+ base: 16, // 16 px root unit
297
+ ratio: 1.618, // Golden Ratio
298
+ range: [-5, 15]
299
+ }
300
+ }
301
+ ```
302
+
303
+ The Golden Ratio produces a wider scale than typography. Common tokens:
304
+
305
+ | Token | Approx value | Common use |
306
+ |-------|-------------|-----------|
307
+ | `W2`–`W` | 2–4 px | Micro gaps, offsets |
308
+ | `X4`–`X` | 4–6 px | Icon padding, tight gaps |
309
+ | `Y4`–`Y` | 6–10 px | Small gaps |
310
+ | `Z4`–`Z` | 10–16 px | Compact padding |
311
+ | `A`–`A4` | 16–26 px | Default padding, gutters |
312
+ | `B`–`B4` | 26–42 px | Section padding |
313
+ | `C`–`C4` | 42–68 px | Container padding, avatar sizes |
314
+ | `D`–`D4` | 68–110 px | Large sections |
315
+ | `E`–`F` | 110–178 px | Hero padding, max-widths |
316
+ | `G`–`H` | 178–288 px | Wide containers |
317
+
318
+ Compound tokens are written with `+` (e.g., `A+W2` means A plus the W2 step).
319
+
320
+ ```js
321
+ Box: { padding: 'A B2' } // top/bottom A, left/right B2
322
+ Flex: { gap: 'Z' } // gap = ~16 px
323
+ Avatar: { boxSize: 'C2' } // ~68 px square
324
+ ```
325
+
326
+ ---
327
+
328
+ ## TIMING
329
+
330
+ File: `smbls/designSystem/TIMING.js`
331
+
332
+ Named easing curves for CSS transitions and animations.
333
+
334
+ | Token | Value | Character |
335
+ |-------|-------|-----------|
336
+ | `defaultBezier` | `cubic-bezier(.29, .67, .51, .97)` | Smooth ease-out |
337
+
338
+ ```js
339
+ Box: { transition: 'B defaultBezier', transitionProperty: 'opacity, transform' }
340
+ ```
341
+
342
+ ---
343
+
344
+ ## ANIMATION
345
+
346
+ File: `smbls/designSystem/ANIMATION.js`
347
+
348
+ Named keyframe animations available via `animation` prop.
349
+
350
+ | Name | From | To | Use |
351
+ |------|------|----|-----|
352
+ | `fadeInUp` | `opacity: 0, translateY(12.5%)` | `opacity: 1, translateY(0)` | Entrance |
353
+ | `fadeOutDown` | `opacity: 1, translateY(0)` | `opacity: 0, translateY(12.5%)` | Exit |
354
+ | `marquee` | `translateX(0)` | `translateX(-50%)` | Scrolling ticker |
355
+
356
+ ```js
357
+ Modal: { animation: 'fadeInUp B defaultBezier' }
358
+ Ticker: { animation: 'marquee 8s linear infinite' }
359
+ ```
360
+
361
+ ---
362
+
363
+ ## MEDIA
364
+
365
+ File: `smbls/designSystem/MEDIA.js`
366
+
367
+ Custom named breakpoints that extend the built-in set.
368
+
369
+ | Token | Query |
370
+ |-------|-------|
371
+ | `mobileL` | `min-width: 480px` |
372
+ | `tabletSm` | `min-width: 728px` |
373
+
374
+ Use with `@` prefix in any element:
375
+
376
+ ```js
377
+ Grid: {
378
+ columns: '1fr',
379
+ '@tabletSm': { columns: 'repeat(2, 1fr)' },
380
+ '@mobileL': { columns: 'repeat(3, 1fr)' }
381
+ }
382
+ ```
383
+
384
+ Built-in breakpoints from the default config also apply (`@mobile`, `@tablet`, `@desktop`, etc.).
385
+
386
+ ---
387
+
388
+ ## CASES
389
+
390
+ File: `smbls/designSystem/CASES.js`
391
+
392
+ Conditional environment flags evaluated at runtime. Used as boolean props (`.caseName`) or state conditionals.
393
+
394
+ | Case | Condition |
395
+ |------|-----------|
396
+ | `isSafari` | `true` when the browser is Safari (not Chrome/Android) |
397
+
398
+ ```js
399
+ Element: {
400
+ $isSafari: { top: 'Z2', right: 'Z2' }
401
+ }
402
+ ```
403
+
404
+ ---
405
+
406
+ ## Design system flags
407
+
408
+ Set in `smbls/designSystem/index.js`:
409
+
410
+ | Flag | Default | Effect |
411
+ |------|---------|--------|
412
+ | `useReset` | `true` | Apply a CSS reset |
413
+ | `useVariable` | `true` | Emit CSS custom properties for all tokens |
414
+ | `useFontImport` | `true` | Load `FONT` entries via `@font-face` |
415
+ | `useIconSprite` | `true` | Inline the `ICONS` SVG sprite into the DOM |
416
+ | `useSvgSprite` | `true` | Inline any SVG sprite definitions |
417
+ | `useDefaultConfig` | `true` | Merge the smbls default design system config |
418
+ | `useDocumentTheme` | `true` | Apply `document` theme to `<html>` |
419
+ | `verbose` | `false` | Suppress design system debug output |
420
+
421
+ ---
422
+
423
+ ## Cross-cutting token conventions
424
+
425
+ ### Shorthand spacing
426
+
427
+ Spacing props accept 1–4 tokens just like CSS shorthand:
428
+
429
+ ```js
430
+ padding: 'A' // all sides
431
+ padding: 'A B' // vertical | horizontal
432
+ padding: 'A B C' // top | horizontal | bottom
433
+ padding: 'A B C D' // top | right | bottom | left
434
+ margin: '- - - auto' // use '-' to skip a side (no-op)
435
+ ```
436
+
437
+ ### Color modifier syntax
438
+
439
+ ```
440
+ 'gray 0.95 -68' // gray at 95% opacity, darkened by 68 steps
441
+ 'gray 1 +168' // gray at full opacity, lightened by 168 steps
442
+ 'white 1 -78' // white darkened 78 steps
443
+ ```
444
+
445
+ ### Theme + mode targeting
446
+
447
+ ```js
448
+ Box: {
449
+ '@dark': { background: 'codGray' },
450
+ '@light': { background: 'concrete' }
451
+ }
452
+ ```
453
+
454
+ ### Responsive overrides
455
+
456
+ ```js
457
+ Grid: {
458
+ columns: 'repeat(4, 1fr)',
459
+ '@tabletSm': { columns: 'repeat(2, 1fr)' },
460
+ '@mobileL': { columns: '1fr' }
461
+ }
462
+ ```
463
+
464
+ ---
465
+
466
+ ## Supplemental
467
+
468
+ Component usage is documented in [DEFAULT_COMPONENTS.md](DEFAULT_COMPONENTS.md). Built-in atoms are documented in [BUILT_IN_COMPONENTS.md](BUILT_IN_COMPONENTS.md). General conventions are in [CLAUDE.md](CLAUDE.md).
@@ -0,0 +1,253 @@
1
+ # Optimize Your Symbols Site for AI Agents
2
+
3
+ ## A Practical Guide to Accessibility, ARIA, and Emerging Standards
4
+
5
+ ### AI Skill Instruction for Coding Assistants
6
+
7
+ This document is the definitive guide for generating Symbols (DOMQL v3) code fully interpretable by AI agents, accessibility tools, and automated systems. All output must comply with the following rules and standards.
8
+
9
+ ---
10
+
11
+ # 1. Semantic-First Architecture
12
+
13
+ Always generate semantic components instead of generic containers. Use these mappings:
14
+
15
+ | Intent | Required Component |
16
+ | ------------------------------------ | --------------------- |
17
+ | Page header | Header |
18
+ | Navigation | Nav |
19
+ | Primary content | Main |
20
+ | Standalone entity (product, article) | Article |
21
+ | Thematic grouping | Section |
22
+ | Sidebar | Aside |
23
+ | Footer | Footer |
24
+ | H1–H6 | Headings |
25
+ | P | Paragraphs |
26
+ | Button | Actions |
27
+ | Link | Navigation |
28
+ | Form | Transactional surface |
29
+ | Input / Select | User input |
30
+
31
+ Do not simulate meaning with generic divs or spans.
32
+
33
+ ---
34
+
35
+ # 2. DOMQL v3 Compliance
36
+
37
+ - Use DOMQL v3 syntax exclusively.
38
+ - Set HTML attributes via `attr`.
39
+ - Prefix event handlers with `on`.
40
+ - Ensure all critical content is server-rendered and visible in the initial HTML.
41
+
42
+ ---
43
+
44
+ # 3. Heading Discipline
45
+
46
+ - One H1 per page defining primary subject.
47
+ - Logical hierarchy: H1 → H2 → H3, etc.
48
+ - Nested headings should not skip levels.
49
+
50
+ Heading hierarchy is used by AI agents to determine page structure.
51
+
52
+ ---
53
+
54
+ # 4. Interactive Elements
55
+
56
+ - Use native elements: Button, Link, Form, Input, Select.
57
+ - If non-native interactive elements are unavoidable, declare:
58
+
59
+ ```javascript
60
+ attr: {
61
+ role: 'button',
62
+ tabindex: '0'
63
+ }
64
+ ```
65
+
66
+ - Do not rely on visual styling to indicate interactivity.
67
+
68
+ ---
69
+
70
+ # 5. Accessibility as Machine Interface
71
+
72
+ ARIA attributes define machine-readable state:
73
+
74
+ - `aria-busy`: reflects loading.
75
+ - `aria-label`: accessible name when visible text is insufficient.
76
+ - `aria-live`: indicates dynamic content.
77
+ - `autocomplete`: guides expected input format.
78
+
79
+ ARIA values must match actual runtime state.
80
+
81
+ ---
82
+
83
+ # 6. AI-Specific Markup (aid-\*)
84
+
85
+ Include aid-\* attributes to optimize machine parsing:
86
+
87
+ - `aid-type`: structural role (header, nav, main, content, complementary, interactive, modal, alert, search)
88
+ - `aid-desc`: concise machine-readable description
89
+ - `aid-state`: idle, loading, processing, done, error
90
+ - `aid-cnt-type`: product, service, info
91
+
92
+ State must accurately reflect dynamic changes.
93
+
94
+ ---
95
+
96
+ # 7. Structured Data (JSON-LD)
97
+
98
+ Include JSON-LD for entity representation:
99
+
100
+ - Organization
101
+ - Product / Service
102
+ - Article
103
+ - FAQPage
104
+ - BreadcrumbList
105
+
106
+ Structured data must match server-rendered content exactly.
107
+
108
+ ```javascript
109
+ export const StructuredData = {
110
+ tag: "script",
111
+ attr: { type: "application/ld+json" },
112
+ html: (el, s) =>
113
+ JSON.stringify({
114
+ "@context": "https://schema.org",
115
+ "@type": "Product",
116
+ name: s.name,
117
+ description: s.description,
118
+ offers: {
119
+ "@type": "Offer",
120
+ price: s.price,
121
+ priceCurrency: s.currency,
122
+ },
123
+ }),
124
+ };
125
+ ```
126
+
127
+ ---
128
+
129
+ # 8. Form Construction Protocol
130
+
131
+ - Associate labels using `for` + `id` or nest input inside label.
132
+ - Define `name` and `type` attributes.
133
+ - Use `autocomplete` when relevant.
134
+ - Reflect submission state via `aria-busy` or `aid-state`.
135
+
136
+ Forms must be machine-submittable without heuristic inference.
137
+
138
+ ---
139
+
140
+ # 9. Explicit Identifiers
141
+
142
+ Use deterministic IDs and class names for reliable referencing:
143
+
144
+ ```javascript
145
+ attr: {
146
+ id: `entity-${s.id}`,
147
+ class: 'entity-card'
148
+ }
149
+ ```
150
+
151
+ ---
152
+
153
+ # 10. llms.txt Support
154
+
155
+ Provide `/llms.txt` for AI guidance:
156
+
157
+ ```text
158
+ # Organization Name
159
+ # Purpose: Platform description
160
+
161
+ ## Key pages
162
+ - /products
163
+ - /api/docs
164
+ - /support
165
+
166
+ ## Preferred interactions
167
+ - /api/v2/ programmatic access
168
+ - /search?q= for search
169
+
170
+ ## Data accuracy
171
+ - Prices, shipping, inventory levels
172
+ ```
173
+
174
+ AI agents must use llms.txt for programmatic routing and content interpretation.
175
+
176
+ ---
177
+
178
+ # 11. Testing Instructions
179
+
180
+ ### Manual Testing
181
+
182
+ - Ask AI agents to describe page content, locate products, report prices, and identify support channels.
183
+
184
+ ### Automated Testing
185
+
186
+ ```javascript
187
+ export const testAgentComprehension = async function (url, prompt) {
188
+ const response = await fetch("https://api.agent-simulator.com/ask", {
189
+ method: "POST",
190
+ body: JSON.stringify({ url, prompt }),
191
+ });
192
+ return response.json();
193
+ };
194
+ ```
195
+
196
+ ---
197
+
198
+ # 12. Chrome WebMCP / Tool Exposure
199
+
200
+ Use descriptive attributes for AI-accessible tools:
201
+
202
+ ```javascript
203
+ export const CheckOrderTool = {
204
+ extends: "Form",
205
+ attr: {
206
+ "data-mcp-tool": "checkOrderStatus",
207
+ "data-mcp-description": "Check the status of an order by ID",
208
+ },
209
+ Input: { attr: { type: "text", name: "orderId", placeholder: "Order ID" } },
210
+ Button: { type: "submit", text: "Check" },
211
+ };
212
+ ```
213
+
214
+ ---
215
+
216
+ # 13. Infrastructure Awareness
217
+
218
+ - Expect bursty agent traffic.
219
+ - Horizontal scaling preferred.
220
+ - Sub-200ms response targets.
221
+ - Intelligent rate limiting for abusive requests.
222
+
223
+ ---
224
+
225
+ # 14. Failure Pattern Recognition
226
+
227
+ - Excessive divs without semantics
228
+ - Non-descriptive links
229
+ - Missing headings
230
+ - Critical content rendered client-side only
231
+ - Conflicting metadata
232
+
233
+ ---
234
+
235
+ # 15. Output Verification Checklist
236
+
237
+ Ensure all generated code meets these requirements:
238
+
239
+ - Semantic components only
240
+ - One H1 per page
241
+ - Buttons for actions, Links for navigation
242
+ - Labeled and named forms
243
+ - Dynamic regions declare state
244
+ - JSON-LD matches content
245
+ - Server-rendered critical content
246
+
247
+ Any violation requires regeneration.
248
+
249
+ ---
250
+
251
+ # Operational Principle
252
+
253
+ Generate Symbols code assuming AI agents parse and act on it before human consumption. Structure, semantics, and state define AI comprehension, safety, and interoperability. Accessibility and aid-\* attributes are part of the machine contract.