@aurea-uds/contracts 0.1.0

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,3699 @@
1
+ {
2
+ "name": "Aurea — Universal Design System",
3
+ "version": "0.1.0",
4
+ "status": "organized-source-of-truth",
5
+ "language": "pt-BR",
6
+ "fonts": {
7
+ "ui": "IBM Plex Sans",
8
+ "editorial": "IBM Plex Serif",
9
+ "code": "IBM Plex Mono"
10
+ },
11
+ "iconSystem": {
12
+ "library": "Carbon Icons",
13
+ "embedded": true,
14
+ "license": "Apache-2.0",
15
+ "allowedIcons": [
16
+ "home",
17
+ "dashboard",
18
+ "menu",
19
+ "close",
20
+ "search",
21
+ "filter",
22
+ "settings",
23
+ "overflow-menu--horizontal",
24
+ "chevron--down",
25
+ "chevron--left",
26
+ "chevron--right",
27
+ "arrow--left",
28
+ "arrow--right",
29
+ "arrow--up-right",
30
+ "launch",
31
+ "maximize",
32
+ "minimize",
33
+ "side-panel--open",
34
+ "side-panel--close",
35
+ "switcher",
36
+ "grid",
37
+ "add",
38
+ "subtract",
39
+ "checkmark",
40
+ "edit",
41
+ "trash-can",
42
+ "copy",
43
+ "copy--link",
44
+ "save",
45
+ "download",
46
+ "upload",
47
+ "restart",
48
+ "play",
49
+ "pause",
50
+ "stop",
51
+ "undo",
52
+ "redo",
53
+ "renew",
54
+ "reset",
55
+ "send",
56
+ "share",
57
+ "export",
58
+ "import-export",
59
+ "document",
60
+ "document--blank",
61
+ "document--attachment",
62
+ "folder",
63
+ "folder--open",
64
+ "folder--tree",
65
+ "catalog",
66
+ "notebook",
67
+ "bookmark",
68
+ "pin",
69
+ "favorite",
70
+ "star",
71
+ "tag",
72
+ "attachment",
73
+ "image",
74
+ "video",
75
+ "volume--up",
76
+ "volume--mute",
77
+ "closed-caption",
78
+ "rewind--10",
79
+ "forward--10",
80
+ "microphone",
81
+ "user--avatar",
82
+ "user--multiple",
83
+ "user--admin",
84
+ "group--account",
85
+ "email",
86
+ "notification",
87
+ "notification--new",
88
+ "chat",
89
+ "chat--launch",
90
+ "message-queue",
91
+ "webhook",
92
+ "link",
93
+ "unlink",
94
+ "phone",
95
+ "collaborate",
96
+ "events",
97
+ "information",
98
+ "information--filled",
99
+ "warning",
100
+ "warning--alt--filled",
101
+ "error",
102
+ "error--filled",
103
+ "checkmark--filled",
104
+ "pending",
105
+ "pending--filled",
106
+ "in-progress",
107
+ "locked",
108
+ "unlocked",
109
+ "security",
110
+ "password",
111
+ "power",
112
+ "activity",
113
+ "time",
114
+ "time--filled",
115
+ "analytics",
116
+ "chart--bar",
117
+ "chart--line",
118
+ "chart--area",
119
+ "chart--network",
120
+ "chart--scatter",
121
+ "database--postgreSQL",
122
+ "data--view",
123
+ "data--structured",
124
+ "data--connected",
125
+ "cloud",
126
+ "cloud--offline",
127
+ "cloud--monitoring",
128
+ "network--3",
129
+ "connection-signal",
130
+ "connection-signal--off",
131
+ "API--1",
132
+ "api--key",
133
+ "code",
134
+ "code-block",
135
+ "terminal",
136
+ "debug",
137
+ "AI",
138
+ "ai-agent-invocation",
139
+ "ai-generate",
140
+ "ai-recommend",
141
+ "ai--observability",
142
+ "workflow-automation",
143
+ "task",
144
+ "task--complete",
145
+ "task--progress",
146
+ "task--settings",
147
+ "list",
148
+ "list--checked",
149
+ "tree-view",
150
+ "branch",
151
+ "function",
152
+ "machine-learning-model",
153
+ "flow",
154
+ "rule",
155
+ "events--alt",
156
+ "event",
157
+ "event--warning",
158
+ "calendar",
159
+ "calendar--add",
160
+ "help",
161
+ "help--filled",
162
+ "light",
163
+ "moon",
164
+ "view",
165
+ "view--off",
166
+ "zoom--in",
167
+ "zoom--out",
168
+ "zoom--fit",
169
+ "drag--horizontal",
170
+ "color-palette",
171
+ "accessibility",
172
+ "keyboard",
173
+ "meter",
174
+ "progress-bar--round"
175
+ ],
176
+ "sizes": [
177
+ 16,
178
+ 20,
179
+ 24,
180
+ 32
181
+ ],
182
+ "rule": "Use somente nomes presentes no registro deste arquivo. Não desenhar SVG avulso."
183
+ },
184
+ "themes": [
185
+ "dark",
186
+ "light"
187
+ ],
188
+ "densities": [
189
+ "compact",
190
+ "comfortable",
191
+ "spacious"
192
+ ],
193
+ "distribution": {
194
+ "packages": [
195
+ "@aurea-uds/contracts",
196
+ "@aurea-uds/tokens",
197
+ "@aurea-uds/core",
198
+ "@aurea-uds/icons",
199
+ "@aurea-uds/react"
200
+ ],
201
+ "rule": "Artefatos derivam de legacy-reference.html e dos pacotes do monorepo; não editar manualmente fora deles.",
202
+ "mode": "workspace-packages",
203
+ "commands": {
204
+ "verify": "pnpm validate"
205
+ },
206
+ "consumption": {
207
+ "contract": "importar @aurea-uds/contracts/contract",
208
+ "tokens": "importar @aurea-uds/tokens/css uma vez",
209
+ "icons": "embutir o sprite de @aurea-uds/icons/sprite uma vez e referenciar símbolos por id",
210
+ "css": "importar @aurea-uds/core/css",
211
+ "react": "importar componentes de @aurea-uds/react"
212
+ }
213
+ },
214
+ "breakpoints": {
215
+ "sm": 640,
216
+ "md": 768,
217
+ "lg": 1024,
218
+ "xl": 1280,
219
+ "2xl": 1536
220
+ },
221
+ "componentRules": {
222
+ "Button": {
223
+ "variants": [
224
+ "primary",
225
+ "secondary",
226
+ "outline",
227
+ "ghost",
228
+ "danger"
229
+ ],
230
+ "sizes": [
231
+ "sm",
232
+ "md",
233
+ "lg"
234
+ ],
235
+ "states": [
236
+ "default",
237
+ "hover",
238
+ "focus",
239
+ "disabled",
240
+ "loading"
241
+ ]
242
+ },
243
+ "IconButton": {
244
+ "variants": [
245
+ "secondary",
246
+ "outline",
247
+ "ghost",
248
+ "danger"
249
+ ],
250
+ "sizes": [
251
+ "sm",
252
+ "md",
253
+ "lg"
254
+ ]
255
+ },
256
+ "Badge": {
257
+ "variants": [
258
+ "neutral",
259
+ "primary",
260
+ "info",
261
+ "success",
262
+ "warning",
263
+ "danger",
264
+ "running",
265
+ "paused",
266
+ "offline",
267
+ "review"
268
+ ]
269
+ },
270
+ "Input": {
271
+ "sizes": [
272
+ "sm",
273
+ "md",
274
+ "lg"
275
+ ],
276
+ "states": [
277
+ "default",
278
+ "focus",
279
+ "disabled",
280
+ "invalid",
281
+ "readonly"
282
+ ]
283
+ },
284
+ "Card": {
285
+ "variants": [
286
+ "base",
287
+ "raised",
288
+ "interactive",
289
+ "inset",
290
+ "selected",
291
+ "danger"
292
+ ]
293
+ },
294
+ "Navigation": [
295
+ "Topbar",
296
+ "Sidebar",
297
+ "Breadcrumb",
298
+ "Tabs",
299
+ "Pagination",
300
+ "Stepper",
301
+ "CommandPalette"
302
+ ],
303
+ "Feedback": [
304
+ "Alert",
305
+ "Toast",
306
+ "Tooltip",
307
+ "Popover",
308
+ "Dialog",
309
+ "Drawer",
310
+ "Progress",
311
+ "Skeleton",
312
+ "EmptyState"
313
+ ],
314
+ "DataDisplay": [
315
+ "KPI",
316
+ "Table",
317
+ "DataList",
318
+ "Avatar",
319
+ "Timeline",
320
+ "Accordion",
321
+ "Chart",
322
+ "CodeBlock",
323
+ "LogStream"
324
+ ],
325
+ "Media": [
326
+ "MediaPlayer",
327
+ "MediaControls",
328
+ "SeekBar",
329
+ "VolumeControl",
330
+ "TimeDisplay",
331
+ "MediaMenu",
332
+ "CaptionTrack",
333
+ "MediaState",
334
+ "CompactPlayer",
335
+ "CaptureTranscript"
336
+ ],
337
+ "UniversalDomain": [
338
+ "AgentCard",
339
+ "AgentStatus",
340
+ "AgentInspector",
341
+ "InvocationPanel",
342
+ "TaskQueue",
343
+ "EventStream",
344
+ "MemoryLedger",
345
+ "ToolPermission",
346
+ "HumanApproval",
347
+ "AutomationCard",
348
+ "ModelUsage",
349
+ "HealthMatrix",
350
+ "DependencyGraph",
351
+ "TraceTimeline",
352
+ "InterAgentMessage",
353
+ "CostMeter"
354
+ ]
355
+ },
356
+ "hardRules": [
357
+ "Consultar este arquivo antes de qualquer alteração de interface.",
358
+ "Usar somente tokens semânticos definidos neste arquivo.",
359
+ "O amarelo primário oklch(0.795 0.184 86.047) é invariável nos temas dark e light.",
360
+ "Botões textuais usam formato cápsula; botões de ícone usam quadrado arredondado.",
361
+ "Inputs e selects usam formato cápsula; textareas usam raio de 16px.",
362
+ "Cards, dialogs, toasts, demos e painéis usam raio de 22px e superfícies sólidas.",
363
+ "A sidebar é um único painel arredondado com menu accent subtle.",
364
+ "Não usar gradientes decorativos, paletas alternativas ou cores hardcoded.",
365
+ "A escala chart-1 a chart-5 é a única escala categórica/sequencial azul.",
366
+ "IBM Plex e Carbon são overrides deliberados; não trocar sem atualizar este contrato.",
367
+ "Consumidores usam somente os pacotes @aurea-uds do monorepo; cópias manuais são proibidas.",
368
+ "Quando faltar um padrão, atualizar primeiro este arquivo e depois a aplicação.",
369
+ "Players usam exclusivamente os tokens --media-*; controles permanecem escuros e legíveis nos dois temas.",
370
+ "Composed application patterns are optional recipes over generic components, never product-specific widgets.",
371
+ "Every composed pattern defines regions, actions, variants, states, transitions, behavior, event payloads, and accessibility.",
372
+ "WCAG 2.2 AA, 320 CSS pixel reflow, visible focus, reduced motion, and keyboard parity are release gates.",
373
+ "Any drag interaction has a single-pointer and keyboard alternative."
374
+ ],
375
+ "referencePreset": {
376
+ "code": "legacy-reference.html",
377
+ "role": "non-normative geometry provenance",
378
+ "resolvedBy": "brandOverrides",
379
+ "nonNormative": true
380
+ },
381
+ "brandOverrides": {
382
+ "fonts": [
383
+ "IBM Plex Sans",
384
+ "IBM Plex Serif",
385
+ "IBM Plex Mono"
386
+ ],
387
+ "icons": "Carbon Icons embedded",
388
+ "primaryLockedAcrossThemes": "oklch(0.795 0.184 86.047)"
389
+ },
390
+ "mediaRules": {
391
+ "layouts": [
392
+ "immersive",
393
+ "inline",
394
+ "compact"
395
+ ],
396
+ "states": [
397
+ "idle",
398
+ "loading",
399
+ "buffering",
400
+ "playing",
401
+ "paused",
402
+ "ended",
403
+ "error"
404
+ ],
405
+ "controls": [
406
+ "play-pause",
407
+ "rewind-10",
408
+ "forward-10",
409
+ "seek",
410
+ "volume-mute",
411
+ "captions",
412
+ "speed",
413
+ "picture-in-picture",
414
+ "fullscreen"
415
+ ],
416
+ "theme": "A superfície de mídia e seus controles permanece escura nos temas dark e light.",
417
+ "accessibility": [
418
+ "Controles de ícone exigem nome acessível.",
419
+ "Controles permanecem visíveis durante foco e navegação por teclado.",
420
+ "Hover nunca é o único meio de descobrir um controle.",
421
+ "No mobile, controles opcionais migram para o menu sem remover a função."
422
+ ]
423
+ },
424
+ "operationalPatterns": {
425
+ "states": [
426
+ "accepted",
427
+ "running",
428
+ "waiting_user",
429
+ "waiting_approval",
430
+ "waiting_dependency",
431
+ "completed",
432
+ "failed",
433
+ "cancelled",
434
+ "interrupted"
435
+ ],
436
+ "patterns": {
437
+ "RunSession": {
438
+ "variants": [
439
+ "session",
440
+ "run",
441
+ "turn",
442
+ "tool_call",
443
+ "command",
444
+ "test",
445
+ "build",
446
+ "deploy",
447
+ "checkpoint",
448
+ "receipt"
449
+ ],
450
+ "behavior": [
451
+ "resumable from checkpoint",
452
+ "interrupt does not erase receipt",
453
+ "cancel emits terminal receipt",
454
+ "approval is explicit"
455
+ ],
456
+ "events": [
457
+ {
458
+ "name": "run.accepted",
459
+ "when": "after the accepted state change",
460
+ "payloadRequired": [
461
+ "subject_id"
462
+ ]
463
+ },
464
+ {
465
+ "name": "run.progress",
466
+ "when": "after the progress state change",
467
+ "payloadRequired": [
468
+ "previous",
469
+ "current"
470
+ ]
471
+ },
472
+ {
473
+ "name": "tool.call",
474
+ "when": "after the call state change",
475
+ "payloadRequired": [
476
+ "subject_id"
477
+ ]
478
+ },
479
+ {
480
+ "name": "command.started",
481
+ "when": "after the started state change",
482
+ "payloadRequired": [
483
+ "request_id",
484
+ "scope"
485
+ ]
486
+ },
487
+ {
488
+ "name": "test.completed",
489
+ "when": "after the completed state change",
490
+ "payloadRequired": [
491
+ "result_id"
492
+ ]
493
+ },
494
+ {
495
+ "name": "build.completed",
496
+ "when": "after the completed state change",
497
+ "payloadRequired": [
498
+ "result_id"
499
+ ]
500
+ },
501
+ {
502
+ "name": "deploy.completed",
503
+ "when": "after the completed state change",
504
+ "payloadRequired": [
505
+ "result_id"
506
+ ]
507
+ },
508
+ {
509
+ "name": "checkpoint.saved",
510
+ "when": "after the saved state change",
511
+ "payloadRequired": [
512
+ "result_id"
513
+ ]
514
+ },
515
+ {
516
+ "name": "approval.requested",
517
+ "when": "after the requested state change",
518
+ "payloadRequired": [
519
+ "request_id",
520
+ "scope"
521
+ ]
522
+ },
523
+ {
524
+ "name": "run.completed",
525
+ "when": "after the completed state change",
526
+ "payloadRequired": [
527
+ "result_id"
528
+ ]
529
+ },
530
+ {
531
+ "name": "run.failed",
532
+ "when": "after the failed state change",
533
+ "payloadRequired": [
534
+ "error_code",
535
+ "retryable"
536
+ ]
537
+ }
538
+ ],
539
+ "accessibility": [
540
+ "state is text and color",
541
+ "actions have accessible names",
542
+ "focus returns after approval dialog"
543
+ ],
544
+ "states": [
545
+ "accepted",
546
+ "running",
547
+ "waiting_user",
548
+ "waiting_approval",
549
+ "waiting_dependency",
550
+ "completed",
551
+ "failed",
552
+ "cancelled",
553
+ "interrupted"
554
+ ],
555
+ "regions": [
556
+ "session_header",
557
+ "turn_stream",
558
+ "tool_panel",
559
+ "checkpoint",
560
+ "receipt",
561
+ "actions"
562
+ ],
563
+ "actions": [
564
+ "start",
565
+ "resume",
566
+ "interrupt",
567
+ "cancel",
568
+ "retry",
569
+ "fork",
570
+ "approve",
571
+ "reject"
572
+ ],
573
+ "initialState": "accepted",
574
+ "terminalStates": [
575
+ "completed",
576
+ "failed",
577
+ "cancelled"
578
+ ],
579
+ "transitions": [
580
+ {
581
+ "from": "accepted",
582
+ "action": "start",
583
+ "to": "running"
584
+ },
585
+ {
586
+ "from": "running",
587
+ "action": "request_approval",
588
+ "to": "waiting_approval"
589
+ },
590
+ {
591
+ "from": "waiting_approval",
592
+ "action": "approve",
593
+ "to": "running"
594
+ },
595
+ {
596
+ "from": "running",
597
+ "action": "interrupt",
598
+ "to": "interrupted"
599
+ },
600
+ {
601
+ "from": "interrupted",
602
+ "action": "resume",
603
+ "to": "running"
604
+ },
605
+ {
606
+ "from": "running",
607
+ "action": "complete",
608
+ "to": "completed"
609
+ },
610
+ {
611
+ "from": "running",
612
+ "action": "fail",
613
+ "to": "failed"
614
+ },
615
+ {
616
+ "from": "failed",
617
+ "action": "retry",
618
+ "to": "running"
619
+ },
620
+ {
621
+ "from": "running",
622
+ "action": "cancel",
623
+ "to": "cancelled"
624
+ }
625
+ ]
626
+ },
627
+ "ResourceWorkbench": {
628
+ "variants": [
629
+ "workspace",
630
+ "file",
631
+ "cloud",
632
+ "document",
633
+ "ocr",
634
+ "transfer",
635
+ "artifact"
636
+ ],
637
+ "behavior": [
638
+ "resume validates checksum",
639
+ "conflict requires preview",
640
+ "restore keeps provenance"
641
+ ],
642
+ "events": [
643
+ {
644
+ "name": "resource.discovered",
645
+ "when": "after the discovered state change",
646
+ "payloadRequired": [
647
+ "subject_id"
648
+ ]
649
+ },
650
+ {
651
+ "name": "transfer.progress",
652
+ "when": "after the progress state change",
653
+ "payloadRequired": [
654
+ "previous",
655
+ "current"
656
+ ]
657
+ },
658
+ {
659
+ "name": "transfer.resumed",
660
+ "when": "after the resumed state change",
661
+ "payloadRequired": [
662
+ "subject_id"
663
+ ]
664
+ },
665
+ {
666
+ "name": "checksum.verified",
667
+ "when": "after the verified state change",
668
+ "payloadRequired": [
669
+ "subject_id"
670
+ ]
671
+ },
672
+ {
673
+ "name": "conflict.detected",
674
+ "when": "after the detected state change",
675
+ "payloadRequired": [
676
+ "subject_id"
677
+ ]
678
+ },
679
+ {
680
+ "name": "artifact.created",
681
+ "when": "after the created state change",
682
+ "payloadRequired": [
683
+ "subject_id"
684
+ ]
685
+ },
686
+ {
687
+ "name": "resource.restored",
688
+ "when": "after the restored state change",
689
+ "payloadRequired": [
690
+ "result_id"
691
+ ]
692
+ }
693
+ ],
694
+ "accessibility": [
695
+ "progress announces percent and phase",
696
+ "conflict actions are keyboard reachable"
697
+ ],
698
+ "states": [
699
+ "idle",
700
+ "discovering",
701
+ "transferring",
702
+ "paused",
703
+ "verifying",
704
+ "conflict",
705
+ "completed",
706
+ "failed"
707
+ ],
708
+ "regions": [
709
+ "source",
710
+ "collection",
711
+ "preview",
712
+ "transfer_queue",
713
+ "provenance",
714
+ "actions"
715
+ ],
716
+ "actions": [
717
+ "discover",
718
+ "transfer",
719
+ "pause",
720
+ "resume",
721
+ "verify",
722
+ "resolve",
723
+ "restore"
724
+ ],
725
+ "initialState": "idle",
726
+ "terminalStates": [
727
+ "completed",
728
+ "failed"
729
+ ],
730
+ "transitions": [
731
+ {
732
+ "from": "idle",
733
+ "action": "discover",
734
+ "to": "discovering"
735
+ },
736
+ {
737
+ "from": "discovering",
738
+ "action": "transfer",
739
+ "to": "transferring"
740
+ },
741
+ {
742
+ "from": "transferring",
743
+ "action": "pause",
744
+ "to": "paused"
745
+ },
746
+ {
747
+ "from": "paused",
748
+ "action": "resume",
749
+ "to": "transferring"
750
+ },
751
+ {
752
+ "from": "transferring",
753
+ "action": "verify",
754
+ "to": "verifying"
755
+ },
756
+ {
757
+ "from": "verifying",
758
+ "action": "complete",
759
+ "to": "completed"
760
+ },
761
+ {
762
+ "from": "transferring",
763
+ "action": "detect_conflict",
764
+ "to": "conflict"
765
+ },
766
+ {
767
+ "from": "conflict",
768
+ "action": "resolve",
769
+ "to": "transferring"
770
+ },
771
+ {
772
+ "from": "transferring",
773
+ "action": "fail",
774
+ "to": "failed"
775
+ }
776
+ ]
777
+ },
778
+ "ConversationChannel": {
779
+ "variants": [
780
+ "thread",
781
+ "message",
782
+ "composer",
783
+ "attachment",
784
+ "delivery",
785
+ "pairing",
786
+ "comment",
787
+ "mention",
788
+ "reaction",
789
+ "presence",
790
+ "assignment",
791
+ "sharing",
792
+ "activity"
793
+ ],
794
+ "behavior": [
795
+ "identity and channel are explicit",
796
+ "draft survives transient failure",
797
+ "delivery and read status stay separate",
798
+ "presence never implies permission",
799
+ "comments anchor to stable content",
800
+ "offline collaboration reconciles with preview",
801
+ "sharing exposes audience and access level"
802
+ ],
803
+ "events": [
804
+ {
805
+ "name": "message.queued",
806
+ "when": "after the queued state change",
807
+ "payloadRequired": [
808
+ "subject_id"
809
+ ]
810
+ },
811
+ {
812
+ "name": "message.sent",
813
+ "when": "after the sent state change",
814
+ "payloadRequired": [
815
+ "subject_id"
816
+ ]
817
+ },
818
+ {
819
+ "name": "message.delivered",
820
+ "when": "after the delivered state change",
821
+ "payloadRequired": [
822
+ "subject_id"
823
+ ]
824
+ },
825
+ {
826
+ "name": "message.read",
827
+ "when": "after the read state change",
828
+ "payloadRequired": [
829
+ "target_id"
830
+ ]
831
+ },
832
+ {
833
+ "name": "comment.created",
834
+ "when": "after the created state change",
835
+ "payloadRequired": [
836
+ "subject_id"
837
+ ]
838
+ },
839
+ {
840
+ "name": "mention.created",
841
+ "when": "after the created state change",
842
+ "payloadRequired": [
843
+ "subject_id"
844
+ ]
845
+ },
846
+ {
847
+ "name": "presence.changed",
848
+ "when": "after the changed state change",
849
+ "payloadRequired": [
850
+ "previous",
851
+ "current"
852
+ ]
853
+ },
854
+ {
855
+ "name": "assignment.changed",
856
+ "when": "after the changed state change",
857
+ "payloadRequired": [
858
+ "previous",
859
+ "current"
860
+ ]
861
+ },
862
+ {
863
+ "name": "share.changed",
864
+ "when": "after the changed state change",
865
+ "payloadRequired": [
866
+ "previous",
867
+ "current"
868
+ ]
869
+ },
870
+ {
871
+ "name": "pairing.requested",
872
+ "when": "after the requested state change",
873
+ "payloadRequired": [
874
+ "request_id",
875
+ "scope"
876
+ ]
877
+ },
878
+ {
879
+ "name": "pairing.confirmed",
880
+ "when": "after the confirmed state change",
881
+ "payloadRequired": [
882
+ "result_id"
883
+ ]
884
+ }
885
+ ],
886
+ "accessibility": [
887
+ "composer has label",
888
+ "attachments expose type and removal",
889
+ "status is not color-only",
890
+ "presence and unread status are textual",
891
+ "comment threads have headings",
892
+ "focus reaches newly created content only on request"
893
+ ],
894
+ "states": [
895
+ "draft",
896
+ "queued",
897
+ "sent",
898
+ "delivered",
899
+ "read",
900
+ "failed",
901
+ "unpaired"
902
+ ],
903
+ "regions": [
904
+ "channel_identity",
905
+ "thread",
906
+ "message_list",
907
+ "composer",
908
+ "attachments",
909
+ "activity"
910
+ ],
911
+ "actions": [
912
+ "compose",
913
+ "send",
914
+ "retry",
915
+ "attach",
916
+ "comment",
917
+ "mention",
918
+ "react",
919
+ "assign",
920
+ "share",
921
+ "pair"
922
+ ],
923
+ "initialState": "draft",
924
+ "terminalStates": [],
925
+ "transitions": [
926
+ {
927
+ "from": "draft",
928
+ "action": "send",
929
+ "to": "queued"
930
+ },
931
+ {
932
+ "from": "queued",
933
+ "action": "accept",
934
+ "to": "sent"
935
+ },
936
+ {
937
+ "from": "sent",
938
+ "action": "deliver",
939
+ "to": "delivered"
940
+ },
941
+ {
942
+ "from": "delivered",
943
+ "action": "read",
944
+ "to": "read"
945
+ },
946
+ {
947
+ "from": "queued",
948
+ "action": "fail",
949
+ "to": "failed"
950
+ },
951
+ {
952
+ "from": "failed",
953
+ "action": "retry",
954
+ "to": "queued"
955
+ },
956
+ {
957
+ "from": "unpaired",
958
+ "action": "pair",
959
+ "to": "draft"
960
+ }
961
+ ]
962
+ },
963
+ "ReviewCompare": {
964
+ "variants": [
965
+ "diff",
966
+ "patch",
967
+ "test",
968
+ "rollback",
969
+ "ocr_review",
970
+ "import_reconcile"
971
+ ],
972
+ "behavior": [
973
+ "preview before mutation",
974
+ "apply records receipt",
975
+ "rollback targets the receipt"
976
+ ],
977
+ "events": [
978
+ {
979
+ "name": "review.opened",
980
+ "when": "after the opened state change",
981
+ "payloadRequired": [
982
+ "request_id",
983
+ "scope"
984
+ ]
985
+ },
986
+ {
987
+ "name": "patch.applied",
988
+ "when": "after the applied state change",
989
+ "payloadRequired": [
990
+ "subject_id"
991
+ ]
992
+ },
993
+ {
994
+ "name": "test.completed",
995
+ "when": "after the completed state change",
996
+ "payloadRequired": [
997
+ "result_id"
998
+ ]
999
+ },
1000
+ {
1001
+ "name": "rollback.completed",
1002
+ "when": "after the completed state change",
1003
+ "payloadRequired": [
1004
+ "result_id"
1005
+ ]
1006
+ },
1007
+ {
1008
+ "name": "reconciliation.resolved",
1009
+ "when": "after the resolved state change",
1010
+ "payloadRequired": [
1011
+ "subject_id"
1012
+ ]
1013
+ }
1014
+ ],
1015
+ "accessibility": [
1016
+ "diff has textual additions and deletions",
1017
+ "decision is keyboard reachable",
1018
+ "test result is announced"
1019
+ ],
1020
+ "states": [
1021
+ "idle",
1022
+ "previewing",
1023
+ "changed",
1024
+ "testing",
1025
+ "approved",
1026
+ "rejected",
1027
+ "applied",
1028
+ "rolled_back",
1029
+ "failed"
1030
+ ],
1031
+ "regions": [
1032
+ "source",
1033
+ "comparison",
1034
+ "decision",
1035
+ "test_result",
1036
+ "receipt"
1037
+ ],
1038
+ "actions": [
1039
+ "preview",
1040
+ "approve",
1041
+ "reject",
1042
+ "apply",
1043
+ "test",
1044
+ "rollback",
1045
+ "resolve"
1046
+ ],
1047
+ "initialState": "idle",
1048
+ "terminalStates": [
1049
+ "rejected",
1050
+ "applied",
1051
+ "rolled_back",
1052
+ "failed"
1053
+ ],
1054
+ "transitions": [
1055
+ {
1056
+ "from": "idle",
1057
+ "action": "preview",
1058
+ "to": "previewing"
1059
+ },
1060
+ {
1061
+ "from": "previewing",
1062
+ "action": "change",
1063
+ "to": "changed"
1064
+ },
1065
+ {
1066
+ "from": "changed",
1067
+ "action": "test",
1068
+ "to": "testing"
1069
+ },
1070
+ {
1071
+ "from": "testing",
1072
+ "action": "approve",
1073
+ "to": "approved"
1074
+ },
1075
+ {
1076
+ "from": "approved",
1077
+ "action": "apply",
1078
+ "to": "applied"
1079
+ },
1080
+ {
1081
+ "from": "previewing",
1082
+ "action": "reject",
1083
+ "to": "rejected"
1084
+ },
1085
+ {
1086
+ "from": "applied",
1087
+ "action": "rollback",
1088
+ "to": "rolled_back"
1089
+ },
1090
+ {
1091
+ "from": "testing",
1092
+ "action": "fail",
1093
+ "to": "failed"
1094
+ }
1095
+ ]
1096
+ },
1097
+ "CaptureTranscript": {
1098
+ "variants": [
1099
+ "audio",
1100
+ "voice",
1101
+ "recording",
1102
+ "segment",
1103
+ "transcription",
1104
+ "transcript"
1105
+ ],
1106
+ "behavior": [
1107
+ "recording requires consent",
1108
+ "transcript keeps provenance",
1109
+ "review precedes persistence"
1110
+ ],
1111
+ "events": [
1112
+ {
1113
+ "name": "capture.started",
1114
+ "when": "after the started state change",
1115
+ "payloadRequired": [
1116
+ "request_id",
1117
+ "scope"
1118
+ ]
1119
+ },
1120
+ {
1121
+ "name": "capture.paused",
1122
+ "when": "after the paused state change",
1123
+ "payloadRequired": [
1124
+ "subject_id"
1125
+ ]
1126
+ },
1127
+ {
1128
+ "name": "segment.created",
1129
+ "when": "after the created state change",
1130
+ "payloadRequired": [
1131
+ "subject_id"
1132
+ ]
1133
+ },
1134
+ {
1135
+ "name": "transcript.previewed",
1136
+ "when": "after the previewed state change",
1137
+ "payloadRequired": [
1138
+ "target_id"
1139
+ ]
1140
+ },
1141
+ {
1142
+ "name": "transcript.confirmed",
1143
+ "when": "after the confirmed state change",
1144
+ "payloadRequired": [
1145
+ "result_id"
1146
+ ]
1147
+ }
1148
+ ],
1149
+ "accessibility": [
1150
+ "recording state is announced",
1151
+ "controls remain visible on focus",
1152
+ "transcript supports keyboard review"
1153
+ ],
1154
+ "states": [
1155
+ "idle",
1156
+ "requesting_permission",
1157
+ "recording",
1158
+ "paused",
1159
+ "processing",
1160
+ "review",
1161
+ "completed",
1162
+ "failed"
1163
+ ],
1164
+ "regions": [
1165
+ "consent",
1166
+ "capture_controls",
1167
+ "timeline",
1168
+ "transcript",
1169
+ "provenance",
1170
+ "review"
1171
+ ],
1172
+ "actions": [
1173
+ "request_permission",
1174
+ "start",
1175
+ "pause",
1176
+ "resume",
1177
+ "stop",
1178
+ "review",
1179
+ "confirm",
1180
+ "discard"
1181
+ ],
1182
+ "initialState": "idle",
1183
+ "terminalStates": [
1184
+ "completed",
1185
+ "failed"
1186
+ ],
1187
+ "transitions": [
1188
+ {
1189
+ "from": "idle",
1190
+ "action": "request_permission",
1191
+ "to": "requesting_permission"
1192
+ },
1193
+ {
1194
+ "from": "requesting_permission",
1195
+ "action": "grant",
1196
+ "to": "recording"
1197
+ },
1198
+ {
1199
+ "from": "recording",
1200
+ "action": "pause",
1201
+ "to": "paused"
1202
+ },
1203
+ {
1204
+ "from": "paused",
1205
+ "action": "resume",
1206
+ "to": "recording"
1207
+ },
1208
+ {
1209
+ "from": "recording",
1210
+ "action": "stop",
1211
+ "to": "processing"
1212
+ },
1213
+ {
1214
+ "from": "processing",
1215
+ "action": "preview",
1216
+ "to": "review"
1217
+ },
1218
+ {
1219
+ "from": "review",
1220
+ "action": "confirm",
1221
+ "to": "completed"
1222
+ },
1223
+ {
1224
+ "from": "processing",
1225
+ "action": "fail",
1226
+ "to": "failed"
1227
+ }
1228
+ ]
1229
+ }
1230
+ },
1231
+ "coverage": {
1232
+ "agent-operations-console": [
1233
+ "AppShell",
1234
+ "RunSession",
1235
+ "AnalyticsWorkbench",
1236
+ "ReviewCompare"
1237
+ ],
1238
+ "identity-access-suite": [
1239
+ "IdentityAccess",
1240
+ "RunSession",
1241
+ "ReviewCompare",
1242
+ "CollectionWorkbench"
1243
+ ],
1244
+ "messaging-collaboration": [
1245
+ "ConversationChannel",
1246
+ "CollectionWorkbench",
1247
+ "RunSession"
1248
+ ],
1249
+ "browser-resource-shell": [
1250
+ "AppShell",
1251
+ "ResourceWorkbench",
1252
+ "RunSession",
1253
+ "ReviewCompare"
1254
+ ],
1255
+ "content-document-suite": [
1256
+ "ContentWorkbench",
1257
+ "ResourceWorkbench",
1258
+ "ReviewCompare",
1259
+ "CaptureTranscript"
1260
+ ],
1261
+ "resource-management-suite": [
1262
+ "ResourceWorkbench",
1263
+ "CollectionWorkbench",
1264
+ "RunSession"
1265
+ ],
1266
+ "developer-workbench": [
1267
+ "AppShell",
1268
+ "ResourceWorkbench",
1269
+ "ContentWorkbench",
1270
+ "RunSession",
1271
+ "ReviewCompare"
1272
+ ],
1273
+ "finance-transactions": [
1274
+ "CollectionWorkbench",
1275
+ "AnalyticsWorkbench",
1276
+ "TransactionFlow",
1277
+ "ReviewCompare",
1278
+ "ResourceWorkbench"
1279
+ ],
1280
+ "media-capture-suite": [
1281
+ "MediaLibrary",
1282
+ "CaptureTranscript",
1283
+ "ResourceWorkbench",
1284
+ "CollectionWorkbench"
1285
+ ]
1286
+ },
1287
+ "rule": "São composições opcionais sobre fundamentos genéricos; nomes de produtos não criam componentes novos."
1288
+ },
1289
+ "patternContract": {
1290
+ "requiredFields": [
1291
+ "variants",
1292
+ "states",
1293
+ "regions",
1294
+ "actions",
1295
+ "behavior",
1296
+ "transitions",
1297
+ "events",
1298
+ "accessibility",
1299
+ "initialState",
1300
+ "terminalStates"
1301
+ ],
1302
+ "eventNaming": "lowercase dot-separated domain event",
1303
+ "eventEnvelope": {
1304
+ "required": [
1305
+ "id",
1306
+ "type",
1307
+ "occurred_at",
1308
+ "subject_id",
1309
+ "data"
1310
+ ],
1311
+ "optional": [
1312
+ "actor_id",
1313
+ "correlation_id",
1314
+ "causation_id",
1315
+ "schema_version"
1316
+ ]
1317
+ },
1318
+ "transitionShape": [
1319
+ "from",
1320
+ "action",
1321
+ "to"
1322
+ ],
1323
+ "rule": "Every composed pattern is optional, generic, and implementable without product-specific widgets."
1324
+ },
1325
+ "applicationPatterns": {
1326
+ "states": [
1327
+ "booting",
1328
+ "loading",
1329
+ "ready",
1330
+ "empty",
1331
+ "partial",
1332
+ "refreshing",
1333
+ "stale",
1334
+ "offline",
1335
+ "syncing",
1336
+ "conflict",
1337
+ "unauthorized",
1338
+ "forbidden",
1339
+ "not_found",
1340
+ "rate_limited",
1341
+ "error",
1342
+ "success"
1343
+ ],
1344
+ "patterns": {
1345
+ "AppShell": {
1346
+ "variants": [
1347
+ "public",
1348
+ "app",
1349
+ "admin",
1350
+ "workspace",
1351
+ "mobile",
1352
+ "sidebar",
1353
+ "topbar",
1354
+ "bottom_nav",
1355
+ "split_view",
1356
+ "command_surface"
1357
+ ],
1358
+ "states": [
1359
+ "booting",
1360
+ "ready",
1361
+ "offline",
1362
+ "degraded",
1363
+ "locked"
1364
+ ],
1365
+ "behavior": [
1366
+ "navigation adapts without losing destinations",
1367
+ "global status and identity remain visible",
1368
+ "dirty work blocks accidental navigation"
1369
+ ],
1370
+ "events": [
1371
+ {
1372
+ "name": "shell.ready",
1373
+ "when": "after the ready state change",
1374
+ "payloadRequired": [
1375
+ "target_id"
1376
+ ]
1377
+ },
1378
+ {
1379
+ "name": "navigation.changed",
1380
+ "when": "after the changed state change",
1381
+ "payloadRequired": [
1382
+ "previous",
1383
+ "current"
1384
+ ]
1385
+ },
1386
+ {
1387
+ "name": "command.opened",
1388
+ "when": "after the opened state change",
1389
+ "payloadRequired": [
1390
+ "request_id",
1391
+ "scope"
1392
+ ]
1393
+ },
1394
+ {
1395
+ "name": "connection.changed",
1396
+ "when": "after the changed state change",
1397
+ "payloadRequired": [
1398
+ "previous",
1399
+ "current"
1400
+ ]
1401
+ },
1402
+ {
1403
+ "name": "session.locked",
1404
+ "when": "after the locked state change",
1405
+ "payloadRequired": [
1406
+ "subject_id"
1407
+ ]
1408
+ }
1409
+ ],
1410
+ "accessibility": [
1411
+ "skip link reaches main content",
1412
+ "landmarks and current location are announced",
1413
+ "mobile navigation traps and restores focus"
1414
+ ],
1415
+ "regions": [
1416
+ "skip_link",
1417
+ "global_navigation",
1418
+ "context_header",
1419
+ "main",
1420
+ "utility",
1421
+ "status"
1422
+ ],
1423
+ "actions": [
1424
+ "navigate",
1425
+ "open_command",
1426
+ "switch_context",
1427
+ "lock",
1428
+ "reconnect"
1429
+ ],
1430
+ "initialState": "booting",
1431
+ "terminalStates": [
1432
+ "locked"
1433
+ ],
1434
+ "transitions": [
1435
+ {
1436
+ "from": "booting",
1437
+ "action": "initialize",
1438
+ "to": "ready"
1439
+ },
1440
+ {
1441
+ "from": "ready",
1442
+ "action": "lose_connection",
1443
+ "to": "offline"
1444
+ },
1445
+ {
1446
+ "from": "offline",
1447
+ "action": "reconnect",
1448
+ "to": "ready"
1449
+ },
1450
+ {
1451
+ "from": "ready",
1452
+ "action": "degrade",
1453
+ "to": "degraded"
1454
+ },
1455
+ {
1456
+ "from": "degraded",
1457
+ "action": "recover",
1458
+ "to": "ready"
1459
+ },
1460
+ {
1461
+ "from": "ready",
1462
+ "action": "lock",
1463
+ "to": "locked"
1464
+ }
1465
+ ]
1466
+ },
1467
+ "CollectionWorkbench": {
1468
+ "variants": [
1469
+ "table",
1470
+ "list",
1471
+ "grid",
1472
+ "gallery",
1473
+ "lightbox",
1474
+ "board",
1475
+ "tree",
1476
+ "calendar",
1477
+ "map",
1478
+ "matrix",
1479
+ "master_detail",
1480
+ "inspector",
1481
+ "settings"
1482
+ ],
1483
+ "states": [
1484
+ "loading",
1485
+ "ready",
1486
+ "empty",
1487
+ "no_results",
1488
+ "partial",
1489
+ "refreshing",
1490
+ "error"
1491
+ ],
1492
+ "behavior": [
1493
+ "search filter facet sort and saved view compose independently",
1494
+ "selection enables explicit bulk actions",
1495
+ "pagination or virtualization preserves position",
1496
+ "view changes preserve query state"
1497
+ ],
1498
+ "events": [
1499
+ {
1500
+ "name": "collection.loaded",
1501
+ "when": "after the loaded state change",
1502
+ "payloadRequired": [
1503
+ "subject_id"
1504
+ ]
1505
+ },
1506
+ {
1507
+ "name": "query.changed",
1508
+ "when": "after the changed state change",
1509
+ "payloadRequired": [
1510
+ "previous",
1511
+ "current"
1512
+ ]
1513
+ },
1514
+ {
1515
+ "name": "view.changed",
1516
+ "when": "after the changed state change",
1517
+ "payloadRequired": [
1518
+ "previous",
1519
+ "current"
1520
+ ]
1521
+ },
1522
+ {
1523
+ "name": "selection.changed",
1524
+ "when": "after the changed state change",
1525
+ "payloadRequired": [
1526
+ "previous",
1527
+ "current"
1528
+ ]
1529
+ },
1530
+ {
1531
+ "name": "bulk.requested",
1532
+ "when": "after the requested state change",
1533
+ "payloadRequired": [
1534
+ "request_id",
1535
+ "scope"
1536
+ ]
1537
+ },
1538
+ {
1539
+ "name": "page.changed",
1540
+ "when": "after the changed state change",
1541
+ "payloadRequired": [
1542
+ "previous",
1543
+ "current"
1544
+ ]
1545
+ },
1546
+ {
1547
+ "name": "item.opened",
1548
+ "when": "after the opened state change",
1549
+ "payloadRequired": [
1550
+ "request_id",
1551
+ "scope"
1552
+ ]
1553
+ }
1554
+ ],
1555
+ "accessibility": [
1556
+ "result count and updates are announced",
1557
+ "sorting exposes direction",
1558
+ "grid and drag interactions have keyboard alternatives",
1559
+ "selection is not color-only"
1560
+ ],
1561
+ "regions": [
1562
+ "title",
1563
+ "toolbar",
1564
+ "filters",
1565
+ "results",
1566
+ "selection_actions",
1567
+ "pagination",
1568
+ "inspector"
1569
+ ],
1570
+ "actions": [
1571
+ "search",
1572
+ "filter",
1573
+ "facet",
1574
+ "sort",
1575
+ "save_view",
1576
+ "change_view",
1577
+ "select",
1578
+ "bulk",
1579
+ "open",
1580
+ "page"
1581
+ ],
1582
+ "initialState": "loading",
1583
+ "terminalStates": [],
1584
+ "transitions": [
1585
+ {
1586
+ "from": "loading",
1587
+ "action": "load",
1588
+ "to": "ready"
1589
+ },
1590
+ {
1591
+ "from": "loading",
1592
+ "action": "resolve_empty",
1593
+ "to": "empty"
1594
+ },
1595
+ {
1596
+ "from": "ready",
1597
+ "action": "query_no_results",
1598
+ "to": "no_results"
1599
+ },
1600
+ {
1601
+ "from": "ready",
1602
+ "action": "refresh",
1603
+ "to": "refreshing"
1604
+ },
1605
+ {
1606
+ "from": "refreshing",
1607
+ "action": "complete",
1608
+ "to": "ready"
1609
+ },
1610
+ {
1611
+ "from": "refreshing",
1612
+ "action": "partial",
1613
+ "to": "partial"
1614
+ },
1615
+ {
1616
+ "from": "loading",
1617
+ "action": "fail",
1618
+ "to": "error"
1619
+ },
1620
+ {
1621
+ "from": "error",
1622
+ "action": "retry",
1623
+ "to": "loading"
1624
+ }
1625
+ ]
1626
+ },
1627
+ "FormFlow": {
1628
+ "variants": [
1629
+ "form",
1630
+ "wizard",
1631
+ "survey",
1632
+ "onboarding",
1633
+ "checkout",
1634
+ "bulk_edit"
1635
+ ],
1636
+ "states": [
1637
+ "pristine",
1638
+ "editing",
1639
+ "invalid",
1640
+ "saving",
1641
+ "saved",
1642
+ "submitting",
1643
+ "submitted",
1644
+ "conflict",
1645
+ "error"
1646
+ ],
1647
+ "behavior": [
1648
+ "validation occurs at field and summary levels",
1649
+ "draft and autosave disclose status",
1650
+ "review precedes consequential submission",
1651
+ "back navigation preserves entered data"
1652
+ ],
1653
+ "events": [
1654
+ {
1655
+ "name": "form.started",
1656
+ "when": "after the started state change",
1657
+ "payloadRequired": [
1658
+ "request_id",
1659
+ "scope"
1660
+ ]
1661
+ },
1662
+ {
1663
+ "name": "field.changed",
1664
+ "when": "after the changed state change",
1665
+ "payloadRequired": [
1666
+ "previous",
1667
+ "current"
1668
+ ]
1669
+ },
1670
+ {
1671
+ "name": "draft.saved",
1672
+ "when": "after the saved state change",
1673
+ "payloadRequired": [
1674
+ "result_id"
1675
+ ]
1676
+ },
1677
+ {
1678
+ "name": "validation.failed",
1679
+ "when": "after the failed state change",
1680
+ "payloadRequired": [
1681
+ "error_code",
1682
+ "retryable"
1683
+ ]
1684
+ },
1685
+ {
1686
+ "name": "step.changed",
1687
+ "when": "after the changed state change",
1688
+ "payloadRequired": [
1689
+ "previous",
1690
+ "current"
1691
+ ]
1692
+ },
1693
+ {
1694
+ "name": "form.submitted",
1695
+ "when": "after the submitted state change",
1696
+ "payloadRequired": [
1697
+ "subject_id"
1698
+ ]
1699
+ },
1700
+ {
1701
+ "name": "form.abandoned",
1702
+ "when": "after the abandoned state change",
1703
+ "payloadRequired": [
1704
+ "subject_id"
1705
+ ]
1706
+ }
1707
+ ],
1708
+ "accessibility": [
1709
+ "labels instructions and errors are programmatic",
1710
+ "error summary links to fields",
1711
+ "authentication avoids cognitive-function tests",
1712
+ "required state is not color-only"
1713
+ ],
1714
+ "regions": [
1715
+ "instructions",
1716
+ "error_summary",
1717
+ "fields",
1718
+ "progress",
1719
+ "review",
1720
+ "actions",
1721
+ "save_status"
1722
+ ],
1723
+ "actions": [
1724
+ "edit",
1725
+ "validate",
1726
+ "save_draft",
1727
+ "back",
1728
+ "next",
1729
+ "review",
1730
+ "submit",
1731
+ "discard"
1732
+ ],
1733
+ "initialState": "pristine",
1734
+ "terminalStates": [
1735
+ "submitted"
1736
+ ],
1737
+ "transitions": [
1738
+ {
1739
+ "from": "pristine",
1740
+ "action": "edit",
1741
+ "to": "editing"
1742
+ },
1743
+ {
1744
+ "from": "editing",
1745
+ "action": "validate_invalid",
1746
+ "to": "invalid"
1747
+ },
1748
+ {
1749
+ "from": "invalid",
1750
+ "action": "edit",
1751
+ "to": "editing"
1752
+ },
1753
+ {
1754
+ "from": "editing",
1755
+ "action": "save",
1756
+ "to": "saving"
1757
+ },
1758
+ {
1759
+ "from": "saving",
1760
+ "action": "complete",
1761
+ "to": "saved"
1762
+ },
1763
+ {
1764
+ "from": "editing",
1765
+ "action": "submit",
1766
+ "to": "submitting"
1767
+ },
1768
+ {
1769
+ "from": "submitting",
1770
+ "action": "complete",
1771
+ "to": "submitted"
1772
+ },
1773
+ {
1774
+ "from": "submitting",
1775
+ "action": "conflict",
1776
+ "to": "conflict"
1777
+ },
1778
+ {
1779
+ "from": "submitting",
1780
+ "action": "fail",
1781
+ "to": "error"
1782
+ }
1783
+ ]
1784
+ },
1785
+ "ContentWorkbench": {
1786
+ "variants": [
1787
+ "rich_text",
1788
+ "markdown",
1789
+ "code",
1790
+ "document",
1791
+ "cms",
1792
+ "docs",
1793
+ "blog",
1794
+ "portfolio",
1795
+ "preview"
1796
+ ],
1797
+ "states": [
1798
+ "loading",
1799
+ "editing",
1800
+ "dirty",
1801
+ "autosaving",
1802
+ "saved",
1803
+ "review",
1804
+ "published",
1805
+ "conflict",
1806
+ "error"
1807
+ ],
1808
+ "behavior": [
1809
+ "source preview outline and assets remain synchronized",
1810
+ "version history supports compare and restore",
1811
+ "publish is separate from save"
1812
+ ],
1813
+ "events": [
1814
+ {
1815
+ "name": "content.changed",
1816
+ "when": "after the changed state change",
1817
+ "payloadRequired": [
1818
+ "previous",
1819
+ "current"
1820
+ ]
1821
+ },
1822
+ {
1823
+ "name": "draft.saved",
1824
+ "when": "after the saved state change",
1825
+ "payloadRequired": [
1826
+ "result_id"
1827
+ ]
1828
+ },
1829
+ {
1830
+ "name": "preview.updated",
1831
+ "when": "after the updated state change",
1832
+ "payloadRequired": [
1833
+ "previous",
1834
+ "current"
1835
+ ]
1836
+ },
1837
+ {
1838
+ "name": "review.requested",
1839
+ "when": "after the requested state change",
1840
+ "payloadRequired": [
1841
+ "request_id",
1842
+ "scope"
1843
+ ]
1844
+ },
1845
+ {
1846
+ "name": "version.restored",
1847
+ "when": "after the restored state change",
1848
+ "payloadRequired": [
1849
+ "result_id"
1850
+ ]
1851
+ },
1852
+ {
1853
+ "name": "content.published",
1854
+ "when": "after the published state change",
1855
+ "payloadRequired": [
1856
+ "result_id"
1857
+ ]
1858
+ }
1859
+ ],
1860
+ "accessibility": [
1861
+ "toolbar has keyboard navigation",
1862
+ "editing mode is announced",
1863
+ "structure is available without visual styling",
1864
+ "autosave status uses a live region"
1865
+ ],
1866
+ "regions": [
1867
+ "outline",
1868
+ "editor",
1869
+ "toolbar",
1870
+ "assets",
1871
+ "preview",
1872
+ "versions",
1873
+ "publish_status"
1874
+ ],
1875
+ "actions": [
1876
+ "edit",
1877
+ "save",
1878
+ "preview",
1879
+ "request_review",
1880
+ "publish",
1881
+ "restore"
1882
+ ],
1883
+ "initialState": "loading",
1884
+ "terminalStates": [
1885
+ "published"
1886
+ ],
1887
+ "transitions": [
1888
+ {
1889
+ "from": "loading",
1890
+ "action": "load",
1891
+ "to": "saved"
1892
+ },
1893
+ {
1894
+ "from": "saved",
1895
+ "action": "edit",
1896
+ "to": "editing"
1897
+ },
1898
+ {
1899
+ "from": "editing",
1900
+ "action": "change",
1901
+ "to": "dirty"
1902
+ },
1903
+ {
1904
+ "from": "dirty",
1905
+ "action": "autosave",
1906
+ "to": "autosaving"
1907
+ },
1908
+ {
1909
+ "from": "autosaving",
1910
+ "action": "complete",
1911
+ "to": "saved"
1912
+ },
1913
+ {
1914
+ "from": "saved",
1915
+ "action": "request_review",
1916
+ "to": "review"
1917
+ },
1918
+ {
1919
+ "from": "review",
1920
+ "action": "publish",
1921
+ "to": "published"
1922
+ },
1923
+ {
1924
+ "from": "autosaving",
1925
+ "action": "conflict",
1926
+ "to": "conflict"
1927
+ },
1928
+ {
1929
+ "from": "autosaving",
1930
+ "action": "fail",
1931
+ "to": "error"
1932
+ }
1933
+ ]
1934
+ },
1935
+ "VisualBuilder": {
1936
+ "variants": [
1937
+ "workflow",
1938
+ "automation",
1939
+ "pipeline",
1940
+ "diagram",
1941
+ "whiteboard",
1942
+ "layout"
1943
+ ],
1944
+ "states": [
1945
+ "idle",
1946
+ "editing",
1947
+ "validating",
1948
+ "invalid",
1949
+ "running",
1950
+ "paused",
1951
+ "completed",
1952
+ "failed"
1953
+ ],
1954
+ "behavior": [
1955
+ "palette canvas inspector and run history are separable regions",
1956
+ "undo redo and versioning cover structural edits",
1957
+ "connect and move actions have non-drag alternatives",
1958
+ "credentials are referenced never exposed"
1959
+ ],
1960
+ "events": [
1961
+ {
1962
+ "name": "node.added",
1963
+ "when": "after the added state change",
1964
+ "payloadRequired": [
1965
+ "subject_id"
1966
+ ]
1967
+ },
1968
+ {
1969
+ "name": "node.connected",
1970
+ "when": "after the connected state change",
1971
+ "payloadRequired": [
1972
+ "subject_id"
1973
+ ]
1974
+ },
1975
+ {
1976
+ "name": "node.configured",
1977
+ "when": "after the configured state change",
1978
+ "payloadRequired": [
1979
+ "subject_id"
1980
+ ]
1981
+ },
1982
+ {
1983
+ "name": "graph.validated",
1984
+ "when": "after the validated state change",
1985
+ "payloadRequired": [
1986
+ "subject_id"
1987
+ ]
1988
+ },
1989
+ {
1990
+ "name": "version.saved",
1991
+ "when": "after the saved state change",
1992
+ "payloadRequired": [
1993
+ "result_id"
1994
+ ]
1995
+ },
1996
+ {
1997
+ "name": "run.requested",
1998
+ "when": "after the requested state change",
1999
+ "payloadRequired": [
2000
+ "request_id",
2001
+ "scope"
2002
+ ]
2003
+ },
2004
+ {
2005
+ "name": "run.completed",
2006
+ "when": "after the completed state change",
2007
+ "payloadRequired": [
2008
+ "result_id"
2009
+ ]
2010
+ },
2011
+ {
2012
+ "name": "run.failed",
2013
+ "when": "after the failed state change",
2014
+ "payloadRequired": [
2015
+ "error_code",
2016
+ "retryable"
2017
+ ]
2018
+ }
2019
+ ],
2020
+ "accessibility": [
2021
+ "canvas has an equivalent ordered outline",
2022
+ "nodes and ports have accessible names",
2023
+ "keyboard can add connect move delete and configure",
2024
+ "validation errors link to nodes"
2025
+ ],
2026
+ "regions": [
2027
+ "palette",
2028
+ "canvas",
2029
+ "outline",
2030
+ "inspector",
2031
+ "variables",
2032
+ "run_history",
2033
+ "actions"
2034
+ ],
2035
+ "actions": [
2036
+ "add",
2037
+ "connect",
2038
+ "configure",
2039
+ "move",
2040
+ "delete",
2041
+ "undo",
2042
+ "redo",
2043
+ "validate",
2044
+ "run",
2045
+ "pause"
2046
+ ],
2047
+ "initialState": "idle",
2048
+ "terminalStates": [
2049
+ "completed",
2050
+ "failed"
2051
+ ],
2052
+ "transitions": [
2053
+ {
2054
+ "from": "idle",
2055
+ "action": "edit",
2056
+ "to": "editing"
2057
+ },
2058
+ {
2059
+ "from": "editing",
2060
+ "action": "validate",
2061
+ "to": "validating"
2062
+ },
2063
+ {
2064
+ "from": "validating",
2065
+ "action": "reject",
2066
+ "to": "invalid"
2067
+ },
2068
+ {
2069
+ "from": "invalid",
2070
+ "action": "edit",
2071
+ "to": "editing"
2072
+ },
2073
+ {
2074
+ "from": "validating",
2075
+ "action": "accept",
2076
+ "to": "idle"
2077
+ },
2078
+ {
2079
+ "from": "idle",
2080
+ "action": "run",
2081
+ "to": "running"
2082
+ },
2083
+ {
2084
+ "from": "running",
2085
+ "action": "pause",
2086
+ "to": "paused"
2087
+ },
2088
+ {
2089
+ "from": "paused",
2090
+ "action": "resume",
2091
+ "to": "running"
2092
+ },
2093
+ {
2094
+ "from": "running",
2095
+ "action": "complete",
2096
+ "to": "completed"
2097
+ },
2098
+ {
2099
+ "from": "running",
2100
+ "action": "fail",
2101
+ "to": "failed"
2102
+ }
2103
+ ]
2104
+ },
2105
+ "AnalyticsWorkbench": {
2106
+ "variants": [
2107
+ "dashboard",
2108
+ "explore",
2109
+ "report",
2110
+ "realtime",
2111
+ "funnel",
2112
+ "cohort"
2113
+ ],
2114
+ "states": [
2115
+ "loading",
2116
+ "ready",
2117
+ "empty",
2118
+ "partial",
2119
+ "refreshing",
2120
+ "stale",
2121
+ "error"
2122
+ ],
2123
+ "behavior": [
2124
+ "time range filters and segments apply consistently",
2125
+ "drilldown preserves context and supports return",
2126
+ "visualization always has a tabular alternative",
2127
+ "export records scope and freshness"
2128
+ ],
2129
+ "events": [
2130
+ {
2131
+ "name": "range.changed",
2132
+ "when": "after the changed state change",
2133
+ "payloadRequired": [
2134
+ "previous",
2135
+ "current"
2136
+ ]
2137
+ },
2138
+ {
2139
+ "name": "filter.changed",
2140
+ "when": "after the changed state change",
2141
+ "payloadRequired": [
2142
+ "previous",
2143
+ "current"
2144
+ ]
2145
+ },
2146
+ {
2147
+ "name": "segment.changed",
2148
+ "when": "after the changed state change",
2149
+ "payloadRequired": [
2150
+ "previous",
2151
+ "current"
2152
+ ]
2153
+ },
2154
+ {
2155
+ "name": "drilldown.opened",
2156
+ "when": "after the opened state change",
2157
+ "payloadRequired": [
2158
+ "request_id",
2159
+ "scope"
2160
+ ]
2161
+ },
2162
+ {
2163
+ "name": "annotation.created",
2164
+ "when": "after the created state change",
2165
+ "payloadRequired": [
2166
+ "subject_id"
2167
+ ]
2168
+ },
2169
+ {
2170
+ "name": "report.exported",
2171
+ "when": "after the exported state change",
2172
+ "payloadRequired": [
2173
+ "subject_id"
2174
+ ]
2175
+ },
2176
+ {
2177
+ "name": "data.refreshed",
2178
+ "when": "after the refreshed state change",
2179
+ "payloadRequired": [
2180
+ "subject_id"
2181
+ ]
2182
+ }
2183
+ ],
2184
+ "accessibility": [
2185
+ "charts have summaries and data tables",
2186
+ "updates are announced without stealing focus",
2187
+ "color is not the sole series distinction"
2188
+ ],
2189
+ "regions": [
2190
+ "kpis",
2191
+ "time_range",
2192
+ "filters",
2193
+ "segments",
2194
+ "visualization",
2195
+ "data_table",
2196
+ "annotations",
2197
+ "export"
2198
+ ],
2199
+ "actions": [
2200
+ "change_range",
2201
+ "filter",
2202
+ "segment",
2203
+ "compare",
2204
+ "drilldown",
2205
+ "annotate",
2206
+ "export",
2207
+ "refresh"
2208
+ ],
2209
+ "initialState": "loading",
2210
+ "terminalStates": [],
2211
+ "transitions": [
2212
+ {
2213
+ "from": "loading",
2214
+ "action": "load",
2215
+ "to": "ready"
2216
+ },
2217
+ {
2218
+ "from": "loading",
2219
+ "action": "resolve_empty",
2220
+ "to": "empty"
2221
+ },
2222
+ {
2223
+ "from": "ready",
2224
+ "action": "refresh",
2225
+ "to": "refreshing"
2226
+ },
2227
+ {
2228
+ "from": "refreshing",
2229
+ "action": "complete",
2230
+ "to": "ready"
2231
+ },
2232
+ {
2233
+ "from": "refreshing",
2234
+ "action": "partial",
2235
+ "to": "partial"
2236
+ },
2237
+ {
2238
+ "from": "ready",
2239
+ "action": "become_stale",
2240
+ "to": "stale"
2241
+ },
2242
+ {
2243
+ "from": "stale",
2244
+ "action": "refresh",
2245
+ "to": "refreshing"
2246
+ },
2247
+ {
2248
+ "from": "loading",
2249
+ "action": "fail",
2250
+ "to": "error"
2251
+ }
2252
+ ]
2253
+ },
2254
+ "MediaLibrary": {
2255
+ "variants": [
2256
+ "audio",
2257
+ "video",
2258
+ "image",
2259
+ "playlist",
2260
+ "queue",
2261
+ "channel"
2262
+ ],
2263
+ "states": [
2264
+ "loading",
2265
+ "ready",
2266
+ "empty",
2267
+ "playing",
2268
+ "paused",
2269
+ "buffering",
2270
+ "offline",
2271
+ "error"
2272
+ ],
2273
+ "behavior": [
2274
+ "library queue playback and item detail share one selection",
2275
+ "resume position and history are explicit",
2276
+ "chapters tracks captions quality and devices are optional capabilities",
2277
+ "bulk organize never interrupts playback"
2278
+ ],
2279
+ "events": [
2280
+ {
2281
+ "name": "media.opened",
2282
+ "when": "after the opened state change",
2283
+ "payloadRequired": [
2284
+ "request_id",
2285
+ "scope"
2286
+ ]
2287
+ },
2288
+ {
2289
+ "name": "queue.changed",
2290
+ "when": "after the changed state change",
2291
+ "payloadRequired": [
2292
+ "previous",
2293
+ "current"
2294
+ ]
2295
+ },
2296
+ {
2297
+ "name": "playlist.changed",
2298
+ "when": "after the changed state change",
2299
+ "payloadRequired": [
2300
+ "previous",
2301
+ "current"
2302
+ ]
2303
+ },
2304
+ {
2305
+ "name": "chapter.selected",
2306
+ "when": "after the selected state change",
2307
+ "payloadRequired": [
2308
+ "target_id"
2309
+ ]
2310
+ },
2311
+ {
2312
+ "name": "track.changed",
2313
+ "when": "after the changed state change",
2314
+ "payloadRequired": [
2315
+ "previous",
2316
+ "current"
2317
+ ]
2318
+ },
2319
+ {
2320
+ "name": "playback.resumed",
2321
+ "when": "after the resumed state change",
2322
+ "payloadRequired": [
2323
+ "subject_id"
2324
+ ]
2325
+ },
2326
+ {
2327
+ "name": "media.completed",
2328
+ "when": "after the completed state change",
2329
+ "payloadRequired": [
2330
+ "result_id"
2331
+ ]
2332
+ }
2333
+ ],
2334
+ "accessibility": [
2335
+ "all transport controls have names and state",
2336
+ "captions transcript and audio description are discoverable",
2337
+ "gallery selection works by keyboard",
2338
+ "autoplay never surprises"
2339
+ ],
2340
+ "regions": [
2341
+ "library",
2342
+ "item_detail",
2343
+ "player",
2344
+ "queue",
2345
+ "tracks",
2346
+ "chapters",
2347
+ "history",
2348
+ "actions"
2349
+ ],
2350
+ "actions": [
2351
+ "play",
2352
+ "pause",
2353
+ "seek",
2354
+ "queue",
2355
+ "playlist",
2356
+ "chapter",
2357
+ "track",
2358
+ "resume",
2359
+ "favorite"
2360
+ ],
2361
+ "initialState": "loading",
2362
+ "terminalStates": [],
2363
+ "transitions": [
2364
+ {
2365
+ "from": "loading",
2366
+ "action": "load",
2367
+ "to": "ready"
2368
+ },
2369
+ {
2370
+ "from": "loading",
2371
+ "action": "resolve_empty",
2372
+ "to": "empty"
2373
+ },
2374
+ {
2375
+ "from": "ready",
2376
+ "action": "play",
2377
+ "to": "playing"
2378
+ },
2379
+ {
2380
+ "from": "playing",
2381
+ "action": "pause",
2382
+ "to": "paused"
2383
+ },
2384
+ {
2385
+ "from": "paused",
2386
+ "action": "play",
2387
+ "to": "playing"
2388
+ },
2389
+ {
2390
+ "from": "playing",
2391
+ "action": "buffer",
2392
+ "to": "buffering"
2393
+ },
2394
+ {
2395
+ "from": "buffering",
2396
+ "action": "resume",
2397
+ "to": "playing"
2398
+ },
2399
+ {
2400
+ "from": "playing",
2401
+ "action": "lose_connection",
2402
+ "to": "offline"
2403
+ },
2404
+ {
2405
+ "from": "loading",
2406
+ "action": "fail",
2407
+ "to": "error"
2408
+ }
2409
+ ]
2410
+ },
2411
+ "IdentityAccess": {
2412
+ "variants": [
2413
+ "sign_in",
2414
+ "sign_up",
2415
+ "mfa",
2416
+ "recovery",
2417
+ "profile",
2418
+ "organization",
2419
+ "roles"
2420
+ ],
2421
+ "states": [
2422
+ "anonymous",
2423
+ "authenticating",
2424
+ "challenged",
2425
+ "authenticated",
2426
+ "expired",
2427
+ "locked",
2428
+ "error"
2429
+ ],
2430
+ "behavior": [
2431
+ "identity organization and active role are explicit",
2432
+ "privilege elevation requires confirmation",
2433
+ "session expiry preserves safe drafts",
2434
+ "secrets remain masked and copy is deliberate"
2435
+ ],
2436
+ "events": [
2437
+ {
2438
+ "name": "auth.started",
2439
+ "when": "after the started state change",
2440
+ "payloadRequired": [
2441
+ "request_id",
2442
+ "scope"
2443
+ ]
2444
+ },
2445
+ {
2446
+ "name": "challenge.requested",
2447
+ "when": "after the requested state change",
2448
+ "payloadRequired": [
2449
+ "request_id",
2450
+ "scope"
2451
+ ]
2452
+ },
2453
+ {
2454
+ "name": "auth.succeeded",
2455
+ "when": "after the succeeded state change",
2456
+ "payloadRequired": [
2457
+ "result_id"
2458
+ ]
2459
+ },
2460
+ {
2461
+ "name": "auth.failed",
2462
+ "when": "after the failed state change",
2463
+ "payloadRequired": [
2464
+ "error_code",
2465
+ "retryable"
2466
+ ]
2467
+ },
2468
+ {
2469
+ "name": "session.expired",
2470
+ "when": "after the expired state change",
2471
+ "payloadRequired": [
2472
+ "subject_id"
2473
+ ]
2474
+ },
2475
+ {
2476
+ "name": "role.changed",
2477
+ "when": "after the changed state change",
2478
+ "payloadRequired": [
2479
+ "previous",
2480
+ "current"
2481
+ ]
2482
+ },
2483
+ {
2484
+ "name": "recovery.completed",
2485
+ "when": "after the completed state change",
2486
+ "payloadRequired": [
2487
+ "result_id"
2488
+ ]
2489
+ }
2490
+ ],
2491
+ "accessibility": [
2492
+ "authentication supports password managers and paste",
2493
+ "errors do not reveal account existence",
2494
+ "focus reaches the first invalid field",
2495
+ "timeouts and reauthentication are announced"
2496
+ ],
2497
+ "regions": [
2498
+ "identity",
2499
+ "credentials",
2500
+ "challenge",
2501
+ "recovery",
2502
+ "session",
2503
+ "organization",
2504
+ "roles"
2505
+ ],
2506
+ "actions": [
2507
+ "sign_in",
2508
+ "challenge",
2509
+ "recover",
2510
+ "switch_role",
2511
+ "sign_out"
2512
+ ],
2513
+ "initialState": "anonymous",
2514
+ "terminalStates": [
2515
+ "locked"
2516
+ ],
2517
+ "transitions": [
2518
+ {
2519
+ "from": "anonymous",
2520
+ "action": "sign_in",
2521
+ "to": "authenticating"
2522
+ },
2523
+ {
2524
+ "from": "authenticating",
2525
+ "action": "challenge",
2526
+ "to": "challenged"
2527
+ },
2528
+ {
2529
+ "from": "challenged",
2530
+ "action": "verify",
2531
+ "to": "authenticated"
2532
+ },
2533
+ {
2534
+ "from": "authenticating",
2535
+ "action": "succeed",
2536
+ "to": "authenticated"
2537
+ },
2538
+ {
2539
+ "from": "authenticating",
2540
+ "action": "fail",
2541
+ "to": "error"
2542
+ },
2543
+ {
2544
+ "from": "authenticated",
2545
+ "action": "expire",
2546
+ "to": "expired"
2547
+ },
2548
+ {
2549
+ "from": "expired",
2550
+ "action": "sign_in",
2551
+ "to": "authenticating"
2552
+ },
2553
+ {
2554
+ "from": "authenticated",
2555
+ "action": "lock",
2556
+ "to": "locked"
2557
+ },
2558
+ {
2559
+ "from": "authenticated",
2560
+ "action": "sign_out",
2561
+ "to": "anonymous"
2562
+ }
2563
+ ]
2564
+ },
2565
+ "TransactionFlow": {
2566
+ "variants": [
2567
+ "cart",
2568
+ "order",
2569
+ "invoice",
2570
+ "payment",
2571
+ "subscription",
2572
+ "refund",
2573
+ "reconciliation"
2574
+ ],
2575
+ "states": [
2576
+ "draft",
2577
+ "pending",
2578
+ "processing",
2579
+ "requires_action",
2580
+ "settled",
2581
+ "failed",
2582
+ "cancelled",
2583
+ "refunded",
2584
+ "disputed"
2585
+ ],
2586
+ "behavior": [
2587
+ "amount currency fees and consequences appear before commit",
2588
+ "idempotent submission prevents duplicates",
2589
+ "immutable receipt follows every terminal result",
2590
+ "reversal and dispute preserve the original transaction"
2591
+ ],
2592
+ "events": [
2593
+ {
2594
+ "name": "transaction.started",
2595
+ "when": "after the started state change",
2596
+ "payloadRequired": [
2597
+ "request_id",
2598
+ "scope"
2599
+ ]
2600
+ },
2601
+ {
2602
+ "name": "amount.changed",
2603
+ "when": "after the changed state change",
2604
+ "payloadRequired": [
2605
+ "previous",
2606
+ "current"
2607
+ ]
2608
+ },
2609
+ {
2610
+ "name": "payment.authorized",
2611
+ "when": "after the authorized state change",
2612
+ "payloadRequired": [
2613
+ "subject_id"
2614
+ ]
2615
+ },
2616
+ {
2617
+ "name": "transaction.settled",
2618
+ "when": "after the settled state change",
2619
+ "payloadRequired": [
2620
+ "result_id"
2621
+ ]
2622
+ },
2623
+ {
2624
+ "name": "transaction.failed",
2625
+ "when": "after the failed state change",
2626
+ "payloadRequired": [
2627
+ "error_code",
2628
+ "retryable"
2629
+ ]
2630
+ },
2631
+ {
2632
+ "name": "refund.requested",
2633
+ "when": "after the requested state change",
2634
+ "payloadRequired": [
2635
+ "request_id",
2636
+ "scope"
2637
+ ]
2638
+ },
2639
+ {
2640
+ "name": "reconciliation.completed",
2641
+ "when": "after the completed state change",
2642
+ "payloadRequired": [
2643
+ "result_id"
2644
+ ]
2645
+ }
2646
+ ],
2647
+ "accessibility": [
2648
+ "totals and errors are textual",
2649
+ "review step prevents financial mistakes",
2650
+ "status updates use live regions",
2651
+ "numeric input supports locale"
2652
+ ],
2653
+ "regions": [
2654
+ "items",
2655
+ "amounts",
2656
+ "payment",
2657
+ "review",
2658
+ "status",
2659
+ "receipt",
2660
+ "reversal"
2661
+ ],
2662
+ "actions": [
2663
+ "create",
2664
+ "review",
2665
+ "authorize",
2666
+ "cancel",
2667
+ "refund",
2668
+ "reconcile"
2669
+ ],
2670
+ "initialState": "draft",
2671
+ "terminalStates": [
2672
+ "settled",
2673
+ "failed",
2674
+ "cancelled",
2675
+ "refunded"
2676
+ ],
2677
+ "transitions": [
2678
+ {
2679
+ "from": "draft",
2680
+ "action": "submit",
2681
+ "to": "pending"
2682
+ },
2683
+ {
2684
+ "from": "pending",
2685
+ "action": "process",
2686
+ "to": "processing"
2687
+ },
2688
+ {
2689
+ "from": "processing",
2690
+ "action": "require_action",
2691
+ "to": "requires_action"
2692
+ },
2693
+ {
2694
+ "from": "requires_action",
2695
+ "action": "authorize",
2696
+ "to": "processing"
2697
+ },
2698
+ {
2699
+ "from": "processing",
2700
+ "action": "settle",
2701
+ "to": "settled"
2702
+ },
2703
+ {
2704
+ "from": "processing",
2705
+ "action": "fail",
2706
+ "to": "failed"
2707
+ },
2708
+ {
2709
+ "from": "pending",
2710
+ "action": "cancel",
2711
+ "to": "cancelled"
2712
+ },
2713
+ {
2714
+ "from": "settled",
2715
+ "action": "refund",
2716
+ "to": "refunded"
2717
+ },
2718
+ {
2719
+ "from": "settled",
2720
+ "action": "dispute",
2721
+ "to": "disputed"
2722
+ }
2723
+ ]
2724
+ },
2725
+ "SchedulePlanner": {
2726
+ "variants": [
2727
+ "calendar",
2728
+ "agenda",
2729
+ "timeline",
2730
+ "booking",
2731
+ "recurrence",
2732
+ "availability"
2733
+ ],
2734
+ "states": [
2735
+ "loading",
2736
+ "ready",
2737
+ "empty",
2738
+ "selecting",
2739
+ "conflict",
2740
+ "confirmed",
2741
+ "cancelled",
2742
+ "error"
2743
+ ],
2744
+ "behavior": [
2745
+ "timezone and locale remain visible",
2746
+ "recurrence has a human-readable summary",
2747
+ "conflicts offer alternatives",
2748
+ "drag scheduling has form and keyboard equivalents"
2749
+ ],
2750
+ "events": [
2751
+ {
2752
+ "name": "range.changed",
2753
+ "when": "after the changed state change",
2754
+ "payloadRequired": [
2755
+ "previous",
2756
+ "current"
2757
+ ]
2758
+ },
2759
+ {
2760
+ "name": "slot.selected",
2761
+ "when": "after the selected state change",
2762
+ "payloadRequired": [
2763
+ "target_id"
2764
+ ]
2765
+ },
2766
+ {
2767
+ "name": "conflict.detected",
2768
+ "when": "after the detected state change",
2769
+ "payloadRequired": [
2770
+ "subject_id"
2771
+ ]
2772
+ },
2773
+ {
2774
+ "name": "booking.confirmed",
2775
+ "when": "after the confirmed state change",
2776
+ "payloadRequired": [
2777
+ "result_id"
2778
+ ]
2779
+ },
2780
+ {
2781
+ "name": "event.rescheduled",
2782
+ "when": "after the rescheduled state change",
2783
+ "payloadRequired": [
2784
+ "subject_id"
2785
+ ]
2786
+ },
2787
+ {
2788
+ "name": "reminder.changed",
2789
+ "when": "after the changed state change",
2790
+ "payloadRequired": [
2791
+ "previous",
2792
+ "current"
2793
+ ]
2794
+ },
2795
+ {
2796
+ "name": "event.cancelled",
2797
+ "when": "after the cancelled state change",
2798
+ "payloadRequired": [
2799
+ "subject_id"
2800
+ ]
2801
+ }
2802
+ ],
2803
+ "accessibility": [
2804
+ "calendar has agenda alternative",
2805
+ "dates and times are spoken unambiguously",
2806
+ "keyboard can create move and resize events"
2807
+ ],
2808
+ "regions": [
2809
+ "timezone",
2810
+ "calendar",
2811
+ "agenda",
2812
+ "availability",
2813
+ "details",
2814
+ "conflicts",
2815
+ "actions"
2816
+ ],
2817
+ "actions": [
2818
+ "select_slot",
2819
+ "create",
2820
+ "reschedule",
2821
+ "repeat",
2822
+ "remind",
2823
+ "cancel"
2824
+ ],
2825
+ "initialState": "loading",
2826
+ "terminalStates": [
2827
+ "confirmed",
2828
+ "cancelled"
2829
+ ],
2830
+ "transitions": [
2831
+ {
2832
+ "from": "loading",
2833
+ "action": "load",
2834
+ "to": "ready"
2835
+ },
2836
+ {
2837
+ "from": "loading",
2838
+ "action": "resolve_empty",
2839
+ "to": "empty"
2840
+ },
2841
+ {
2842
+ "from": "ready",
2843
+ "action": "select",
2844
+ "to": "selecting"
2845
+ },
2846
+ {
2847
+ "from": "selecting",
2848
+ "action": "detect_conflict",
2849
+ "to": "conflict"
2850
+ },
2851
+ {
2852
+ "from": "conflict",
2853
+ "action": "select",
2854
+ "to": "selecting"
2855
+ },
2856
+ {
2857
+ "from": "selecting",
2858
+ "action": "confirm",
2859
+ "to": "confirmed"
2860
+ },
2861
+ {
2862
+ "from": "confirmed",
2863
+ "action": "cancel",
2864
+ "to": "cancelled"
2865
+ },
2866
+ {
2867
+ "from": "loading",
2868
+ "action": "fail",
2869
+ "to": "error"
2870
+ }
2871
+ ]
2872
+ },
2873
+ "SpatialWorkbench": {
2874
+ "variants": [
2875
+ "map",
2876
+ "list_map",
2877
+ "route",
2878
+ "layers",
2879
+ "geofence",
2880
+ "location_picker"
2881
+ ],
2882
+ "states": [
2883
+ "loading",
2884
+ "ready",
2885
+ "locating",
2886
+ "route_ready",
2887
+ "offline",
2888
+ "permission_denied",
2889
+ "error"
2890
+ ],
2891
+ "behavior": [
2892
+ "map selection is mirrored in a list",
2893
+ "location permission is contextual and revocable",
2894
+ "routes expose steps and alternatives",
2895
+ "offline mode discloses data freshness"
2896
+ ],
2897
+ "events": [
2898
+ {
2899
+ "name": "location.requested",
2900
+ "when": "after the requested state change",
2901
+ "payloadRequired": [
2902
+ "request_id",
2903
+ "scope"
2904
+ ]
2905
+ },
2906
+ {
2907
+ "name": "location.selected",
2908
+ "when": "after the selected state change",
2909
+ "payloadRequired": [
2910
+ "target_id"
2911
+ ]
2912
+ },
2913
+ {
2914
+ "name": "layer.changed",
2915
+ "when": "after the changed state change",
2916
+ "payloadRequired": [
2917
+ "previous",
2918
+ "current"
2919
+ ]
2920
+ },
2921
+ {
2922
+ "name": "route.calculated",
2923
+ "when": "after the calculated state change",
2924
+ "payloadRequired": [
2925
+ "subject_id"
2926
+ ]
2927
+ },
2928
+ {
2929
+ "name": "viewport.changed",
2930
+ "when": "after the changed state change",
2931
+ "payloadRequired": [
2932
+ "previous",
2933
+ "current"
2934
+ ]
2935
+ },
2936
+ {
2937
+ "name": "geofence.changed",
2938
+ "when": "after the changed state change",
2939
+ "payloadRequired": [
2940
+ "previous",
2941
+ "current"
2942
+ ]
2943
+ }
2944
+ ],
2945
+ "accessibility": [
2946
+ "all map actions have list or form equivalents",
2947
+ "markers have accessible names",
2948
+ "zoom is not the only way to reach detail"
2949
+ ],
2950
+ "regions": [
2951
+ "map",
2952
+ "equivalent_list",
2953
+ "layers",
2954
+ "route_steps",
2955
+ "details",
2956
+ "permissions",
2957
+ "actions"
2958
+ ],
2959
+ "actions": [
2960
+ "locate",
2961
+ "select",
2962
+ "route",
2963
+ "toggle_layer",
2964
+ "geofence",
2965
+ "recenter"
2966
+ ],
2967
+ "initialState": "loading",
2968
+ "terminalStates": [
2969
+ "permission_denied"
2970
+ ],
2971
+ "transitions": [
2972
+ {
2973
+ "from": "loading",
2974
+ "action": "load",
2975
+ "to": "ready"
2976
+ },
2977
+ {
2978
+ "from": "ready",
2979
+ "action": "locate",
2980
+ "to": "locating"
2981
+ },
2982
+ {
2983
+ "from": "locating",
2984
+ "action": "grant",
2985
+ "to": "ready"
2986
+ },
2987
+ {
2988
+ "from": "locating",
2989
+ "action": "deny",
2990
+ "to": "permission_denied"
2991
+ },
2992
+ {
2993
+ "from": "ready",
2994
+ "action": "route",
2995
+ "to": "route_ready"
2996
+ },
2997
+ {
2998
+ "from": "ready",
2999
+ "action": "lose_connection",
3000
+ "to": "offline"
3001
+ },
3002
+ {
3003
+ "from": "offline",
3004
+ "action": "reconnect",
3005
+ "to": "ready"
3006
+ },
3007
+ {
3008
+ "from": "loading",
3009
+ "action": "fail",
3010
+ "to": "error"
3011
+ }
3012
+ ]
3013
+ },
3014
+ "DeviceControl": {
3015
+ "variants": [
3016
+ "fleet",
3017
+ "detail",
3018
+ "telemetry",
3019
+ "command",
3020
+ "calibration",
3021
+ "alerts"
3022
+ ],
3023
+ "states": [
3024
+ "unknown",
3025
+ "online",
3026
+ "degraded",
3027
+ "offline",
3028
+ "updating",
3029
+ "calibrating",
3030
+ "alert",
3031
+ "error"
3032
+ ],
3033
+ "behavior": [
3034
+ "telemetry timestamp and confidence are visible",
3035
+ "commands show target scope and expected effect",
3036
+ "unsafe actions require gated confirmation",
3037
+ "calibration retains defaults and rollback"
3038
+ ],
3039
+ "events": [
3040
+ {
3041
+ "name": "device.selected",
3042
+ "when": "after the selected state change",
3043
+ "payloadRequired": [
3044
+ "target_id"
3045
+ ]
3046
+ },
3047
+ {
3048
+ "name": "telemetry.updated",
3049
+ "when": "after the updated state change",
3050
+ "payloadRequired": [
3051
+ "previous",
3052
+ "current"
3053
+ ]
3054
+ },
3055
+ {
3056
+ "name": "command.requested",
3057
+ "when": "after the requested state change",
3058
+ "payloadRequired": [
3059
+ "request_id",
3060
+ "scope"
3061
+ ]
3062
+ },
3063
+ {
3064
+ "name": "command.acknowledged",
3065
+ "when": "after the acknowledged state change",
3066
+ "payloadRequired": [
3067
+ "subject_id"
3068
+ ]
3069
+ },
3070
+ {
3071
+ "name": "calibration.changed",
3072
+ "when": "after the changed state change",
3073
+ "payloadRequired": [
3074
+ "previous",
3075
+ "current"
3076
+ ]
3077
+ },
3078
+ {
3079
+ "name": "firmware.updated",
3080
+ "when": "after the updated state change",
3081
+ "payloadRequired": [
3082
+ "previous",
3083
+ "current"
3084
+ ]
3085
+ },
3086
+ {
3087
+ "name": "alert.acknowledged",
3088
+ "when": "after the acknowledged state change",
3089
+ "payloadRequired": [
3090
+ "subject_id"
3091
+ ]
3092
+ }
3093
+ ],
3094
+ "accessibility": [
3095
+ "status is text and color",
3096
+ "live telemetry can be paused",
3097
+ "controls expose current value and unit",
3098
+ "critical alerts do not rely on sound"
3099
+ ],
3100
+ "regions": [
3101
+ "fleet",
3102
+ "device_detail",
3103
+ "telemetry",
3104
+ "commands",
3105
+ "calibration",
3106
+ "alerts",
3107
+ "audit"
3108
+ ],
3109
+ "actions": [
3110
+ "select",
3111
+ "command",
3112
+ "confirm",
3113
+ "calibrate",
3114
+ "update",
3115
+ "acknowledge",
3116
+ "pause_live"
3117
+ ],
3118
+ "initialState": "unknown",
3119
+ "terminalStates": [],
3120
+ "transitions": [
3121
+ {
3122
+ "from": "unknown",
3123
+ "action": "connect",
3124
+ "to": "online"
3125
+ },
3126
+ {
3127
+ "from": "online",
3128
+ "action": "degrade",
3129
+ "to": "degraded"
3130
+ },
3131
+ {
3132
+ "from": "degraded",
3133
+ "action": "recover",
3134
+ "to": "online"
3135
+ },
3136
+ {
3137
+ "from": "online",
3138
+ "action": "disconnect",
3139
+ "to": "offline"
3140
+ },
3141
+ {
3142
+ "from": "online",
3143
+ "action": "update",
3144
+ "to": "updating"
3145
+ },
3146
+ {
3147
+ "from": "updating",
3148
+ "action": "complete",
3149
+ "to": "online"
3150
+ },
3151
+ {
3152
+ "from": "online",
3153
+ "action": "calibrate",
3154
+ "to": "calibrating"
3155
+ },
3156
+ {
3157
+ "from": "calibrating",
3158
+ "action": "complete",
3159
+ "to": "online"
3160
+ },
3161
+ {
3162
+ "from": "online",
3163
+ "action": "raise_alert",
3164
+ "to": "alert"
3165
+ },
3166
+ {
3167
+ "from": "alert",
3168
+ "action": "acknowledge",
3169
+ "to": "online"
3170
+ },
3171
+ {
3172
+ "from": "online",
3173
+ "action": "fail",
3174
+ "to": "error"
3175
+ }
3176
+ ]
3177
+ }
3178
+ },
3179
+ "archetypes": {
3180
+ "public_site": {
3181
+ "patterns": [
3182
+ "AppShell",
3183
+ "ContentWorkbench",
3184
+ "FormFlow"
3185
+ ],
3186
+ "capabilities": [
3187
+ "landing",
3188
+ "docs",
3189
+ "blog",
3190
+ "portfolio",
3191
+ "search",
3192
+ "conversion"
3193
+ ],
3194
+ "invariants": [
3195
+ "public content works without authentication",
3196
+ "reading order survives reflow"
3197
+ ]
3198
+ },
3199
+ "docs_cms": {
3200
+ "patterns": [
3201
+ "AppShell",
3202
+ "ContentWorkbench",
3203
+ "CollectionWorkbench"
3204
+ ],
3205
+ "capabilities": [
3206
+ "search",
3207
+ "outline",
3208
+ "assets",
3209
+ "versioning",
3210
+ "publishing"
3211
+ ],
3212
+ "invariants": [
3213
+ "save is distinct from publish",
3214
+ "restores preserve version provenance"
3215
+ ]
3216
+ },
3217
+ "saas_admin": {
3218
+ "patterns": [
3219
+ "AppShell",
3220
+ "CollectionWorkbench",
3221
+ "FormFlow",
3222
+ "IdentityAccess"
3223
+ ],
3224
+ "capabilities": [
3225
+ "navigation",
3226
+ "CRUD",
3227
+ "settings",
3228
+ "roles"
3229
+ ],
3230
+ "invariants": [
3231
+ "writes expose validation and result",
3232
+ "active organization and role stay visible"
3233
+ ]
3234
+ },
3235
+ "dashboard_bi": {
3236
+ "patterns": [
3237
+ "AppShell",
3238
+ "AnalyticsWorkbench",
3239
+ "CollectionWorkbench"
3240
+ ],
3241
+ "capabilities": [
3242
+ "KPI",
3243
+ "time range",
3244
+ "segments",
3245
+ "drilldown",
3246
+ "export"
3247
+ ],
3248
+ "invariants": [
3249
+ "every chart has a tabular alternative",
3250
+ "filter scope persists through drilldown"
3251
+ ]
3252
+ },
3253
+ "catalog_gallery": {
3254
+ "patterns": [
3255
+ "CollectionWorkbench",
3256
+ "MediaLibrary",
3257
+ "FormFlow"
3258
+ ],
3259
+ "capabilities": [
3260
+ "facets",
3261
+ "saved views",
3262
+ "gallery",
3263
+ "lightbox",
3264
+ "selection",
3265
+ "bulk actions"
3266
+ ],
3267
+ "invariants": [
3268
+ "view changes preserve the query",
3269
+ "selection remains explicit across pagination"
3270
+ ]
3271
+ },
3272
+ "media_streaming": {
3273
+ "patterns": [
3274
+ "MediaLibrary",
3275
+ "CaptureTranscript",
3276
+ "ResourceWorkbench"
3277
+ ],
3278
+ "capabilities": [
3279
+ "library",
3280
+ "queue",
3281
+ "playlist",
3282
+ "tracks",
3283
+ "chapters",
3284
+ "resume"
3285
+ ],
3286
+ "invariants": [
3287
+ "library actions never interrupt playback unexpectedly",
3288
+ "capture requires consent and provenance"
3289
+ ]
3290
+ },
3291
+ "workflow_automation": {
3292
+ "patterns": [
3293
+ "VisualBuilder",
3294
+ "RunSession",
3295
+ "ReviewCompare"
3296
+ ],
3297
+ "capabilities": [
3298
+ "node graph",
3299
+ "variables",
3300
+ "credentials",
3301
+ "debug",
3302
+ "run history"
3303
+ ],
3304
+ "invariants": [
3305
+ "credentials are referenced never displayed",
3306
+ "canvas actions have keyboard alternatives"
3307
+ ]
3308
+ },
3309
+ "developer_tools": {
3310
+ "patterns": [
3311
+ "AppShell",
3312
+ "ResourceWorkbench",
3313
+ "ContentWorkbench",
3314
+ "RunSession",
3315
+ "ReviewCompare"
3316
+ ],
3317
+ "capabilities": [
3318
+ "workspace",
3319
+ "files",
3320
+ "editor",
3321
+ "terminal",
3322
+ "tests",
3323
+ "builds",
3324
+ "artifacts",
3325
+ "rollback"
3326
+ ],
3327
+ "invariants": [
3328
+ "all outputs share correlation IDs",
3329
+ "dangerous commands disclose scope before execution"
3330
+ ]
3331
+ },
3332
+ "file_cloud": {
3333
+ "patterns": [
3334
+ "CollectionWorkbench",
3335
+ "ResourceWorkbench"
3336
+ ],
3337
+ "capabilities": [
3338
+ "browse",
3339
+ "transfer",
3340
+ "resume",
3341
+ "checksum",
3342
+ "conflict",
3343
+ "restore"
3344
+ ],
3345
+ "invariants": [
3346
+ "resume validates checksum",
3347
+ "restore retains provenance"
3348
+ ]
3349
+ },
3350
+ "messaging_social": {
3351
+ "patterns": [
3352
+ "ConversationChannel",
3353
+ "CollectionWorkbench",
3354
+ "MediaLibrary"
3355
+ ],
3356
+ "capabilities": [
3357
+ "threads",
3358
+ "delivery",
3359
+ "presence",
3360
+ "comments",
3361
+ "mentions",
3362
+ "sharing"
3363
+ ],
3364
+ "invariants": [
3365
+ "presence never grants permission",
3366
+ "delivery and read state remain distinct"
3367
+ ]
3368
+ },
3369
+ "commerce_finance": {
3370
+ "patterns": [
3371
+ "TransactionFlow",
3372
+ "AnalyticsWorkbench",
3373
+ "IdentityAccess",
3374
+ "ReviewCompare"
3375
+ ],
3376
+ "capabilities": [
3377
+ "cart",
3378
+ "order",
3379
+ "payment",
3380
+ "invoice",
3381
+ "subscription",
3382
+ "refund",
3383
+ "reconciliation"
3384
+ ],
3385
+ "invariants": [
3386
+ "consequential writes are idempotent",
3387
+ "terminal results produce immutable receipts"
3388
+ ]
3389
+ },
3390
+ "booking_calendar": {
3391
+ "patterns": [
3392
+ "SchedulePlanner",
3393
+ "FormFlow",
3394
+ "TransactionFlow",
3395
+ "IdentityAccess"
3396
+ ],
3397
+ "capabilities": [
3398
+ "availability",
3399
+ "recurrence",
3400
+ "timezone",
3401
+ "confirmation",
3402
+ "payment"
3403
+ ],
3404
+ "invariants": [
3405
+ "timezone is visible before confirmation",
3406
+ "conflicts offer an alternate slot"
3407
+ ]
3408
+ },
3409
+ "maps_logistics": {
3410
+ "patterns": [
3411
+ "SpatialWorkbench",
3412
+ "CollectionWorkbench",
3413
+ "ResourceWorkbench",
3414
+ "SchedulePlanner"
3415
+ ],
3416
+ "capabilities": [
3417
+ "maps",
3418
+ "routes",
3419
+ "layers",
3420
+ "tracking",
3421
+ "ETA"
3422
+ ],
3423
+ "invariants": [
3424
+ "map selection mirrors a list",
3425
+ "offline freshness is explicit"
3426
+ ]
3427
+ },
3428
+ "iot_control": {
3429
+ "patterns": [
3430
+ "DeviceControl",
3431
+ "AnalyticsWorkbench",
3432
+ "RunSession",
3433
+ "ReviewCompare"
3434
+ ],
3435
+ "capabilities": [
3436
+ "fleet",
3437
+ "telemetry",
3438
+ "commands",
3439
+ "alerts",
3440
+ "calibration"
3441
+ ],
3442
+ "invariants": [
3443
+ "unsafe commands are gated",
3444
+ "telemetry always carries time and unit"
3445
+ ]
3446
+ },
3447
+ "agent_ai": {
3448
+ "patterns": [
3449
+ "RunSession",
3450
+ "ConversationChannel",
3451
+ "ResourceWorkbench",
3452
+ "ReviewCompare"
3453
+ ],
3454
+ "capabilities": [
3455
+ "turns",
3456
+ "tools",
3457
+ "approval",
3458
+ "receipts",
3459
+ "provenance"
3460
+ ],
3461
+ "invariants": [
3462
+ "approval is explicit",
3463
+ "a terminal run cannot lose its receipt"
3464
+ ]
3465
+ },
3466
+ "project_crm_erp": {
3467
+ "patterns": [
3468
+ "CollectionWorkbench",
3469
+ "FormFlow",
3470
+ "SchedulePlanner",
3471
+ "ConversationChannel",
3472
+ "VisualBuilder"
3473
+ ],
3474
+ "capabilities": [
3475
+ "records",
3476
+ "pipeline",
3477
+ "assignments",
3478
+ "history",
3479
+ "automation"
3480
+ ],
3481
+ "invariants": [
3482
+ "history is append-only for audited changes",
3483
+ "bulk scope is shown before mutation"
3484
+ ]
3485
+ },
3486
+ "education": {
3487
+ "patterns": [
3488
+ "ContentWorkbench",
3489
+ "MediaLibrary",
3490
+ "FormFlow",
3491
+ "SchedulePlanner",
3492
+ "AnalyticsWorkbench"
3493
+ ],
3494
+ "capabilities": [
3495
+ "lessons",
3496
+ "assessment",
3497
+ "progress",
3498
+ "sessions"
3499
+ ],
3500
+ "invariants": [
3501
+ "progress is available without color",
3502
+ "media has captions or transcript"
3503
+ ]
3504
+ },
3505
+ "personal_productivity": {
3506
+ "patterns": [
3507
+ "AppShell",
3508
+ "CollectionWorkbench",
3509
+ "SchedulePlanner",
3510
+ "ContentWorkbench"
3511
+ ],
3512
+ "capabilities": [
3513
+ "tasks",
3514
+ "notes",
3515
+ "calendar",
3516
+ "offline draft"
3517
+ ],
3518
+ "invariants": [
3519
+ "offline edits remain recoverable",
3520
+ "navigation preserves dirty work"
3521
+ ]
3522
+ },
3523
+ "mobile_pwa": {
3524
+ "patterns": [
3525
+ "AppShell",
3526
+ "FormFlow",
3527
+ "CollectionWorkbench"
3528
+ ],
3529
+ "capabilities": [
3530
+ "reflow",
3531
+ "touch",
3532
+ "offline",
3533
+ "installable shell"
3534
+ ],
3535
+ "invariants": [
3536
+ "all features work at 320 CSS pixels",
3537
+ "touch and keyboard keep parity"
3538
+ ]
3539
+ },
3540
+ "support_service": {
3541
+ "patterns": [
3542
+ "ConversationChannel",
3543
+ "CollectionWorkbench",
3544
+ "SchedulePlanner",
3545
+ "RunSession"
3546
+ ],
3547
+ "capabilities": [
3548
+ "inbox",
3549
+ "case history",
3550
+ "SLA",
3551
+ "escalation"
3552
+ ],
3553
+ "invariants": [
3554
+ "case and channel identity remain visible",
3555
+ "escalation records reason and owner"
3556
+ ]
3557
+ },
3558
+ "regulated_records": {
3559
+ "patterns": [
3560
+ "IdentityAccess",
3561
+ "CollectionWorkbench",
3562
+ "FormFlow",
3563
+ "ReviewCompare"
3564
+ ],
3565
+ "capabilities": [
3566
+ "consent",
3567
+ "audit",
3568
+ "error prevention",
3569
+ "retention"
3570
+ ],
3571
+ "invariants": [
3572
+ "least privilege is visible",
3573
+ "consequential submission includes review and receipt"
3574
+ ]
3575
+ },
3576
+ "creative_workspace": {
3577
+ "patterns": [
3578
+ "VisualBuilder",
3579
+ "ContentWorkbench",
3580
+ "MediaLibrary",
3581
+ "ConversationChannel"
3582
+ ],
3583
+ "capabilities": [
3584
+ "canvas",
3585
+ "assets",
3586
+ "versions",
3587
+ "comments",
3588
+ "review"
3589
+ ],
3590
+ "invariants": [
3591
+ "every canvas operation has an outline alternative",
3592
+ "versions support compare and restore"
3593
+ ]
3594
+ },
3595
+ "observability_ops": {
3596
+ "patterns": [
3597
+ "AnalyticsWorkbench",
3598
+ "RunSession",
3599
+ "ResourceWorkbench",
3600
+ "DeviceControl"
3601
+ ],
3602
+ "capabilities": [
3603
+ "telemetry",
3604
+ "logs",
3605
+ "alerts",
3606
+ "remediation"
3607
+ ],
3608
+ "invariants": [
3609
+ "live updates can be paused",
3610
+ "remediation links to alert and receipt"
3611
+ ]
3612
+ }
3613
+ },
3614
+ "rule": "Archetypes are recipes of optional patterns, never new component families.",
3615
+ "recipeContract": {
3616
+ "requiredFields": [
3617
+ "patterns",
3618
+ "capabilities",
3619
+ "invariants"
3620
+ ],
3621
+ "rule": "Every announced archetype references existing patterns and states implementation invariants."
3622
+ }
3623
+ },
3624
+ "universalCapabilities": {
3625
+ "accessibility": {
3626
+ "target": "WCAG 2.2 AA",
3627
+ "requirements": [
3628
+ "semantic HTML before ARIA",
3629
+ "visible focus is never fully obscured",
3630
+ "keyboard parity for pointer and drag actions",
3631
+ "minimum 24 CSS pixel target with 44 CSS pixel touch recommendation",
3632
+ "320 CSS pixel reflow without loss",
3633
+ "status messages announced without focus theft",
3634
+ "reduced motion and forced colors supported"
3635
+ ]
3636
+ },
3637
+ "responsive": {
3638
+ "viewports": [
3639
+ 320,
3640
+ 640,
3641
+ 768,
3642
+ 1024,
3643
+ 1280,
3644
+ 1536
3645
+ ],
3646
+ "requirements": [
3647
+ "content reflows before horizontal page scroll",
3648
+ "navigation adapts without losing destinations",
3649
+ "dense data may scroll inside a labelled region",
3650
+ "touch and keyboard keep feature parity"
3651
+ ]
3652
+ },
3653
+ "data": {
3654
+ "requirements": [
3655
+ "loading empty no-results partial stale and error states",
3656
+ "search sort filter facet pagination virtualization and bulk selection compose",
3657
+ "import export and destructive mutation expose scope and receipt"
3658
+ ]
3659
+ },
3660
+ "resilience": {
3661
+ "requirements": [
3662
+ "draft autosave retry resume undo restore and conflict preview",
3663
+ "offline and stale data are explicit",
3664
+ "idempotency for consequential writes"
3665
+ ]
3666
+ },
3667
+ "internationalization": {
3668
+ "requirements": [
3669
+ "locale-aware date time number currency and pluralization",
3670
+ "timezone is explicit when relevant",
3671
+ "RTL and text expansion do not reorder meaning"
3672
+ ]
3673
+ },
3674
+ "privacySecurity": {
3675
+ "requirements": [
3676
+ "secrets masked by default",
3677
+ "least privilege and session expiry visible",
3678
+ "consent and provenance for capture",
3679
+ "privileged writes gated and receipted"
3680
+ ]
3681
+ },
3682
+ "interaction": {
3683
+ "requirements": [
3684
+ "copy paste undo redo multiselect and shortcuts follow platform conventions",
3685
+ "hover is never the only discovery mechanism",
3686
+ "frequent keyboard actions do not animate",
3687
+ "focus is restored after overlays"
3688
+ ]
3689
+ },
3690
+ "performanceMotion": {
3691
+ "requirements": [
3692
+ "interaction motion stays at or below 300ms",
3693
+ "transform and opacity preferred for motion",
3694
+ "large collections define pagination or virtualization",
3695
+ "live updates can be paused"
3696
+ ]
3697
+ }
3698
+ }
3699
+ }