@praxisui/editorial-forms 9.0.0-beta.7 → 9.0.0-beta.70

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,1234 @@
1
+ {
2
+ "schemaVersion": "1.0.0",
3
+ "generatedAt": "2026-07-10T23:38:40.443Z",
4
+ "packageName": "@praxisui/editorial-forms",
5
+ "packageVersion": "9.0.0-beta.70",
6
+ "sourceRegistry": "praxis-component-registry-ingestion",
7
+ "sourceRegistryVersion": "1.0.0",
8
+ "componentCount": 2,
9
+ "components": {
10
+ "praxis-editorial-form-runtime": {
11
+ "id": "praxis-editorial-form-runtime",
12
+ "description": "Guided editorial runtime for solution and instance driven form experiences.",
13
+ "category": "form",
14
+ "inputs": [
15
+ {
16
+ "name": "solution",
17
+ "type": "EditorialSolutionDefinition | null",
18
+ "required": false
19
+ },
20
+ {
21
+ "name": "instance",
22
+ "type": "EditorialTemplateInstance | null",
23
+ "required": false
24
+ },
25
+ {
26
+ "name": "runtimeContext",
27
+ "type": "Record<string, unknown> | null",
28
+ "required": false
29
+ },
30
+ {
31
+ "name": "hostConfig",
32
+ "type": "EditorialRuntimeHostConfig | null",
33
+ "required": false
34
+ }
35
+ ],
36
+ "outputs": [
37
+ {
38
+ "name": "snapshotChange",
39
+ "type": "EditorialRuntimeSnapshot",
40
+ "required": false
41
+ },
42
+ {
43
+ "name": "fallbackChange",
44
+ "type": "EditorialRuntimeFallbackState",
45
+ "required": false
46
+ },
47
+ {
48
+ "name": "operationalEvent",
49
+ "type": "EditorialRuntimeOperationalEvent",
50
+ "required": false
51
+ }
52
+ ],
53
+ "configSchemaId": null,
54
+ "selector": "praxis-editorial-form-runtime",
55
+ "friendlyName": "Praxis Editorial Form Runtime",
56
+ "icon": "article",
57
+ "tags": [
58
+ "widget",
59
+ "editorial",
60
+ "forms",
61
+ "runtime",
62
+ "guided-flow"
63
+ ],
64
+ "lib": "@praxisui/editorial-forms",
65
+ "layoutHints": {
66
+ "recommendedCols": 6,
67
+ "recommendedRows": 6,
68
+ "minCols": 4,
69
+ "minRows": 4
70
+ },
71
+ "source": "projects/praxis-editorial-forms/src/lib/editorial-form-runtime.metadata.ts",
72
+ "exportName": "EDITORIAL_FORM_RUNTIME_COMPONENT_METADATA",
73
+ "chunks": [
74
+ {
75
+ "chunkIndex": 0,
76
+ "chunkKind": "summary",
77
+ "content": "Component ID: praxis-editorial-form-runtime\nSelector: praxis-editorial-form-runtime\nFriendly Name: Praxis Editorial Form Runtime\nDescription: Guided editorial runtime for solution and instance driven form experiences.\nCategory: form\nLib/Package: @praxisui/editorial-forms\nTags: widget, editorial, forms, runtime, guided-flow\nInputs:\n - solution (EditorialSolutionDefinition | null)\n - instance (EditorialTemplateInstance | null)\n - runtimeContext (Record<string, unknown> | null)\n - hostConfig (EditorialRuntimeHostConfig | null)\nOutputs:\n - snapshotChange (EditorialRuntimeSnapshot)\n - fallbackChange (EditorialRuntimeFallbackState)\n - operationalEvent (EditorialRuntimeOperationalEvent)\n",
78
+ "sourcePointer": "praxis-ui-angular/projects/praxis-editorial-forms/src/lib/editorial-form-runtime.metadata.ts",
79
+ "contentHash": "ef27596ae30d7f55b97546b3268a607c3f1989183b67cfa00e415624f1e058a6",
80
+ "sourceKind": "component_definition",
81
+ "sourceId": "praxis-editorial-form-runtime",
82
+ "corpusVersion": "1.0.0"
83
+ }
84
+ ]
85
+ },
86
+ "praxis-editorial-forms": {
87
+ "id": "praxis-editorial-forms",
88
+ "description": "Authoring-only registry entry for praxis-editorial-forms.",
89
+ "category": "form",
90
+ "inputs": [
91
+ {
92
+ "name": "solution",
93
+ "type": "EditorialSolutionDefinition | null",
94
+ "required": false
95
+ },
96
+ {
97
+ "name": "instance",
98
+ "type": "EditorialTemplateInstance | null",
99
+ "required": false
100
+ },
101
+ {
102
+ "name": "runtimeContext",
103
+ "type": "Record<string, unknown> | null",
104
+ "required": false
105
+ },
106
+ {
107
+ "name": "hostConfig",
108
+ "type": "EditorialRuntimeHostConfig | null",
109
+ "required": false
110
+ },
111
+ {
112
+ "name": "snapshotChange",
113
+ "type": "EditorialRuntimeSnapshot",
114
+ "required": false
115
+ },
116
+ {
117
+ "name": "fallbackChange",
118
+ "type": "EditorialRuntimeFallbackState",
119
+ "required": false
120
+ },
121
+ {
122
+ "name": "operationalEvent",
123
+ "type": "EditorialRuntimeOperationalEvent",
124
+ "required": false
125
+ }
126
+ ],
127
+ "outputs": [],
128
+ "configSchemaId": "EditorialRuntimeInput",
129
+ "selector": "praxis-editorial-forms",
130
+ "friendlyName": "Praxis Editorial Forms",
131
+ "tags": [
132
+ "authoring",
133
+ "manifest",
134
+ "praxis-editorial-forms"
135
+ ],
136
+ "lib": "@praxisui/editorial-forms",
137
+ "source": "projects/praxis-editorial-forms/src/lib/ai/praxis-editorial-forms-authoring-manifest.ts",
138
+ "exportName": "PRAXIS_EDITORIAL_FORMS_AUTHORING_MANIFEST",
139
+ "authoringOnly": true,
140
+ "authoringManifest": {
141
+ "schemaVersion": "1.0.0",
142
+ "componentId": "praxis-editorial-forms",
143
+ "ownerPackage": "@praxisui/editorial-forms",
144
+ "configSchemaId": "EditorialRuntimeInput",
145
+ "manifestVersion": "1.0.0",
146
+ "runtimeInputs": [
147
+ {
148
+ "name": "solution",
149
+ "type": "EditorialSolutionDefinition | null",
150
+ "description": "Canonical editorial solution definition with journeys, steps, blocks and presentation."
151
+ },
152
+ {
153
+ "name": "instance",
154
+ "type": "EditorialTemplateInstance | null",
155
+ "description": "Runtime instance with selected journey, context, overrides and compatibility form configs."
156
+ },
157
+ {
158
+ "name": "runtimeContext",
159
+ "type": "Record<string, unknown> | null",
160
+ "description": "Host-provided immutable context merged into the resolved editorial snapshot."
161
+ },
162
+ {
163
+ "name": "hostConfig",
164
+ "type": "EditorialRuntimeHostConfig | null",
165
+ "description": "Host controls for operational event and adapter event forwarding."
166
+ },
167
+ {
168
+ "name": "snapshotChange",
169
+ "type": "EditorialRuntimeSnapshot",
170
+ "description": "Resolved runtime snapshot emitted to hosts for product UX and audit derivation."
171
+ },
172
+ {
173
+ "name": "fallbackChange",
174
+ "type": "EditorialRuntimeFallbackState",
175
+ "description": "Operational fallback state emitted when diagnostics affect runtime health."
176
+ },
177
+ {
178
+ "name": "operationalEvent",
179
+ "type": "EditorialRuntimeOperationalEvent",
180
+ "description": "Technical diagnostics event stream for logs, monitoring and runbooks."
181
+ }
182
+ ],
183
+ "editableTargets": [
184
+ {
185
+ "kind": "snapshot",
186
+ "resolver": "editorial-runtime-snapshot",
187
+ "description": "Resolved editorial state from solution, instance and runtime context."
188
+ },
189
+ {
190
+ "kind": "fallback",
191
+ "resolver": "editorial-runtime-fallback-state",
192
+ "description": "Explicit operational fallback state derived from runtime diagnostics."
193
+ },
194
+ {
195
+ "kind": "presentation",
196
+ "resolver": "editorial-solution-presentation",
197
+ "description": "Editorial presentation contract under solution.presentation."
198
+ },
199
+ {
200
+ "kind": "adapter",
201
+ "resolver": "editorial-data-block-adapter-registry",
202
+ "description": "Optional dataCollection adapter binding and compatibility requirements."
203
+ },
204
+ {
205
+ "kind": "dataBlock",
206
+ "resolver": "editorial-journey-step-block-by-id",
207
+ "description": "Editorial blocks inside journey steps, including dataCollection and presentational blocks."
208
+ },
209
+ {
210
+ "kind": "fieldBinding",
211
+ "resolver": "editorial-data-block-field-binding",
212
+ "description": "Field-to-runtime-context binding for dataCollection blocks without redefining FieldMetadata."
213
+ }
214
+ ],
215
+ "operations": [
216
+ {
217
+ "operationId": "snapshot.set",
218
+ "title": "Set editorial snapshot inputs",
219
+ "scope": "global",
220
+ "targetKind": "snapshot",
221
+ "target": {
222
+ "kind": "snapshot",
223
+ "resolver": "editorial-runtime-snapshot",
224
+ "ambiguityPolicy": "fail",
225
+ "required": false
226
+ },
227
+ "inputSchema": {
228
+ "type": "object",
229
+ "required": [
230
+ "solutionId"
231
+ ],
232
+ "properties": {
233
+ "solutionId": {
234
+ "type": "string"
235
+ },
236
+ "instanceId": {
237
+ "type": "string"
238
+ },
239
+ "journeyId": {
240
+ "type": "string"
241
+ },
242
+ "stepId": {
243
+ "type": "string"
244
+ },
245
+ "runtimeContextPatch": {
246
+ "type": "object"
247
+ },
248
+ "instanceContextPatch": {
249
+ "type": "object"
250
+ },
251
+ "preserveDiagnostics": {
252
+ "type": "boolean"
253
+ }
254
+ }
255
+ },
256
+ "effects": [
257
+ {
258
+ "kind": "compile-domain-patch",
259
+ "handler": "editorial-snapshot-set",
260
+ "handlerContract": {
261
+ "reads": [
262
+ "EditorialSolutionDefinition",
263
+ "EditorialTemplateInstance",
264
+ "runtimeContext",
265
+ "resolveEditorialRuntimeSnapshot"
266
+ ],
267
+ "writes": [
268
+ "solution.solutionId",
269
+ "instance.instanceId",
270
+ "instance.context",
271
+ "runtimeContext"
272
+ ],
273
+ "identityKeys": [
274
+ "solutionId",
275
+ "instanceId",
276
+ "journeyId"
277
+ ],
278
+ "failureModes": [
279
+ "solution-not-found",
280
+ "journey-not-found",
281
+ "step-not-found",
282
+ "snapshot-shape-invalid",
283
+ "diagnostics-lost"
284
+ ],
285
+ "description": "Compiles a deterministic patch to editorial runtime inputs, validates the requested journey/step against the resolved snapshot and requires diagnostics to be preserved."
286
+ }
287
+ }
288
+ ],
289
+ "validators": [
290
+ "snapshot-shape-canonical",
291
+ "journey-exists",
292
+ "step-exists",
293
+ "diagnostics-preserved",
294
+ "editorial-round-trip"
295
+ ],
296
+ "affectedPaths": [
297
+ "solution.solutionId",
298
+ "instance.instanceId",
299
+ "instance.context",
300
+ "runtimeContext"
301
+ ],
302
+ "submissionImpact": "config-only",
303
+ "preconditions": [
304
+ "editorial-runtime-inputs-loaded"
305
+ ],
306
+ "destructive": false,
307
+ "requiresConfirmation": false
308
+ },
309
+ {
310
+ "operationId": "fallback.configure",
311
+ "title": "Configure explicit fallback behavior",
312
+ "scope": "meta",
313
+ "targetKind": "fallback",
314
+ "target": {
315
+ "kind": "fallback",
316
+ "resolver": "editorial-runtime-fallback-state",
317
+ "ambiguityPolicy": "fail",
318
+ "required": false
319
+ },
320
+ "inputSchema": {
321
+ "type": "object",
322
+ "required": [
323
+ "mode"
324
+ ],
325
+ "properties": {
326
+ "mode": {
327
+ "enum": [
328
+ "normal",
329
+ "warning",
330
+ "degraded",
331
+ "blocked"
332
+ ]
333
+ },
334
+ "diagnosticCode": {
335
+ "type": "string"
336
+ },
337
+ "progressionBlocked": {
338
+ "type": "boolean"
339
+ },
340
+ "requiresEngineAttention": {
341
+ "type": "boolean"
342
+ },
343
+ "scope": {
344
+ "type": "object",
345
+ "properties": {
346
+ "journeyId": {
347
+ "type": "string"
348
+ },
349
+ "stepId": {
350
+ "type": "string"
351
+ },
352
+ "blockId": {
353
+ "type": "string"
354
+ }
355
+ }
356
+ }
357
+ }
358
+ },
359
+ "effects": [
360
+ {
361
+ "kind": "compile-domain-patch",
362
+ "handler": "editorial-fallback-configure",
363
+ "handlerContract": {
364
+ "reads": [
365
+ "EditorialRuntimeDiagnostics",
366
+ "deriveRuntimeFallbackState",
367
+ "EditorialRuntimeFallbackScope"
368
+ ],
369
+ "writes": [
370
+ "hostConfig.emitOperationalEvents",
371
+ "snapshot.diagnostics.items"
372
+ ],
373
+ "identityKeys": [
374
+ "mode",
375
+ "diagnosticCode",
376
+ "scope.journeyId",
377
+ "scope.stepId"
378
+ ],
379
+ "failureModes": [
380
+ "fallback-mode-invalid",
381
+ "blocking-diagnostic-missing",
382
+ "scope-not-found",
383
+ "implicit-degradation-not-allowed"
384
+ ],
385
+ "description": "Requires fallback policy to be explicit and tied to snapshot diagnostics, because fallback state is derived by deriveRuntimeFallbackState instead of persisted as domain data."
386
+ }
387
+ }
388
+ ],
389
+ "validators": [
390
+ "fallback-explicit",
391
+ "fallback-diagnostic-backed",
392
+ "fallback-scope-exists",
393
+ "editorial-round-trip"
394
+ ],
395
+ "affectedPaths": [
396
+ "hostConfig.emitOperationalEvents",
397
+ "snapshot.diagnostics.items"
398
+ ],
399
+ "submissionImpact": "config-only",
400
+ "preconditions": [
401
+ "snapshot-resolved"
402
+ ],
403
+ "destructive": false,
404
+ "requiresConfirmation": false
405
+ },
406
+ {
407
+ "operationId": "presentation.configure",
408
+ "title": "Configure editorial presentation",
409
+ "scope": "skin",
410
+ "targetKind": "presentation",
411
+ "target": {
412
+ "kind": "presentation",
413
+ "resolver": "editorial-solution-presentation",
414
+ "ambiguityPolicy": "fail",
415
+ "required": false
416
+ },
417
+ "inputSchema": {
418
+ "type": "object",
419
+ "minProperties": 1,
420
+ "properties": {
421
+ "layout": {
422
+ "type": "object",
423
+ "properties": {
424
+ "orientation": {
425
+ "enum": [
426
+ "horizontal",
427
+ "vertical"
428
+ ]
429
+ },
430
+ "density": {
431
+ "enum": [
432
+ "compact",
433
+ "comfortable",
434
+ "relaxed"
435
+ ]
436
+ },
437
+ "maxWidth": {
438
+ "type": "string"
439
+ },
440
+ "shellVariant": {
441
+ "type": "string"
442
+ },
443
+ "spacing": {
444
+ "type": "object"
445
+ },
446
+ "responsive": {
447
+ "type": "object"
448
+ }
449
+ }
450
+ },
451
+ "theme": {
452
+ "type": "object"
453
+ },
454
+ "stepper": {
455
+ "type": "object",
456
+ "properties": {
457
+ "visible": {
458
+ "type": "boolean"
459
+ },
460
+ "orientation": {
461
+ "enum": [
462
+ "horizontal",
463
+ "vertical"
464
+ ]
465
+ },
466
+ "showLabels": {
467
+ "type": "boolean"
468
+ },
469
+ "showDescriptions": {
470
+ "type": "boolean"
471
+ },
472
+ "showConnectors": {
473
+ "type": "boolean"
474
+ },
475
+ "connectorStyle": {
476
+ "type": "string"
477
+ },
478
+ "allowStepJump": {
479
+ "type": "boolean"
480
+ }
481
+ }
482
+ }
483
+ }
484
+ },
485
+ "effects": [
486
+ {
487
+ "kind": "compile-domain-patch",
488
+ "handler": "editorial-presentation-configure",
489
+ "handlerContract": {
490
+ "reads": [
491
+ "solution.presentation",
492
+ "buildRuntimeLayoutCss",
493
+ "buildRuntimeCssVars",
494
+ "resolveRuntimeOrientation"
495
+ ],
496
+ "writes": [
497
+ "solution.presentation.layout",
498
+ "solution.presentation.theme",
499
+ "solution.presentation.stepper"
500
+ ],
501
+ "identityKeys": [
502
+ "solutionId",
503
+ "presentation.layout.orientation",
504
+ "presentation.stepper.orientation"
505
+ ],
506
+ "failureModes": [
507
+ "presentation-key-unsupported",
508
+ "theme-token-invalid",
509
+ "domain-data-mutation-detected",
510
+ "renderer-coverage-missing"
511
+ ],
512
+ "description": "Applies presentation-only changes under solution.presentation and rejects changes that mutate editorial domain data."
513
+ }
514
+ }
515
+ ],
516
+ "validators": [
517
+ "presentation-supported-by-runtime",
518
+ "presentation-does-not-mutate-domain-data",
519
+ "theme-tokens-valid",
520
+ "editorial-round-trip"
521
+ ],
522
+ "affectedPaths": [
523
+ "solution.presentation.layout",
524
+ "solution.presentation.theme",
525
+ "solution.presentation.stepper"
526
+ ],
527
+ "submissionImpact": "visual-only",
528
+ "preconditions": [
529
+ "solution-loaded"
530
+ ],
531
+ "destructive": false,
532
+ "requiresConfirmation": false
533
+ },
534
+ {
535
+ "operationId": "adapter.bind",
536
+ "title": "Bind data block adapter",
537
+ "scope": "dataBinding",
538
+ "targetKind": "adapter",
539
+ "target": {
540
+ "kind": "adapter",
541
+ "resolver": "editorial-data-block-adapter-registry",
542
+ "ambiguityPolicy": "fail",
543
+ "required": true
544
+ },
545
+ "inputSchema": {
546
+ "type": "object",
547
+ "required": [
548
+ "adapterId",
549
+ "dataBlockType"
550
+ ],
551
+ "properties": {
552
+ "adapterId": {
553
+ "type": "string"
554
+ },
555
+ "dataBlockType": {
556
+ "enum": [
557
+ "dataCollection"
558
+ ]
559
+ },
560
+ "componentRef": {
561
+ "type": "string"
562
+ },
563
+ "requiredInputs": {
564
+ "type": "array",
565
+ "items": {
566
+ "type": "string"
567
+ }
568
+ },
569
+ "forwardOperationalEvents": {
570
+ "type": "boolean"
571
+ },
572
+ "fallbackModeWhenMissing": {
573
+ "enum": [
574
+ "warning",
575
+ "degraded",
576
+ "blocked"
577
+ ]
578
+ }
579
+ }
580
+ },
581
+ "effects": [
582
+ {
583
+ "kind": "compile-domain-patch",
584
+ "handler": "editorial-adapter-bind",
585
+ "handlerContract": {
586
+ "reads": [
587
+ "EDITORIAL_DATA_BLOCK_ADAPTER",
588
+ "EditorialDataBlockAdapterRegistry",
589
+ "EditorialDataBlockContext",
590
+ "ComponentDocMeta"
591
+ ],
592
+ "writes": [
593
+ "hostConfig.forwardAdapterOperationalEvents",
594
+ "snapshot.diagnostics.items"
595
+ ],
596
+ "identityKeys": [
597
+ "adapterId",
598
+ "dataBlockType"
599
+ ],
600
+ "failureModes": [
601
+ "adapter-not-registered",
602
+ "adapter-does-not-support-data-block",
603
+ "adapter-component-invalid",
604
+ "fallback-policy-missing"
605
+ ],
606
+ "description": "Validates the external provider binding for a dataCollection adapter and records the host operational-event policy required when the adapter is missing or incompatible."
607
+ }
608
+ }
609
+ ],
610
+ "validators": [
611
+ "adapter-exists",
612
+ "adapter-supports-data-block",
613
+ "adapter-component-valid",
614
+ "fallback-explicit",
615
+ "editorial-round-trip"
616
+ ],
617
+ "affectedPaths": [
618
+ "hostConfig.forwardAdapterOperationalEvents",
619
+ "snapshot.diagnostics.items"
620
+ ],
621
+ "submissionImpact": "config-only",
622
+ "preconditions": [
623
+ "adapter-registry-loaded"
624
+ ],
625
+ "destructive": false,
626
+ "requiresConfirmation": false
627
+ },
628
+ {
629
+ "operationId": "dataBlock.add",
630
+ "title": "Add editorial data block",
631
+ "scope": "section",
632
+ "targetKind": "dataBlock",
633
+ "target": {
634
+ "kind": "dataBlock",
635
+ "resolver": "editorial-journey-step-block-by-id",
636
+ "ambiguityPolicy": "fail",
637
+ "required": true
638
+ },
639
+ "inputSchema": {
640
+ "type": "object",
641
+ "required": [
642
+ "journeyId",
643
+ "stepId",
644
+ "block"
645
+ ],
646
+ "properties": {
647
+ "journeyId": {
648
+ "type": "string"
649
+ },
650
+ "stepId": {
651
+ "type": "string"
652
+ },
653
+ "insert": {
654
+ "type": "object",
655
+ "properties": {
656
+ "mode": {
657
+ "enum": [
658
+ "append",
659
+ "insertBefore",
660
+ "insertAfter"
661
+ ]
662
+ },
663
+ "relativeToBlockId": {
664
+ "type": "string"
665
+ }
666
+ }
667
+ },
668
+ "block": {
669
+ "type": "object",
670
+ "required": [
671
+ "blockId",
672
+ "kind"
673
+ ],
674
+ "properties": {
675
+ "blockId": {
676
+ "type": "string"
677
+ },
678
+ "kind": {
679
+ "enum": [
680
+ "dataCollection",
681
+ "introHero",
682
+ "selectionCards",
683
+ "reviewSections",
684
+ "successPanel"
685
+ ]
686
+ },
687
+ "formBlockId": {
688
+ "type": "string"
689
+ },
690
+ "formConfigRef": {
691
+ "type": "string"
692
+ },
693
+ "title": {
694
+ "type": "string"
695
+ },
696
+ "description": {
697
+ "type": "string"
698
+ },
699
+ "visibility": {
700
+ "type": "array"
701
+ }
702
+ }
703
+ }
704
+ }
705
+ },
706
+ "effects": [
707
+ {
708
+ "kind": "compile-domain-patch",
709
+ "handler": "editorial-data-block-add",
710
+ "handlerContract": {
711
+ "reads": [
712
+ "EditorialSolutionDefinition.journeys",
713
+ "EditorialResolvedStep.blocks",
714
+ "EditorialDataBlockAdapterRegistry"
715
+ ],
716
+ "writes": [
717
+ "solution.journeys[].steps[].blocks"
718
+ ],
719
+ "identityKeys": [
720
+ "journeyId",
721
+ "stepId",
722
+ "block.blockId"
723
+ ],
724
+ "failureModes": [
725
+ "journey-not-found",
726
+ "step-not-found",
727
+ "duplicate-block-id",
728
+ "data-collection-config-unresolved",
729
+ "adapter-not-registered"
730
+ ],
731
+ "description": "Adds a canonical editorial block to a step and validates dataCollection readiness without redefining Dynamic Form config semantics."
732
+ }
733
+ }
734
+ ],
735
+ "validators": [
736
+ "data-block-id-unique",
737
+ "journey-exists",
738
+ "step-exists",
739
+ "adapter-supports-data-block",
740
+ "editorial-round-trip"
741
+ ],
742
+ "affectedPaths": [
743
+ "solution.journeys[].steps[].blocks"
744
+ ],
745
+ "submissionImpact": "config-only",
746
+ "preconditions": [
747
+ "solution-loaded"
748
+ ],
749
+ "destructive": false,
750
+ "requiresConfirmation": false
751
+ },
752
+ {
753
+ "operationId": "dataBlock.remove",
754
+ "title": "Remove editorial data block",
755
+ "scope": "section",
756
+ "targetKind": "dataBlock",
757
+ "target": {
758
+ "kind": "dataBlock",
759
+ "resolver": "editorial-journey-step-block-by-id",
760
+ "ambiguityPolicy": "fail",
761
+ "required": true
762
+ },
763
+ "inputSchema": {
764
+ "type": "object",
765
+ "required": [
766
+ "journeyId",
767
+ "stepId",
768
+ "blockId"
769
+ ],
770
+ "properties": {
771
+ "journeyId": {
772
+ "type": "string"
773
+ },
774
+ "stepId": {
775
+ "type": "string"
776
+ },
777
+ "blockId": {
778
+ "type": "string"
779
+ },
780
+ "requireNoFieldBindings": {
781
+ "type": "boolean"
782
+ }
783
+ }
784
+ },
785
+ "effects": [
786
+ {
787
+ "kind": "compile-domain-patch",
788
+ "handler": "editorial-data-block-remove",
789
+ "handlerContract": {
790
+ "reads": [
791
+ "EditorialSolutionDefinition.journeys",
792
+ "EditorialResolvedStep.blocks",
793
+ "fieldBinding"
794
+ ],
795
+ "writes": [
796
+ "solution.journeys[].steps[].blocks"
797
+ ],
798
+ "identityKeys": [
799
+ "journeyId",
800
+ "stepId",
801
+ "blockId"
802
+ ],
803
+ "failureModes": [
804
+ "journey-not-found",
805
+ "step-not-found",
806
+ "block-not-found",
807
+ "field-bindings-still-reference-block"
808
+ ],
809
+ "description": "Removes a block by stable id and rejects removal when governed field bindings still reference the block."
810
+ }
811
+ }
812
+ ],
813
+ "destructive": true,
814
+ "requiresConfirmation": true,
815
+ "validators": [
816
+ "data-block-exists",
817
+ "field-binding-target-exists",
818
+ "editorial-round-trip"
819
+ ],
820
+ "affectedPaths": [
821
+ "solution.journeys[].steps[].blocks"
822
+ ],
823
+ "submissionImpact": "config-only",
824
+ "preconditions": [
825
+ "solution-loaded",
826
+ "explicit-confirmation-provided"
827
+ ]
828
+ },
829
+ {
830
+ "operationId": "fieldBinding.set",
831
+ "title": "Set editorial field binding",
832
+ "scope": "fieldMetadataPath",
833
+ "targetKind": "fieldBinding",
834
+ "target": {
835
+ "kind": "fieldBinding",
836
+ "resolver": "editorial-data-block-field-binding",
837
+ "ambiguityPolicy": "fail",
838
+ "required": true
839
+ },
840
+ "inputSchema": {
841
+ "type": "object",
842
+ "required": [
843
+ "blockId",
844
+ "fieldName",
845
+ "contextPath"
846
+ ],
847
+ "properties": {
848
+ "blockId": {
849
+ "type": "string"
850
+ },
851
+ "fieldName": {
852
+ "type": "string"
853
+ },
854
+ "contextPath": {
855
+ "type": "string"
856
+ },
857
+ "mode": {
858
+ "enum": [
859
+ "read",
860
+ "write",
861
+ "readWrite"
862
+ ]
863
+ },
864
+ "valueMode": {
865
+ "enum": [
866
+ "merge",
867
+ "replace"
868
+ ]
869
+ },
870
+ "delegateFieldMetadataTo": {
871
+ "enum": [
872
+ "praxis-metadata-editor"
873
+ ]
874
+ }
875
+ }
876
+ },
877
+ "effects": [
878
+ {
879
+ "kind": "compile-domain-patch",
880
+ "handler": "editorial-field-binding-set",
881
+ "handlerContract": {
882
+ "reads": [
883
+ "EditorialDataCollectionBlock",
884
+ "resolvedFormConfig.fieldMetadata",
885
+ "runtimeContext.formData",
886
+ "PRAXIS_METADATA_EDITOR_AUTHORING_MANIFEST"
887
+ ],
888
+ "writes": [
889
+ "runtimeContext.formData"
890
+ ],
891
+ "identityKeys": [
892
+ "blockId",
893
+ "fieldName",
894
+ "contextPath"
895
+ ],
896
+ "failureModes": [
897
+ "block-not-found",
898
+ "field-not-found",
899
+ "context-path-invalid",
900
+ "field-metadata-delegation-required",
901
+ "domain-data-mutation-detected"
902
+ ],
903
+ "description": "Sets the governed runtimeContext.formData path used by dataCollection adapters and delegates FieldMetadata shape changes to the metadata-editor manifest."
904
+ }
905
+ }
906
+ ],
907
+ "validators": [
908
+ "field-binding-target-exists",
909
+ "field-binding-path-valid",
910
+ "delegates-field-metadata",
911
+ "editorial-round-trip"
912
+ ],
913
+ "affectedPaths": [
914
+ "runtimeContext.formData"
915
+ ],
916
+ "submissionImpact": "affects-schema-backed-data",
917
+ "preconditions": [
918
+ "data-block-resolved",
919
+ "field-metadata-loaded"
920
+ ],
921
+ "destructive": false,
922
+ "requiresConfirmation": false
923
+ }
924
+ ],
925
+ "validators": [
926
+ {
927
+ "validatorId": "snapshot-shape-canonical",
928
+ "level": "error",
929
+ "code": "EDITORIAL_SNAPSHOT_SHAPE_CANONICAL",
930
+ "description": "Resolved snapshot must remain compatible with EditorialRuntimeSnapshot."
931
+ },
932
+ {
933
+ "validatorId": "journey-exists",
934
+ "level": "error",
935
+ "code": "EDITORIAL_JOURNEY_EXISTS",
936
+ "description": "Target journey must exist in the editorial solution."
937
+ },
938
+ {
939
+ "validatorId": "step-exists",
940
+ "level": "error",
941
+ "code": "EDITORIAL_STEP_EXISTS",
942
+ "description": "Target step must exist in the selected journey."
943
+ },
944
+ {
945
+ "validatorId": "diagnostics-preserved",
946
+ "level": "error",
947
+ "code": "EDITORIAL_DIAGNOSTICS_PRESERVED",
948
+ "description": "Patch compilation must not drop runtime diagnostics."
949
+ },
950
+ {
951
+ "validatorId": "fallback-explicit",
952
+ "level": "error",
953
+ "code": "EDITORIAL_FALLBACK_EXPLICIT",
954
+ "description": "Fallback behavior must be explicit instead of implied by missing adapter or hidden diagnostics."
955
+ },
956
+ {
957
+ "validatorId": "fallback-diagnostic-backed",
958
+ "level": "error",
959
+ "code": "EDITORIAL_FALLBACK_DIAGNOSTIC_BACKED",
960
+ "description": "Warning, degraded and blocked fallback states must be backed by diagnostics."
961
+ },
962
+ {
963
+ "validatorId": "fallback-scope-exists",
964
+ "level": "error",
965
+ "code": "EDITORIAL_FALLBACK_SCOPE_EXISTS",
966
+ "description": "Fallback scope must resolve to an existing journey, step or block."
967
+ },
968
+ {
969
+ "validatorId": "presentation-supported-by-runtime",
970
+ "level": "error",
971
+ "code": "EDITORIAL_PRESENTATION_SUPPORTED",
972
+ "description": "Presentation keys must be supported by the runtime or intentionally diagnosed as unsupported."
973
+ },
974
+ {
975
+ "validatorId": "presentation-does-not-mutate-domain-data",
976
+ "level": "error",
977
+ "code": "EDITORIAL_PRESENTATION_DOMAIN_SAFE",
978
+ "description": "Presentation changes must not mutate solution journeys, blocks, field metadata or runtime context data."
979
+ },
980
+ {
981
+ "validatorId": "theme-tokens-valid",
982
+ "level": "error",
983
+ "code": "EDITORIAL_THEME_TOKENS_VALID",
984
+ "description": "Theme tokens must be valid runtime CSS variable inputs."
985
+ },
986
+ {
987
+ "validatorId": "adapter-exists",
988
+ "level": "error",
989
+ "code": "EDITORIAL_ADAPTER_EXISTS",
990
+ "description": "Requested adapter must exist in EditorialDataBlockAdapterRegistry."
991
+ },
992
+ {
993
+ "validatorId": "adapter-supports-data-block",
994
+ "level": "error",
995
+ "code": "EDITORIAL_ADAPTER_SUPPORTS_DATA_BLOCK",
996
+ "description": "Requested adapter must support the target data block context."
997
+ },
998
+ {
999
+ "validatorId": "adapter-component-valid",
1000
+ "level": "error",
1001
+ "code": "EDITORIAL_ADAPTER_COMPONENT_VALID",
1002
+ "description": "Adapter component must expose the inputs required by the adapter contract."
1003
+ },
1004
+ {
1005
+ "validatorId": "data-block-id-unique",
1006
+ "level": "error",
1007
+ "code": "EDITORIAL_DATA_BLOCK_ID_UNIQUE",
1008
+ "description": "Block ids must be unique within the resolved editorial step."
1009
+ },
1010
+ {
1011
+ "validatorId": "data-block-exists",
1012
+ "level": "error",
1013
+ "code": "EDITORIAL_DATA_BLOCK_EXISTS",
1014
+ "description": "Target data block must exist before destructive or binding operations."
1015
+ },
1016
+ {
1017
+ "validatorId": "field-binding-target-exists",
1018
+ "level": "error",
1019
+ "code": "EDITORIAL_FIELD_BINDING_TARGET_EXISTS",
1020
+ "description": "Field binding must target an existing dataCollection block and field."
1021
+ },
1022
+ {
1023
+ "validatorId": "field-binding-path-valid",
1024
+ "level": "error",
1025
+ "code": "EDITORIAL_FIELD_BINDING_PATH_VALID",
1026
+ "description": "Field binding context path must be deterministic and inside governed runtime context data."
1027
+ },
1028
+ {
1029
+ "validatorId": "delegates-field-metadata",
1030
+ "level": "error",
1031
+ "code": "EDITORIAL_DELEGATES_FIELD_METADATA",
1032
+ "description": "FieldMetadata shape changes must be delegated to the metadata-editor manifest instead of duplicated here."
1033
+ },
1034
+ {
1035
+ "validatorId": "editorial-round-trip",
1036
+ "level": "error",
1037
+ "code": "EDITORIAL_ROUND_TRIP",
1038
+ "description": "Open, edit, apply/save, reopen and runtime consume must preserve the editorial document."
1039
+ }
1040
+ ],
1041
+ "roundTripRequirements": [
1042
+ "EditorialRuntimeInput is the package-level authoring document; solution, instance and runtimeContext must resolve into EditorialRuntimeSnapshot without drift.",
1043
+ "Fallback behavior must be explicit and backed by diagnostics; missing adapters cannot be hidden as successful rendering.",
1044
+ "Presentation changes are constrained to solution.presentation and must not mutate journeys, blocks, FormConfig, FieldMetadata or runtimeContext domain data.",
1045
+ "dataCollection blocks require an adapter that exists and supports the requested context, while Dynamic Form config semantics remain owned by @praxisui/dynamic-form.",
1046
+ "FieldMetadata authoring is delegated to praxis-metadata-editor and dynamic-fields discovery; this manifest only governs editorial binding and orchestration.",
1047
+ "Destructive block removal requires confirmation and must reject references from existing field bindings."
1048
+ ],
1049
+ "examples": [
1050
+ {
1051
+ "id": "select-journey",
1052
+ "request": "Set the onboarding journey as the active editorial path.",
1053
+ "operationId": "snapshot.set",
1054
+ "params": {
1055
+ "solutionId": "customer-onboarding",
1056
+ "journeyId": "onboarding"
1057
+ },
1058
+ "isPositive": true
1059
+ },
1060
+ {
1061
+ "id": "merge-runtime-context",
1062
+ "request": "Prefill the runtime context with the selected plan.",
1063
+ "operationId": "snapshot.set",
1064
+ "params": {
1065
+ "solutionId": "plan-signup",
1066
+ "runtimeContextPatch": {
1067
+ "selectedPlan": "pro"
1068
+ }
1069
+ },
1070
+ "isPositive": true
1071
+ },
1072
+ {
1073
+ "id": "configure-blocked-fallback",
1074
+ "request": "Block progression when the required dataCollection adapter is missing.",
1075
+ "operationId": "fallback.configure",
1076
+ "params": {
1077
+ "mode": "blocked",
1078
+ "diagnosticCode": "data-collection-adapter-missing",
1079
+ "progressionBlocked": true
1080
+ },
1081
+ "isPositive": true
1082
+ },
1083
+ {
1084
+ "id": "configure-stepper",
1085
+ "request": "Use a vertical compact stepper with hidden descriptions.",
1086
+ "operationId": "presentation.configure",
1087
+ "params": {
1088
+ "layout": {
1089
+ "orientation": "vertical",
1090
+ "density": "compact"
1091
+ },
1092
+ "stepper": {
1093
+ "showDescriptions": false
1094
+ }
1095
+ },
1096
+ "isPositive": true
1097
+ },
1098
+ {
1099
+ "id": "bind-dynamic-form-adapter",
1100
+ "request": "Bind the dynamic-form adapter for dataCollection blocks.",
1101
+ "operationId": "adapter.bind",
1102
+ "params": {
1103
+ "adapterId": "dynamic-form",
1104
+ "dataBlockType": "dataCollection",
1105
+ "requiredInputs": [
1106
+ "config",
1107
+ "formId",
1108
+ "editorialContext"
1109
+ ],
1110
+ "fallbackModeWhenMissing": "blocked"
1111
+ },
1112
+ "isPositive": true
1113
+ },
1114
+ {
1115
+ "id": "add-data-block",
1116
+ "request": "Add a consent form block to the review step.",
1117
+ "operationId": "dataBlock.add",
1118
+ "params": {
1119
+ "journeyId": "privacy",
1120
+ "stepId": "review",
1121
+ "block": {
1122
+ "blockId": "consent-form",
1123
+ "kind": "dataCollection",
1124
+ "formBlockId": "consent-form"
1125
+ }
1126
+ },
1127
+ "isPositive": true
1128
+ },
1129
+ {
1130
+ "id": "remove-block",
1131
+ "request": "Remove the unused legacy consent block.",
1132
+ "operationId": "dataBlock.remove",
1133
+ "params": {
1134
+ "journeyId": "privacy",
1135
+ "stepId": "review",
1136
+ "blockId": "legacy-consent",
1137
+ "requireNoFieldBindings": true
1138
+ },
1139
+ "isPositive": true
1140
+ },
1141
+ {
1142
+ "id": "set-field-binding",
1143
+ "request": "Bind the email field into runtimeContext.formData.email.",
1144
+ "operationId": "fieldBinding.set",
1145
+ "params": {
1146
+ "blockId": "contact-form",
1147
+ "fieldName": "email",
1148
+ "contextPath": "formData.email",
1149
+ "mode": "readWrite",
1150
+ "delegateFieldMetadataTo": "praxis-metadata-editor"
1151
+ },
1152
+ "isPositive": true
1153
+ },
1154
+ {
1155
+ "id": "reject-presentation-domain-mutation",
1156
+ "request": "Change presentation and also rewrite the collected email value.",
1157
+ "operationId": "presentation.configure",
1158
+ "params": {
1159
+ "layout": {
1160
+ "density": "relaxed"
1161
+ },
1162
+ "runtimeContextPatch": {
1163
+ "formData": {
1164
+ "email": "changed@example.com"
1165
+ }
1166
+ }
1167
+ },
1168
+ "isPositive": false
1169
+ },
1170
+ {
1171
+ "id": "reject-missing-adapter",
1172
+ "request": "Render a dataCollection block with an adapter that is not registered.",
1173
+ "operationId": "adapter.bind",
1174
+ "params": {
1175
+ "adapterId": "unknown-form-engine",
1176
+ "dataBlockType": "dataCollection"
1177
+ },
1178
+ "isPositive": false
1179
+ },
1180
+ {
1181
+ "id": "reject-duplicate-block",
1182
+ "request": "Add another block using the existing consent-form id.",
1183
+ "operationId": "dataBlock.add",
1184
+ "params": {
1185
+ "journeyId": "privacy",
1186
+ "stepId": "review",
1187
+ "block": {
1188
+ "blockId": "consent-form",
1189
+ "kind": "dataCollection",
1190
+ "formBlockId": "consent-form-copy"
1191
+ }
1192
+ },
1193
+ "isPositive": false
1194
+ },
1195
+ {
1196
+ "id": "reject-field-metadata-duplication",
1197
+ "request": "Change the control type inside editorial forms instead of metadata editor.",
1198
+ "operationId": "fieldBinding.set",
1199
+ "params": {
1200
+ "blockId": "contact-form",
1201
+ "fieldName": "email",
1202
+ "contextPath": "formData.email",
1203
+ "controlType": "select"
1204
+ },
1205
+ "isPositive": false
1206
+ }
1207
+ ]
1208
+ },
1209
+ "chunks": [
1210
+ {
1211
+ "chunkIndex": 0,
1212
+ "chunkKind": "summary",
1213
+ "content": "Component ID: praxis-editorial-forms\nSelector: praxis-editorial-forms\nFriendly Name: Praxis Editorial Forms\nDescription: Authoring-only registry entry for praxis-editorial-forms.\nCategory: form\nLib/Package: @praxisui/editorial-forms\nTags: authoring, manifest, praxis-editorial-forms\nInputs:\n - solution (EditorialSolutionDefinition | null)\n - instance (EditorialTemplateInstance | null)\n - runtimeContext (Record<string, unknown> | null)\n - hostConfig (EditorialRuntimeHostConfig | null)\n - snapshotChange (EditorialRuntimeSnapshot)\n - fallbackChange (EditorialRuntimeFallbackState)\n - operationalEvent (EditorialRuntimeOperationalEvent)\n",
1214
+ "sourcePointer": "praxis-ui-angular/projects/praxis-editorial-forms/src/lib/ai/praxis-editorial-forms-authoring-manifest.ts",
1215
+ "contentHash": "ff168ef6a9d1887df1bd99d045b9eee5a6dd678868248d4d0be99e6f32923dcb",
1216
+ "sourceKind": "component_definition",
1217
+ "sourceId": "praxis-editorial-forms",
1218
+ "corpusVersion": "1.0.0"
1219
+ },
1220
+ {
1221
+ "chunkIndex": 1,
1222
+ "chunkKind": "authoring_manifest",
1223
+ "content": "{\n \"schemaVersion\": \"1.0.0\",\n \"componentId\": \"praxis-editorial-forms\",\n \"ownerPackage\": \"@praxisui/editorial-forms\",\n \"configSchemaId\": \"EditorialRuntimeInput\",\n \"manifestVersion\": \"1.0.0\",\n \"runtimeInputs\": [\n {\n \"name\": \"solution\",\n \"type\": \"EditorialSolutionDefinition | null\",\n \"description\": \"Canonical editorial solution definition with journeys, steps, blocks and presentation.\"\n },\n {\n \"name\": \"instance\",\n \"type\": \"EditorialTemplateInstance | null\",\n \"description\": \"Runtime instance with selected journey, context, overrides and compatibility form configs.\"\n },\n {\n \"name\": \"runtimeContext\",\n \"type\": \"Record<string, unknown> | null\",\n \"description\": \"Host-provided immutable context merged into the resolved editorial snapshot.\"\n },\n {\n \"name\": \"hostConfig\",\n \"type\": \"EditorialRuntimeHostConfig | null\",\n \"description\": \"Host controls for operational event and adapter event forwarding.\"\n },\n {\n \"name\": \"snapshotChange\",\n \"type\": \"EditorialRuntimeSnapshot\",\n \"description\": \"Resolved runtime snapshot emitted to hosts for product UX and audit derivation.\"\n },\n {\n \"name\": \"fallbackChange\",\n \"type\": \"EditorialRuntimeFallbackState\",\n \"description\": \"Operational fallback state emitted when diagnostics affect runtime health.\"\n },\n {\n \"name\": \"operationalEvent\",\n \"type\": \"EditorialRuntimeOperationalEvent\",\n \"description\": \"Technical diagnostics event stream for logs, monitoring and runbooks.\"\n }\n ],\n \"editableTargets\": [\n {\n \"kind\": \"snapshot\",\n \"resolver\": \"editorial-runtime-snapshot\",\n \"description\": \"Resolved editorial state from solution, instance and runtime context.\"\n },\n {\n \"kind\": \"fallback\",\n \"resolver\": \"editorial-runtime-fallback-state\",\n \"description\": \"Explicit operational fallback state derived from runtime diagnostics.\"\n },\n {\n \"kind\": \"presentation\",\n \"resolver\": \"editorial-solution-presentation\",\n \"description\": \"Editorial presentation contract under solution.presentation.\"\n },\n {\n \"kind\": \"adapter\",\n \"resolver\": \"editorial-data-block-adapter-registry\",\n \"description\": \"Optional dataCollection adapter binding and compatibility requirements.\"\n },\n {\n \"kind\": \"dataBlock\",\n \"resolver\": \"editorial-journey-step-block-by-id\",\n \"description\": \"Editorial blocks inside journey steps, including dataCollection and presentational blocks.\"\n },\n {\n \"kind\": \"fieldBinding\",\n \"resolver\": \"editorial-data-block-field-binding\",\n \"description\": \"Field-to-runtime-context binding for dataCollection blocks without redefining FieldMetadata.\"\n }\n ],\n \"operations\": [\n {\n \"operationId\": \"snapshot.set\",\n \"title\": \"Set editorial snapshot inputs\",\n \"scope\": \"global\",\n \"targetKind\": \"snapshot\",\n \"target\": {\n \"kind\": \"snapshot\",\n \"resolver\": \"editorial-runtime-snapshot\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"solutionId\"\n ],\n \"properties\": {\n \"solutionId\": {\n \"type\": \"string\"\n },\n \"instanceId\": {\n \"type\": \"string\"\n },\n \"journeyId\": {\n \"type\": \"string\"\n },\n \"stepId\": {\n \"type\": \"string\"\n },\n \"runtimeContextPatch\": {\n \"type\": \"object\"\n },\n \"instanceContextPatch\": {\n \"type\": \"object\"\n },\n \"preserveDiagnostics\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"editorial-snapshot-set\",\n \"handlerContract\": {\n \"reads\": [\n \"EditorialSolutionDefinition\",\n \"EditorialTemplateInstance\",\n \"runtimeContext\",\n \"resolveEditorialRuntimeSnapshot\"\n ],\n \"writes\": [\n \"solution.solutionId\",\n \"instance.instanceId\",\n \"instance.context\",\n \"runtimeContext\"\n ],\n \"identityKeys\": [\n \"solutionId\",\n \"instanceId\",\n \"journeyId\"\n ],\n \"failureModes\": [\n \"solution-not-found\",\n \"journey-not-found\",\n \"step-not-found\",\n \"snapshot-shape-invalid\",\n \"diagnostics-lost\"\n ],\n \"description\": \"Compiles a deterministic patch to editorial runtime inputs, validates the requested journey/step against the resolved snapshot and requires diagnostics to be preserved.\"\n }\n }\n ],\n \"validators\": [\n \"snapshot-shape-canonical\",\n \"journey-exists\",\n \"step-exists\",\n \"diagnostics-preserved\",\n \"editorial-round-trip\"\n ],\n \"affectedPaths\": [\n \"solution.solutionId\",\n \"instance.instanceId\",\n \"instance.context\",\n \"runtimeContext\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"editorial-runtime-inputs-loaded\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n },\n {\n \"operationId\": \"fallback.configure\",\n \"title\": \"Configure explicit fallback behavior\",\n \"scope\": \"meta\",\n \"targetKind\": \"fallback\",\n \"target\": {\n \"kind\": \"fallback\",\n \"resolver\": \"editorial-runtime-fallback-state\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"mode\"\n ],\n \"properties\": {\n \"mode\": {\n \"enum\": [\n \"normal\",\n \"warning\",\n \"degraded\",\n \"blocked\"\n ]\n },\n \"diagnosticCode\": {\n \"type\": \"string\"\n },\n \"progressionBlocked\": {\n \"type\": \"boolean\"\n },\n \"requiresEngineAttention\": {\n \"type\": \"boolean\"\n },\n \"scope\": {\n \"type\": \"object\",\n \"properties\": {\n \"journeyId\": {\n \"type\": \"string\"\n },\n \"stepId\": {\n \"type\": \"string\"\n },\n \"blockId\": {\n \"type\": \"string\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"editorial-fallback-configure\",\n \"handlerContract\": {\n \"reads\": [\n \"EditorialRuntimeDiagnostics\",\n \"deriveRuntimeFallbackState\",\n \"EditorialRuntimeFallbackScope\"\n ],\n \"writes\": [\n \"hostConfig.emitOperationalEvents\",\n \"snapshot.diagnostics.items\"\n ],\n \"identityKeys\": [\n \"mode\",\n \"diagnosticCode\",\n \"scope.journeyId\",\n \"scope.stepId\"\n ],\n \"failureModes\": [\n \"fallback-mode-invalid\",\n \"blocking-diagnostic-missing\",\n \"scope-not-found\",\n \"implicit-degradation-not-allowed\"\n ],\n \"description\": \"Requires fallback policy to be explicit and tied to snapshot diagnostics, because fallback state is derived by deriveRuntimeFallbackState instead of persisted as domain data.\"\n }\n }\n ],\n \"validators\": [\n \"fallback-explicit\",\n \"fallback-diagnostic-backed\",\n \"fallback-scope-exists\",\n \"editorial-round-trip\"\n ],\n \"affectedPaths\": [\n \"hostConfig.emitOperationalEvents\",\n \"snapshot.diagnostics.items\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"snapshot-resolved\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n },\n {\n \"operationId\": \"presentation.configure\",\n \"title\": \"Configure editorial presentation\",\n \"scope\": \"skin\",\n \"targetKind\": \"presentation\",\n \"target\": {\n \"kind\": \"presentation\",\n \"resolver\": \"editorial-solution-presentation\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"layout\": {\n \"type\": \"object\",\n \"properties\": {\n \"orientation\": {\n \"enum\": [\n \"horizontal\",\n \"vertical\"\n ]\n },\n \"density\": {\n \"enum\": [\n \"compact\",\n \"comfortable\",\n \"relaxed\"\n ]\n },\n \"maxWidth\": {\n \"type\": \"string\"\n },\n \"shellVariant\": {\n \"type\": \"string\"\n },\n \"spacing\": {\n \"type\": \"object\"\n },\n \"responsive\": {\n \"type\": \"object\"\n }\n }\n },\n \"theme\": {\n \"type\": \"object\"\n },\n \"stepper\": {\n \"type\": \"object\",\n \"properties\": {\n \"visible\": {\n \"type\": \"boolean\"\n },\n \"orientation\": {\n \"enum\": [\n \"horizontal\",\n \"vertical\"\n ]\n },\n \"showLabels\": {\n \"type\": \"boolean\"\n },\n \"showDescriptions\": {\n \"type\": \"boolean\"\n },\n \"showConnectors\": {\n \"type\": \"boolean\"\n },\n \"connectorStyle\": {\n \"type\": \"string\"\n },\n \"allowStepJump\": {\n \"type\": \"boolean\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"editorial-presentation-configure\",\n \"handlerContract\": {\n \"reads\": [\n \"solution.presentation\",\n \"buildRuntimeLayoutCss\",\n \"buildRuntimeCssVars\",\n \"resolveRuntimeOrientation\"\n ],\n \"writes\": [\n \"solution.presentation.layout\",\n \"solution.presentation.theme\",\n \"solution.presentation.stepper\"\n ],\n \"identityKeys\": [\n \"solutionId\",\n \"presentation.layout.orientation\",\n \"presentation.stepper.orientation\"\n ],\n \"failureModes\": [\n \"presentation-key-unsupported\",\n \"theme-token-invalid\",\n \"domain-data-mutation-detected\",\n \"renderer-coverage-missing\"\n ],\n \"description\": \"Applies presentation-only changes under solution.presentation and rejects changes that mutate editorial domain data.\"\n }\n }\n ],\n \"validators\": [\n \"presentation-supported-by-runtime\",\n \"presentation-does-not-mutate-domain-data\",\n \"theme-tokens-valid\",\n \"editorial-round-trip\"\n ],\n \"affectedPaths\": [\n \"solution.presentation.layout\",\n \"solution.presentation.theme\",\n \"solution.presentation.stepper\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"solution-loaded\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n },\n {\n \"operationId\": \"adapter.bind\",\n \"title\": \"Bind data block adapter\",\n \"scope\": \"dataBinding\",\n \"targetKind\": \"adapter\",\n \"target\": {\n \"kind\": \"adapter\",\n \"resolver\": \"editorial-data-block-adapter-registry\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"adapterId\",\n \"dataBlockType\"\n ],\n \"properties\": {\n \"adapterId\": {\n \"type\": \"string\"\n },\n \"dataBlockType\": {\n \"enum\": [\n \"dataCollection\"\n ]\n },\n \"componentRef\": {\n \"type\": \"string\"\n },\n \"requiredInputs\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"forwardOperationalEvents\": {\n \"type\": \"boolean\"\n },\n \"fallbackModeWhenMissing\": {\n \"enum\": [\n \"warning\",\n \"degraded\",\n \"blocked\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"editorial-adapter-bind\",\n \"handlerContract\": {\n \"reads\": [\n \"EDITORIAL_DATA_BLOCK_ADAPTER\",\n \"EditorialDataBlockAdapterRegistry\",\n \"EditorialDataBlockContext\",\n \"ComponentDocMeta\"\n ],\n \"writes\": [\n \"hostConfig.forwardAdapterOperationalEvents\",\n \"snapshot.diagnostics.items\"\n ],\n \"identityKeys\": [\n \"adapterId\",\n \"dataBlockType\"\n ],\n \"failureModes\": [\n \"adapter-not-registered\",\n \"adapter-does-not-support-data-block\",\n \"adapter-component-invalid\",\n \"fallback-policy-missing\"\n ],\n \"description\": \"Validates the external provider binding for a dataCollection adapter and records the host operational-event policy required when the adapter is missing or incompatible.\"\n }\n }\n ],\n \"validators\": [\n \"adapter-exists\",\n \"adapter-supports-data-block\",\n \"adapter-component-valid\",\n \"fallback-explicit\",\n \"editorial-round-trip\"\n ],\n \"affectedPaths\": [\n \"hostConfig.forwardAdapterOperationalEvents\",\n \"snapshot.diagnostics.items\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"adapter-registry-loaded\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n },\n {\n \"operationId\": \"dataBlock.add\",\n \"title\": \"Add editorial data block\",\n \"scope\": \"section\",\n \"targetKind\": \"dataBlock\",\n \"target\": {\n \"kind\": \"dataBlock\",\n \"resolver\": \"editorial-journey-step-block-by-id\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"journeyId\",\n \"stepId\",\n \"block\"\n ],\n \"properties\": {\n \"journeyId\": {\n \"type\": \"string\"\n },\n \"stepId\": {\n \"type\": \"string\"\n },\n \"insert\": {\n \"type\": \"object\",\n \"properties\": {\n \"mode\": {\n \"enum\": [\n \"append\",\n \"insertBefore\",\n \"insertAfter\"\n ]\n },\n \"relativeToBlockId\": {\n \"type\": \"string\"\n }\n }\n },\n \"block\": {\n \"type\": \"object\",\n \"required\": [\n \"blockId\",\n \"kind\"\n ],\n \"properties\": {\n \"blockId\": {\n \"type\": \"string\"\n },\n \"kind\": {\n \"enum\": [\n \"dataCollection\",\n \"introHero\",\n \"selectionCards\",\n \"reviewSections\",\n \"successPanel\"\n ]\n },\n \"formBlockId\": {\n \"type\": \"string\"\n },\n \"formConfigRef\": {\n \"type\": \"string\"\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"visibility\": {\n \"type\": \"array\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"editorial-data-block-add\",\n \"handlerContract\": {\n \"reads\": [\n \"EditorialSolutionDefinition.journeys\",\n \"EditorialResolvedStep.blocks\",\n \"EditorialDataBlockAdapterRegistry\"\n ],\n \"writes\": [\n \"solution.journeys[].steps[].blocks\"\n ],\n \"identityKeys\": [\n \"journeyId\",\n \"stepId\",\n \"block.blockId\"\n ],\n \"failureModes\": [\n \"journey-not-found\",\n \"step-not-found\",\n \"duplicate-block-id\",\n \"data-collection-config-unresolved\",\n \"adapter-not-registered\"\n ],\n \"description\": \"Adds a canonical editorial block to a step and validates dataCollection readiness without redefining Dynamic Form config semantics.\"\n }\n }\n ],\n \"validators\": [\n \"data-block-id-unique\",\n \"journey-exists\",\n \"step-exists\",\n \"adapter-supports-data-block\",\n \"editorial-round-trip\"\n ],\n \"affectedPaths\": [\n \"solution.journeys[].steps[].blocks\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"solution-loaded\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n },\n {\n \"operationId\": \"dataBlock.remove\",\n \"title\": \"Remove editorial data block\",\n \"scope\": \"section\",\n \"targetKind\": \"dataBlock\",\n \"target\": {\n \"kind\": \"dataBlock\",\n \"resolver\": \"editorial-journey-step-block-by-id\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"journeyId\",\n \"stepId\",\n \"blockId\"\n ],\n \"properties\": {\n \"journeyId\": {\n \"type\": \"string\"\n },\n \"stepId\": {\n \"type\": \"string\"\n },\n \"blockId\": {\n \"type\": \"string\"\n },\n \"requireNoFieldBindings\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"editorial-data-block-remove\",\n \"handlerContract\": {\n \"reads\": [\n \"EditorialSolutionDefinition.journeys\",\n \"EditorialResolvedStep.blocks\",\n \"fieldBinding\"\n ],\n \"writes\": [\n \"solution.journeys[].steps[].blocks\"\n ],\n \"identityKeys\": [\n \"journeyId\",\n \"stepId\",\n \"blockId\"\n ],\n \"failureModes\": [\n \"journey-not-found\",\n \"step-not-found\",\n \"block-not-found\",\n \"field-bindings-still-reference-block\"\n ],\n \"description\": \"Removes a block by stable id and rejects removal when governed field bindings still reference the block.\"\n }\n }\n ],\n \"destructive\": true,\n \"requiresConfirmation\": true,\n \"validators\": [\n \"data-block-exists\",\n \"field-binding-target-exists\",\n \"editorial-round-trip\"\n ],\n \"affectedPaths\": [\n \"solution.journeys[].steps[].blocks\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"solution-loaded\",\n \"explicit-confirmation-provided\"\n ]\n },\n {\n \"operationId\": \"fieldBinding.set\",\n \"title\": \"Set editorial field binding\",\n \"scope\": \"fieldMetadataPath\",\n \"targetKind\": \"fieldBinding\",\n \"target\": {\n \"kind\": \"fieldBinding\",\n \"resolver\": \"editorial-data-block-field-binding\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"blockId\",\n \"fieldName\",\n \"contextPath\"\n ],\n \"properties\": {\n \"blockId\": {\n \"type\": \"string\"\n },\n \"fieldName\": {\n \"type\": \"string\"\n },\n \"contextPath\": {\n \"type\": \"string\"\n },\n \"mode\": {\n \"enum\": [\n \"read\",\n \"write\",\n \"readWrite\"\n ]\n },\n \"valueMode\": {\n \"enum\": [\n \"merge\",\n \"replace\"\n ]\n },\n \"delegateFieldMetadataTo\": {\n \"enum\": [\n \"praxis-metadata-editor\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"editorial-field-binding-set\",\n \"handlerContract\": {\n \"reads\": [\n \"EditorialDataCollectionBlock\",\n \"resolvedFormConfig.fieldMetadata\",\n \"runtimeContext.formData\",\n \"PRAXIS_METADATA_EDITOR_AUTHORING_MANIFEST\"\n ],\n \"writes\": [\n \"runtimeContext.formData\"\n ],\n \"identityKeys\": [\n \"blockId\",\n \"fieldName\",\n \"contextPath\"\n ],\n \"failureModes\": [\n \"block-not-found\",\n \"field-not-found\",\n \"context-path-invalid\",\n \"field-metadata-delegation-required\",\n \"domain-data-mutation-detected\"\n ],\n \"description\": \"Sets the governed runtimeContext.formData path used by dataCollection adapters and delegates FieldMetadata shape changes to the metadata-editor manifest.\"\n }\n }\n ],\n \"validators\": [\n \"field-binding-target-exists\",\n \"field-binding-path-valid\",\n \"delegates-field-metadata\",\n \"editorial-round-trip\"\n ],\n \"affectedPaths\": [\n \"runtimeContext.formData\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"data-block-resolved\",\n \"field-metadata-loaded\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n }\n ],\n \"validators\": [\n {\n \"validatorId\": \"snapshot-shape-canonical\",\n \"level\": \"error\",\n \"code\": \"EDITORIAL_SNAPSHOT_SHAPE_CANONICAL\",\n \"description\": \"Resolved snapshot must remain compatible with EditorialRuntimeSnapshot.\"\n },\n {\n \"validatorId\": \"journey-exists\",\n \"level\": \"error\",\n \"code\": \"EDITORIAL_JOURNEY_EXISTS\",\n \"description\": \"Target journey must exist in the editorial solution.\"\n },\n {\n \"validatorId\": \"step-exists\",\n \"level\": \"error\",\n \"code\": \"EDITORIAL_STEP_EXISTS\",\n \"description\": \"Target step must exist in the selected journey.\"\n },\n {\n \"validatorId\": \"diagnostics-preserved\",\n \"level\": \"error\",\n \"code\": \"EDITORIAL_DIAGNOSTICS_PRESERVED\",\n \"description\": \"Patch compilation must not drop runtime diagnostics.\"\n },\n {\n \"validatorId\": \"fallback-explicit\",\n \"level\": \"error\",\n \"code\": \"EDITORIAL_FALLBACK_EXPLICIT\",\n \"description\": \"Fallback behavior must be explicit instead of implied by missing adapter or hidden diagnostics.\"\n },\n {\n \"validatorId\": \"fallback-diagnostic-backed\",\n \"level\": \"error\",\n \"code\": \"EDITORIAL_FALLBACK_DIAGNOSTIC_BACKED\",\n \"description\": \"Warning, degraded and blocked fallback states must be backed by diagnostics.\"\n },\n {\n \"validatorId\": \"fallback-scope-exists\",\n \"level\": \"error\",\n \"code\": \"EDITORIAL_FALLBACK_SCOPE_EXISTS\",\n \"description\": \"Fallback scope must resolve to an existing journey, step or block.\"\n },\n {\n \"validatorId\": \"presentation-supported-by-runtime\",\n \"level\": \"error\",\n \"code\": \"EDITORIAL_PRESENTATION_SUPPORTED\",\n \"description\": \"Presentation keys must be supported by the runtime or intentionally diagnosed as unsupported.\"\n },\n {\n \"validatorId\": \"presentation-does-not-mutate-domain-data\",\n \"level\": \"error\",\n \"code\": \"EDITORIAL_PRESENTATION_DOMAIN_SAFE\",\n \"description\": \"Presentation changes must not mutate solution journeys, blocks, field metadata or runtime context data.\"\n },\n {\n \"validatorId\": \"theme-tokens-valid\",\n \"level\": \"error\",\n \"code\": \"EDITORIAL_THEME_TOKENS_VALID\",\n \"description\": \"Theme tokens must be valid runtime CSS variable inputs.\"\n },\n {\n \"validatorId\": \"adapter-exists\",\n \"level\": \"error\",\n \"code\": \"EDITORIAL_ADAPTER_EXISTS\",\n \"description\": \"Requested adapter must exist in EditorialDataBlockAdapterRegistry.\"\n },\n {\n \"validatorId\": \"adapter-supports-data-block\",\n \"level\": \"error\",\n \"code\": \"EDITORIAL_ADAPTER_SUPPORTS_DATA_BLOCK\",\n \"description\": \"Requested adapter must support the target data block context.\"\n },\n {\n \"validatorId\": \"adapter-component-valid\",\n \"level\": \"error\",\n \"code\": \"EDITORIAL_ADAPTER_COMPONENT_VALID\",\n \"description\": \"Adapter component must expose the inputs required by the adapter contract.\"\n },\n {\n \"validatorId\": \"data-block-id-unique\",\n \"level\": \"error\",\n \"code\": \"EDITORIAL_DATA_BLOCK_ID_UNIQUE\",\n \"description\": \"Block ids must be unique within the resolved editorial step.\"\n },\n {\n \"validatorId\": \"data-block-exists\",\n \"level\": \"error\",\n \"code\": \"EDITORIAL_DATA_BLOCK_EXISTS\",\n \"description\": \"Target data block must exist before destructive or binding operations.\"\n },\n {\n \"validatorId\": \"field-binding-target-exists\",\n \"level\": \"error\",\n \"code\": \"EDITORIAL_FIELD_BINDING_TARGET_EXISTS\",\n \"description\": \"Field binding must target an existing dataCollection block and field.\"\n },\n {\n \"validatorId\": \"field-binding-path-valid\",\n \"level\": \"error\",\n \"code\": \"EDITORIAL_FIELD_BINDING_PATH_VALID\",\n \"description\": \"Field binding context path must be deterministic and inside governed runtime context data.\"\n },\n {\n \"validatorId\": \"delegates-field-metadata\",\n \"level\": \"error\",\n \"code\": \"EDITORIAL_DELEGATES_FIELD_METADATA\",\n \"description\": \"FieldMetadata shape changes must be delegated to the metadata-editor manifest instead of duplicated here.\"\n },\n {\n \"validatorId\": \"editorial-round-trip\",\n \"level\": \"error\",\n \"code\": \"EDITORIAL_ROUND_TRIP\",\n \"description\": \"Open, edit, apply/save, reopen and runtime consume must preserve the editorial document.\"\n }\n ],\n \"roundTripRequirements\": [\n \"EditorialRuntimeInput is the package-level authoring document; solution, instance and runtimeContext must resolve into EditorialRuntimeSnapshot without drift.\",\n \"Fallback behavior must be explicit and backed by diagnostics; missing adapters cannot be hidden as successful rendering.\",\n \"Presentation changes are constrained to solution.presentation and must not mutate journeys, blocks, FormConfig, FieldMetadata or runtimeContext domain data.\",\n \"dataCollection blocks require an adapter that exists and supports the requested context, while Dynamic Form config semantics remain owned by @praxisui/dynamic-form.\",\n \"FieldMetadata authoring is delegated to praxis-metadata-editor and dynamic-fields discovery; this manifest only governs editorial binding and orchestration.\",\n \"Destructive block removal requires confirmation and must reject references from existing field bindings.\"\n ],\n \"examples\": [\n {\n \"id\": \"select-journey\",\n \"request\": \"Set the onboarding journey as the active editorial path.\",\n \"operationId\": \"snapshot.set\",\n \"params\": {\n \"solutionId\": \"customer-onboarding\",\n \"journeyId\": \"onboarding\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"merge-runtime-context\",\n \"request\": \"Prefill the runtime context with the selected plan.\",\n \"operationId\": \"snapshot.set\",\n \"params\": {\n \"solutionId\": \"plan-signup\",\n \"runtimeContextPatch\": {\n \"selectedPlan\": \"pro\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-blocked-fallback\",\n \"request\": \"Block progression when the required dataCollection adapter is missing.\",\n \"operationId\": \"fallback.configure\",\n \"params\": {\n \"mode\": \"blocked\",\n \"diagnosticCode\": \"data-collection-adapter-missing\",\n \"progressionBlocked\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-stepper\",\n \"request\": \"Use a vertical compact stepper with hidden descriptions.\",\n \"operationId\": \"presentation.configure\",\n \"params\": {\n \"layout\": {\n \"orientation\": \"vertical\",\n \"density\": \"compact\"\n },\n \"stepper\": {\n \"showDescriptions\": false\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"bind-dynamic-form-adapter\",\n \"request\": \"Bind the dynamic-form adapter for dataCollection blocks.\",\n \"operationId\": \"adapter.bind\",\n \"params\": {\n \"adapterId\": \"dynamic-form\",\n \"dataBlockType\": \"dataCollection\",\n \"requiredInputs\": [\n \"config\",\n \"formId\",\n \"editorialContext\"\n ],\n \"fallbackModeWhenMissing\": \"blocked\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-data-block\",\n \"request\": \"Add a consent form block to the review step.\",\n \"operationId\": \"dataBlock.add\",\n \"params\": {\n \"journeyId\": \"privacy\",\n \"stepId\": \"review\",\n \"block\": {\n \"blockId\": \"consent-form\",\n \"kind\": \"dataCollection\",\n \"formBlockId\": \"consent-form\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"remove-block\",\n \"request\": \"Remove the unused legacy consent block.\",\n \"operationId\": \"dataBlock.remove\",\n \"params\": {\n \"journeyId\": \"privacy\",\n \"stepId\": \"review\",\n \"blockId\": \"legacy-consent\",\n \"requireNoFieldBindings\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-field-binding\",\n \"request\": \"Bind the email field into runtimeContext.formData.email.\",\n \"operationId\": \"fieldBinding.set\",\n \"params\": {\n \"blockId\": \"contact-form\",\n \"fieldName\": \"email\",\n \"contextPath\": \"formData.email\",\n \"mode\": \"readWrite\",\n \"delegateFieldMetadataTo\": \"praxis-metadata-editor\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"reject-presentation-domain-mutation\",\n \"request\": \"Change presentation and also rewrite the collected email value.\",\n \"operationId\": \"presentation.configure\",\n \"params\": {\n \"layout\": {\n \"density\": \"relaxed\"\n },\n \"runtimeContextPatch\": {\n \"formData\": {\n \"email\": \"changed@example.com\"\n }\n }\n },\n \"isPositive\": false\n },\n {\n \"id\": \"reject-missing-adapter\",\n \"request\": \"Render a dataCollection block with an adapter that is not registered.\",\n \"operationId\": \"adapter.bind\",\n \"params\": {\n \"adapterId\": \"unknown-form-engine\",\n \"dataBlockType\": \"dataCollection\"\n },\n \"isPositive\": false\n },\n {\n \"id\": \"reject-duplicate-block\",\n \"request\": \"Add another block using the existing consent-form id.\",\n \"operationId\": \"dataBlock.add\",\n \"params\": {\n \"journeyId\": \"privacy\",\n \"stepId\": \"review\",\n \"block\": {\n \"blockId\": \"consent-form\",\n \"kind\": \"dataCollection\",\n \"formBlockId\": \"consent-form-copy\"\n }\n },\n \"isPositive\": false\n },\n {\n \"id\": \"reject-field-metadata-duplication\",\n \"request\": \"Change the control type inside editorial forms instead of metadata editor.\",\n \"operationId\": \"fieldBinding.set\",\n \"params\": {\n \"blockId\": \"contact-form\",\n \"fieldName\": \"email\",\n \"contextPath\": \"formData.email\",\n \"controlType\": \"select\"\n },\n \"isPositive\": false\n }\n ]\n}",
1224
+ "sourcePointer": "praxis-ui-angular/projects/praxis-editorial-forms/src/lib/ai/praxis-editorial-forms-authoring-manifest.ts",
1225
+ "contentHash": "3048bd002915a167939b90cf8c85c48c4e3c9e888a8af2353bb649ed25a493fe",
1226
+ "sourceKind": "component_definition",
1227
+ "sourceId": "praxis-editorial-forms",
1228
+ "corpusVersion": "1.0.0"
1229
+ }
1230
+ ]
1231
+ }
1232
+ },
1233
+ "note": "Package-scoped Praxis component registry for source-free agent discovery. Use the canonical ingestion registry for cross-package aggregate analysis."
1234
+ }