@praxisui/dynamic-form 8.0.0-beta.2 → 8.0.0-beta.21

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,491 @@
1
+ ---
2
+ title: "form-json-config-editor JSON API (Canonical)"
3
+ slug: "form-json-config-editor-json-api"
4
+ doc_type: "api-reference"
5
+ component: "form-json-config-editor"
6
+ document_kind: "json-api-canonical"
7
+ reference_mode: "canonical"
8
+ contract_format: "json"
9
+ contract_source: "runtime-and-code"
10
+ description: "Referencia canonica do contrato JSON do componente form-json-config-editor."
11
+ category: "components"
12
+ sub_category: "config-editor"
13
+ audience:
14
+ - "frontend"
15
+ - "architect"
16
+ - "platform-team"
17
+ level: "advanced"
18
+ status: "active"
19
+ owner: "praxis-ui"
20
+ source_of_truth:
21
+ - "projects/praxis-dynamic-form/src/lib/json-config-editor/json-config-editor.component.ts"
22
+ - "projects/praxis-dynamic-form/src/lib/json-config-editor/json-config-editor.component.spec.ts"
23
+ - "projects/praxis-dynamic-form/src/lib/services/form-config.service.ts"
24
+ - "projects/praxis-core/src/lib/models/form/form-config.model.ts"
25
+ source_of_truth_last_verified: "2026-03-05"
26
+ last_updated: "2026-03-05"
27
+ toc: true
28
+ sidebar: true
29
+ tags:
30
+ - "json-api"
31
+ - "canonical-contract"
32
+ - "form-json-config-editor"
33
+ api_stability: "canonical"
34
+ schema_verified: true
35
+ runtime_verified: false
36
+ editor_coverage_verified: false
37
+ runtime_scope: "public"
38
+ legacy_paths_present: false
39
+ has_known_mismatches: false
40
+ related_components:
41
+ - "praxis-table"
42
+ ---
43
+
44
+ # form-json-config-editor
45
+
46
+ Este documento e a referencia canonica da API JSON de form-json-config-editor.
47
+
48
+ ## Summary
49
+
50
+ - Tipo documental: API reference canonica de contrato JSON.
51
+ - Source of truth: runtime e codigo declarados no frontmatter.
52
+ - Objetivo operacional: consulta rapida, auditavel e deterministica sob pressao.
53
+ - Resumo funcional herdado: `form-json-config-editor` e a superficie de edicao JSON direta para `FormConfig`. Ele oferece validacao local, formatacao, aplicacao manual de JSON e eventos de telemetria do editor.
54
+
55
+ ## Scope and positioning
56
+
57
+ - Escopo: contrato JSON publico e limites de comportamento observavel.
58
+ - Fora de escopo: tutorial de adocao e walkthrough operacional detalhado.
59
+ - Posicionamento: referencia canonicamente governada para consumidores, arquitetos e mantenedores.
60
+
61
+ ## Source of truth
62
+
63
+ | Source | Kind | Notes |
64
+ | --- | --- | --- |
65
+ | projects/praxis-dynamic-form/src/lib/json-config-editor/json-config-editor.component.ts | runtime-code | Source de implementacao declarado no repositorio. |
66
+ | projects/praxis-dynamic-form/src/lib/json-config-editor/json-config-editor.component.spec.ts | runtime-code | Source de implementacao declarado no repositorio. |
67
+ | projects/praxis-dynamic-form/src/lib/services/form-config.service.ts | runtime-code | Source de implementacao declarado no repositorio. |
68
+ | projects/praxis-core/src/lib/models/form/form-config.model.ts | runtime-code | Source de implementacao declarado no repositorio. |
69
+
70
+ ## Support legend
71
+
72
+ - Active: suportado e observado no runtime atual.
73
+ - Partial: suporte parcial, com restricoes conhecidas.
74
+ - Declared-only: declarado em tipos/schema sem ligacao runtime confirmada.
75
+ - Schema-only: presente em schema/modelo sem confirmacao de execucao.
76
+ - Deprecated: mantido por compatibilidade legada com migracao prevista.
77
+
78
+ ## Contract classification
79
+
80
+ ### Canonical paths (public contract)
81
+
82
+ | Path | Type | Required | Default | Status | Notes |
83
+ | --- | --- | --- | --- | --- | --- |
84
+ | `config` | `FormConfig \| null` | No | `null` | Active | Payload principal editado/aplicado pelo componente. |
85
+ | `hooks.beforeValidate[]` | array | No | `[]` | Partial | Inserido por helper `insertHooksTemplate()` quando usado. |
86
+ | `hooks.beforeSubmit[]` | array | No | `[]` | Partial | Inserido por helper `insertHooksTemplate()` quando usado. |
87
+ | `behavior.reactiveValidation` | boolean | No | component-defined | Partial | Ativado por helper `enableReactiveValidation()`. |
88
+ | `behavior.reactiveValidationDebounceMs` | number | No | `200` (helper) | Partial | Configurado apenas quando helper é acionado. |
89
+
90
+ ### Supported legacy paths
91
+
92
+ Nenhum path legado suportado foi identificado nesta revisão baseada em evidência textual preservada.
93
+
94
+ ### Internal-only paths
95
+
96
+ | Path | Internal consumer | Runtime presence | Public support | Notes |
97
+ | --- | --- | --- | --- | --- |
98
+ | `jsonText` (estado interno) | editor textarea/runtime validation | Yes | No | Buffer temporário da edição textual, não persistido no contrato público. |
99
+ | `jsonTextChanges$` | pipeline debounce/validação | Yes | No | Subject interno para validação em 300ms. |
100
+
101
+ ### Experimental paths
102
+
103
+ | Path | Enablement (flag/guard) | Stability | Rollout notes | Notes |
104
+ | --- | --- | --- | --- | --- |
105
+ | `hooks.beforeValidate[]` (inserção assistida) | ação manual `insertHooksTemplate()` | Partial | Não é aplicado automaticamente; depende de interação do usuário | Helper de produtividade, sem garantia de aderência semântica do hook. |
106
+
107
+ ## Overview
108
+
109
+ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecnico existente. O conteudo detalhado anterior foi preservado para manter rastreabilidade historica e reduzir perda de contexto.
110
+
111
+ ## Public contract surface
112
+
113
+ ### Top-level configuration blocks
114
+
115
+ | Block | Purpose | Required | Merge strategy | Notes |
116
+ | --- | --- | --- | --- | --- |
117
+ | `config` | Snapshot do `FormConfig` em edição | No | replace-object on apply | Fonte vem de input ou `FormConfigService.currentConfig`. |
118
+ | `hooks` | Bloco de hooks (opcional) | No | deep-merge helper-driven | Pode ser enriquecido por templates de ajuda. |
119
+ | `behavior` | Regras comportamentais do form | No | deep-merge helper-driven | Pode receber `reactiveValidation` por helper. |
120
+
121
+ ### Nested configuration blocks
122
+
123
+ | Path | Type | Required | Default | Constraints | Notes |
124
+ | --- | --- | --- | --- | --- | --- |
125
+ | `hooks.beforeValidate[]` | array | No | `[]` | hook-contract | Inserido por helper com dedupe básico por conteúdo. |
126
+ | `hooks.beforeSubmit[]` | array | No | `[]` | hook-contract | Inserido por helper com dedupe básico por conteúdo. |
127
+ | `behavior.reactiveValidation` | boolean | No | false | boolean | Ativado por helper de validação reativa. |
128
+ | `behavior.reactiveValidationDebounceMs` | number | No | `200` | integer >= 0 | Preenchido quando ausente pelo helper. |
129
+
130
+ ### Input bindings
131
+
132
+ | Binding/Path | Type | Required | Source | Runtime normalization | Notes |
133
+ | --- | --- | --- | --- | --- | --- |
134
+ | `config` | `FormConfig \| null` | No | component-input/service | `JSON.stringify(config, null, 2)` | Se ausente, usa `FormConfigService.currentConfig`. |
135
+
136
+ ### Output events
137
+
138
+ | Event | Payload | Trigger | Stability | Notes |
139
+ | --- | --- | --- | --- | --- |
140
+ | `configChange` | `FormConfig` | Apenas em `applyJsonChanges()` com JSON valido. | Partial | Preservado da documentação anterior. |
141
+ | `validationChange` | `JsonValidationResult` | Em cada ciclo de validacao (debounce 300ms). | Partial | Preservado da documentação anterior. |
142
+ | `editorEvent` | `JsonEditorEvent` | Eventos `validation`, `format` e `apply`. | Partial | Preservado da documentação anterior. |
143
+
144
+ ### External side channels
145
+
146
+ | Channel | Direction | Contract | Failure mode | Notes |
147
+ | --- | --- | --- | --- | --- |
148
+ | `FormConfigService.currentConfig` | inbound | `FormConfig` snapshot | fail-soft | Fonte inicial quando `@Input() config` não é fornecido. |
149
+ | `FormConfigService.validateConfig()` | outbound validate | `FormConfig -> string[]` | reject invalid apply | Base canônica de validação estrutural/semântica. |
150
+ | `FormConfigService.loadConfig()` | outbound apply | `FormConfig` | fail-closed por try/catch | Atualiza estado global de configuração após apply válido. |
151
+
152
+ ### Host/runtime dependencies
153
+
154
+ | Dependency | Required | Environment | Purpose | Notes |
155
+ | --- | --- | --- | --- | --- |
156
+ | `FormConfigService` | Yes | browser/dev/prod/ssr | validação + apply | Serviço central para validar e carregar config. |
157
+ | `ChangeDetectorRef` | Yes | browser/dev/prod/ssr | atualização visual | Atualiza estado de validação/formatação no editor. |
158
+ | `rxjs` (`debounceTime`) | Yes | browser/dev/prod/ssr | pipeline de validação | Debounce fixo de 300ms para texto em edição. |
159
+
160
+ ## Coverage matrix
161
+
162
+ | Surface | Verified | Coverage status | Evidence | Notes |
163
+ | --- | --- | --- | --- | --- |
164
+ | Runtime | false | Partial | source_of_truth + conteudo preservado | Revisao estrutural concluida; validacao comportamental fina pode exigir follow-up. |
165
+ | Schema/Types | true | Partial | interfaces/modelos citados | Mapeamento formal de todos os campos ainda pode requerer refinamento. |
166
+ | Editor/Tooling | false | Partial | secoes de editor quando presentes | Cobertura de editor/tooling nem sempre confirmada por evidencia direta. |
167
+
168
+ ## Runtime coverage boundaries
169
+
170
+ - Cobertura consolidada com base em documentacao existente e source of truth declarado.
171
+ - Comportamentos fora de evidencia direta foram marcados como not-yet-verified ou Partial.
172
+ - Compatibilidade legada, quando detectada, foi separada em classificacao explicita.
173
+
174
+ ## Resolution model
175
+
176
+ ### Merge order
177
+
178
+ 1. `@Input() config` (quando presente)
179
+ 2. fallback para `FormConfigService.currentConfig`
180
+ 3. edição textual (`jsonText`) com validação incremental
181
+ 4. apply explícito (`applyJsonChanges`) substitui snapshot no serviço
182
+
183
+ ### Fallback order
184
+
185
+ `config` input -> `FormConfigService.currentConfig` -> objeto vazio serializado (`{}`) em caso de falha de stringify.
186
+
187
+ ### Override points
188
+
189
+ - `@Input() config`
190
+ - ações de toolbar do editor (`applyJsonChanges`, `formatJson`, helpers)
191
+ - estado compartilhado via `FormConfigService`
192
+
193
+ ### Runtime normalization
194
+
195
+ - `JSON.stringify(..., null, 2)` padroniza saída formatada.
196
+ - `validateJson()` força contrato de objeto JSON antes de qualquer apply.
197
+ - helpers inserem blocos mínimos (`hooks`, `behavior`) com dedupe básico.
198
+
199
+ ### Precedence rules
200
+
201
+ - `@Input() config` tem precedência sobre `currentConfig` na inicialização.
202
+ - `applyJsonChanges()` só executa quando `isValidJson=true`.
203
+ - `formatJson()` não altera estado quando JSON está inválido.
204
+
205
+ ## Validation and error semantics
206
+
207
+ ### Validation model
208
+
209
+ | Path/Rule | Validation phase | Behavior on fail | Error code / warning | Notes |
210
+ | --- | --- | --- | --- | --- |
211
+ | texto vazio | pre-parse | reject | `JSON não pode estar vazio` | Atualiza `validationChange` e `editorEvent(validation)`. |
212
+ | parse JSON | parse | reject | `Erro de sintaxe JSON` | Captura erro de parse e mantém `isValidJson=false`. |
213
+ | raiz não-objeto | semantic | reject | `Configuração deve ser um objeto` | Arrays/primitivos não são aceitos como contrato raiz. |
214
+ | `validateConfig(parsed)` | semantic | reject | `errors.join('; ')` | Usa `FormConfigService` como autoridade de validação. |
215
+ | apply inválido | apply | no-op | `Erro ao aplicar configuração JSON` | Emite `editorEvent(type='apply')` com `isValid=false`. |
216
+
217
+ ### Error semantics
218
+
219
+ Validação e apply são fail-closed: payload inválido não é aplicado no serviço. O componente mantém estado editável e reporta erros via `validationChange` e `editorEvent`.
220
+
221
+ ### Fail-open / fail-closed behavior
222
+
223
+ | Condition | Mode | Runtime behavior | Consumer impact |
224
+ | --- | --- | --- | --- |
225
+ | JSON inválido durante edição | fail-closed para apply | bloqueia `applyJsonChanges()` | evita propagar config inconsistente |
226
+ | erro em `JSON.stringify` inicial | fail-open | usa `'{}'` no editor | editor permanece utilizável |
227
+ | erro em `formatJson` | fail-soft | mantém texto atual e emite evento de erro | sem perda automática de conteúdo |
228
+ | erros de validação de contrato | fail-closed para apply | mantém `isValidJson=false` até correção | exige correção explícita antes de aplicar |
229
+
230
+ ### Invalid or unknown field handling
231
+
232
+ - Campos desconhecidos: comportamento depende da estrategia do componente (ignore, warn ou reject).
233
+ - Campos invalidos: podem gerar fallback, warning ou falha conforme implementacao.
234
+ - Registrar divergencias observadas em Known limitations and mismatches.
235
+
236
+ ### Runtime warnings vs hard failures
237
+
238
+ | Condition | Severity | Observability | Consumer action |
239
+ | --- | --- | --- | --- |
240
+ | partial-or-declared-only-coverage | warning | logs/eventos do componente | confirmar ligacao runtime antes de uso critico |
241
+
242
+ ## Detailed API
243
+
244
+ ### Preserved technical reference (normalized from previous revision)
245
+
246
+ ### 1. Visao Geral e Quando Usar
247
+ `form-json-config-editor` e a superficie de edicao JSON direta para `FormConfig`.
248
+ Ele oferece validacao local, formatacao, aplicacao manual de JSON e eventos de telemetria do editor.
249
+
250
+ Use quando precisar de:
251
+ - edicao avancada/manual de schema de formulario;
252
+ - validacao continua de JSON com debounce;
253
+ - fluxo explicito de "validar -> aplicar";
254
+ - apoio didatico para hooks e validacao reativa via atalhos no proprio editor.
255
+
256
+ ### 2. Contrato da API
257
+
258
+ #### 2.1 Inputs
259
+ | Input | Tipo | Padrao | Obrigatorio | Status | Comportamento |
260
+ | --- | --- | --- | --- | --- | --- |
261
+ | `config` | `FormConfig \| null` | `null` | Nao | Active | Se ausente, usa `FormConfigService.currentConfig`. |
262
+
263
+ #### 2.2 Outputs
264
+ | Output | Payload | Quando emite |
265
+ | --- | --- | --- |
266
+ | `configChange` | `FormConfig` | Apenas em `applyJsonChanges()` com JSON valido. |
267
+ | `validationChange` | `JsonValidationResult` | Em cada ciclo de validacao (debounce 300ms). |
268
+ | `editorEvent` | `JsonEditorEvent` | Eventos `validation`, `format` e `apply`. |
269
+
270
+ Tipos relevantes:
271
+
272
+ ```ts
273
+ interface JsonValidationResult {
274
+ isValid: boolean;
275
+ error?: string;
276
+ config?: FormConfig;
277
+ }
278
+
279
+ interface JsonEditorEvent {
280
+ type: 'apply' | 'format' | 'validation';
281
+ payload: JsonValidationResult;
282
+ }
283
+ ```
284
+
285
+ ### 3. Mapeamento de Comportamento
286
+ - Validacao:
287
+ - `onJsonTextChange` envia para subject interno com debounce de 300ms.
288
+ - `validateJson` exige objeto JSON e chama `FormConfigService.validateConfig`.
289
+ - Aplicacao:
290
+ - `applyJsonChanges` so aplica quando `isValidJson=true`.
291
+ - Em sucesso: `loadConfig` no service + `configChange` + `editorEvent(type='apply')`.
292
+ - Formatacao:
293
+ - `formatJson` reformata com `JSON.stringify(parsed, null, 2)`.
294
+ - Helpers de produtividade:
295
+ - `insertHooksTemplate()` adiciona exemplos em `hooks.beforeValidate/beforeSubmit`.
296
+ - `enableReactiveValidation()` injeta `behavior.reactiveValidation=true` com debounce padrao.
297
+
298
+ Cobertura de paths JSON:
299
+ - `Active`: todo objeto que passa em `validateConfig`.
300
+ - `Partial`: validacao estrutural/funcional depende do escopo de regras de `FormConfigService.validateConfig`.
301
+
302
+ ### 4. Exemplo Minimo
303
+ ```html
304
+ <form-json-config-editor
305
+ [config]="formConfig"
306
+ (validationChange)="onJsonValidation($event)"
307
+ (configChange)="onJsonApply($event)"
308
+ ></form-json-config-editor>
309
+ ```
310
+
311
+ ### 5. Exemplo Corporativo (telemetria + gate de aplicacao)
312
+ ```ts
313
+ onJsonValidation(result: JsonValidationResult) {
314
+ this.canApply = result.isValid;
315
+ }
316
+
317
+ onEditorEvent(event: JsonEditorEvent) {
318
+ audit.log('form-json-editor', event.type, { valid: event.payload.isValid });
319
+ }
320
+ ```
321
+
322
+ ```html
323
+ <form-json-config-editor
324
+ [config]="workingConfig"
325
+ (validationChange)="onJsonValidation($event)"
326
+ (editorEvent)="onEditorEvent($event)"
327
+ (configChange)="commitDraft($event)"
328
+ ></form-json-config-editor>
329
+ ```
330
+
331
+ ### 6. Problemas Comuns e Armadilhas
332
+ 1. Esperar `configChange` a cada digitacao.
333
+ Correcao: `configChange` so sai em `Aplicar JSON`.
334
+
335
+ 2. Tratar `isValidJson` como garantia de regra de negocio final.
336
+ Correcao: e validacao do contrato local; politica de negocio continua no host/backend.
337
+
338
+ 3. Aplicar JSON sem observar `validationChange`.
339
+ Correcao: use `validationChange` para controlar UX de bloqueio/liberacao.
340
+
341
+ 4. Assumir que `formatJson` corrige erros semanticos.
342
+ Correcao: formatacao so normaliza indentacao; nao corrige contrato invalido.
343
+
344
+ 5. Sobrescrever config corrente sem versionamento/auditoria.
345
+ Correcao: em ambiente corporativo, registre diff e origem antes de persistir.
346
+
347
+ 6. Usar helpers (`insertHooksTemplate`, `enableReactiveValidation`) como contrato final.
348
+ Correcao: sao aceleradores de autoria, nao template normativo obrigatorio.
349
+
350
+ ### 7. Referencias Cruzadas
351
+ - Orquestrador superior: `projects/praxis-dynamic-form/src/lib/config-editor/praxis-dynamic-form-config-editor.ts`
352
+ - Service de validacao/carga: `projects/praxis-dynamic-form/src/lib/services/form-config.service.ts`
353
+ - Modelo base: `projects/praxis-core/src/lib/models/form/form-config.model.ts`
354
+
355
+ ### 8. Premissas
356
+ - O host controla persistencia definitiva do JSON aplicado.
357
+ - O editor nao executa hooks nem simula submit; apenas valida/edita configuracao.
358
+ - Integracao corporativa deve incluir rastreio de alteracoes (quem/quando/o que).
359
+
360
+ ### 9. Relatorio de Validacao Estrutural
361
+ - Visao geral: PASS
362
+ - Inputs/outputs e tipos de evento: PASS
363
+ - Mapeamento de comportamento: PASS
364
+ - Exemplo minimo: PASS
365
+ - Exemplo corporativo: PASS
366
+ - Problemas comuns (>=5): PASS
367
+ - Referencias cruzadas: PASS
368
+ - Premissas explicitas: PASS
369
+
370
+ ## JSON path index
371
+
372
+ | Path | Type | Required | Default | Status | Notes |
373
+ | --- | --- | --- | --- | --- | --- |
374
+ | `$` | `FormConfig` | Yes | `{ "sections": [] }` | Active | Raiz do JSON editado e emitido por `configChange`. |
375
+ | `sections[]` | `FormSection[]` | Conditional | `[]` | Active | Estrutura principal do formulário validada localmente via parse/JSON. |
376
+ | `behavior.reactiveValidation` | `boolean` | No | `false` | Partial | Pode ser inserido pelo helper `enableReactiveValidation()`. |
377
+ | `behavior.reactiveValidationDebounceMs` | `number` | No | `300` | Partial | Usado como sugestão de configuração no helper de validação reativa. |
378
+ | `hooks.*` | `object` | No | n/a | Partial | Pode ser inserido por `insertHooksTemplate()` para acelerar autoria. |
379
+
380
+ ## Events
381
+
382
+ | Event | Payload | Trigger | Stability | Notes |
383
+ | --- | --- | --- | --- | --- |
384
+ | `configChange` | `FormConfig` | Apenas em `applyJsonChanges()` com JSON valido. | Partial | Preservado da documentação anterior. |
385
+ | `validationChange` | `JsonValidationResult` | Em cada ciclo de validacao (debounce 300ms). | Partial | Preservado da documentação anterior. |
386
+ | `editorEvent` | `JsonEditorEvent` | Eventos `validation`, `format` e `apply`. | Partial | Preservado da documentação anterior. |
387
+
388
+ ## Styling API
389
+
390
+ | Token/Class | Scope | Purpose | Notes |
391
+ | --- | --- | --- | --- |
392
+ | `.json-config-editor` | root container | layout principal do editor JSON | Container flex de alto nível para card + editor. |
393
+ | `.educational-card` | summary card | contexto educacional e status de uso | Card introdutório com destaque visual e orientação de uso. |
394
+ | `.json-editor-toolbar` | toolbar | ações de refresh/format/apply e templates | Barra de ações com fallback responsivo para telas menores. |
395
+ | `.json-textarea` | editor field | edição monoespaçada de JSON | Ajusta fonte, overflow e legibilidade para payloads longos. |
396
+ | `.badge.ok/.err/.warn` | status badges | feedback de validação e alteração | Estado visual de JSON válido/inválido e mudanças pendentes. |
397
+
398
+ ## Editor and tooling notes
399
+
400
+ - Cobertura de editor/tooling foi separada da cobertura de runtime para evitar confusao de suporte.
401
+ - Quando nao houver evidencia direta no codigo, o status deve permanecer not yet verified.
402
+
403
+ ## Examples
404
+
405
+ ### Minimal valid
406
+
407
+ ```json
408
+ {
409
+ "sections": []
410
+ }
411
+ ```
412
+
413
+ ### Typical/common
414
+
415
+ ```json
416
+ {
417
+ "sections": [
418
+ {
419
+ "id": "main",
420
+ "title": "Dados",
421
+ "rows": []
422
+ }
423
+ ],
424
+ "actions": []
425
+ }
426
+ ```
427
+
428
+ ### Advanced
429
+
430
+ ```json
431
+ {
432
+ "sections": [],
433
+ "behavior": {
434
+ "reactiveValidation": true,
435
+ "reactiveValidationDebounceMs": 300
436
+ },
437
+ "hooks": {
438
+ "beforeSubmit": [
439
+ {
440
+ "type": "custom",
441
+ "handler": "sanitizePayload"
442
+ }
443
+ ]
444
+ }
445
+ }
446
+ ```
447
+
448
+ ### Enterprise scenario
449
+
450
+ ```json
451
+ {
452
+ "sections": [],
453
+ "metadata": {
454
+ "version": "2026.03",
455
+ "owner": "platform-team"
456
+ },
457
+ "behavior": {
458
+ "reactiveValidation": true,
459
+ "reactiveValidationDebounceMs": 500
460
+ },
461
+ "hooks": {
462
+ "beforeSubmit": [
463
+ {
464
+ "type": "custom",
465
+ "handler": "auditBeforeSubmit"
466
+ }
467
+ ]
468
+ }
469
+ }
470
+ ```
471
+
472
+ ## Known limitations and mismatches
473
+
474
+ | Path/Behavior | Observed behavior (runtime) | Desired behavior | Impact | Tracking issue | Target fix |
475
+ | --- | --- | --- | --- | --- | --- |
476
+ | none-reported | Nenhum mismatch explícito detectado na evidência preservada. | Manter monitoramento contínuo. | Baixo | n/a | n/a |
477
+
478
+ ## Compatibility and migration notes
479
+
480
+ | Concern | Affected versions | Migration action | Deadline | Notes |
481
+ | --- | --- | --- | --- | --- |
482
+ | legacy aliases and mixed status vocabulary | pre-canonical docs | unificar para taxonomia canonica (Active/Partial/Declared-only/...) | next-doc-cycle | manter backward compatibility documentada |
483
+
484
+ ## Source references
485
+
486
+ | Source type | Path/URL | Why it is source of truth | Last verified (YYYY-MM-DD) | Notes |
487
+ | --- | --- | --- | --- | --- |
488
+ | local-file | projects/praxis-dynamic-form/src/lib/json-config-editor/json-config-editor.component.ts | Evidencia de implementacao e contrato. | 2026-03-05 | referencia preservada da versao anterior |
489
+ | local-file | projects/praxis-dynamic-form/src/lib/json-config-editor/json-config-editor.component.spec.ts | Evidencia de implementacao e contrato. | 2026-03-05 | referencia preservada da versao anterior |
490
+ | local-file | projects/praxis-dynamic-form/src/lib/services/form-config.service.ts | Evidencia de implementacao e contrato. | 2026-03-05 | referencia preservada da versao anterior |
491
+ | local-file | projects/praxis-core/src/lib/models/form/form-config.model.ts | Evidencia de implementacao e contrato. | 2026-03-05 | referencia preservada da versao anterior |