@praxisui/dynamic-form 9.0.0-beta.9 → 9.0.0-rc.1
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.
- package/README.md +210 -2
- package/ai/component-registry.json +15640 -0
- package/docs/dynamic-form-visual-builder-parity-audit.md +268 -0
- package/docs/schema-driven-layout-materialization-rfc.md +498 -0
- package/fesm2022/{praxisui-dynamic-form-dynamic-form-agentic-authoring-turn-flow-CmFfx-VR.mjs → praxisui-dynamic-form-dynamic-form-agentic-authoring-turn-flow-w9V0aQ9B.mjs} +205 -22
- package/fesm2022/praxisui-dynamic-form.mjs +4902 -1011
- package/package.json +13 -9
- package/src/lib/config-editor/praxis-dynamic-form-config-editor.json-api.md +8 -6
- package/src/lib/praxis-dynamic-form.json-api.md +42 -9
- package/types/praxisui-dynamic-form.d.ts +168 -31
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Dynamic Form Visual Builder Parity Audit"
|
|
3
|
+
slug: "dynamic-form-visual-builder-parity-audit"
|
|
4
|
+
description: "Auditoria de claims, paridade runtime/editor e plano de melhoria para o fluxo de regras do Dynamic Form com Visual Builder."
|
|
5
|
+
doc_type: "audit"
|
|
6
|
+
document_kind: "host-guide"
|
|
7
|
+
category: "architecture"
|
|
8
|
+
audience:
|
|
9
|
+
- "frontend"
|
|
10
|
+
- "platform-team"
|
|
11
|
+
- "architect"
|
|
12
|
+
- "llm-integrator"
|
|
13
|
+
level: "advanced"
|
|
14
|
+
status: "draft"
|
|
15
|
+
owner: "praxis-ui"
|
|
16
|
+
tags:
|
|
17
|
+
- "dynamic-form"
|
|
18
|
+
- "visual-builder"
|
|
19
|
+
- "rules"
|
|
20
|
+
- "json-logic"
|
|
21
|
+
- "llm"
|
|
22
|
+
toc: true
|
|
23
|
+
sidebar: false
|
|
24
|
+
reading_time: "18 min"
|
|
25
|
+
last_updated: "2026-06-17"
|
|
26
|
+
source_of_truth:
|
|
27
|
+
- "projects/praxis-dynamic-form/src/lib/config-editor/praxis-dynamic-form-config-editor.html"
|
|
28
|
+
- "projects/praxis-dynamic-form/src/lib/config-editor/praxis-dynamic-form-config-editor.ts"
|
|
29
|
+
- "projects/praxis-dynamic-form/src/lib/utils/rule-converters.ts"
|
|
30
|
+
- "projects/praxis-dynamic-form/src/lib/utils/rule-authoring-diagnostics.ts"
|
|
31
|
+
- "projects/praxis-dynamic-form/src/lib/services/form-rules.service.ts"
|
|
32
|
+
- "projects/praxis-core/src/lib/models/form/rule-property.schema.ts"
|
|
33
|
+
- "projects/praxis-visual-builder/src/lib/praxis-visual-builder.ts"
|
|
34
|
+
- "projects/praxis-visual-builder/src/lib/services/rule-builder.service.ts"
|
|
35
|
+
- "projects/praxis-visual-builder/src/lib/components/field-condition-editor.component.ts"
|
|
36
|
+
- "projects/praxis-visual-builder/src/lib/ai/praxis-visual-builder-authoring-manifest.ts"
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
# Dynamic Form Visual Builder Parity Audit
|
|
40
|
+
|
|
41
|
+
## Classification
|
|
42
|
+
|
|
43
|
+
`docs-apenas` for this artifact.
|
|
44
|
+
|
|
45
|
+
This document does not change runtime behavior, public exports, manifest
|
|
46
|
+
operations or npm package documentation. Any follow-up that changes
|
|
47
|
+
`README.md`, public AI manifests, `RULE_PROPERTY_SCHEMA`, JSON Logic parsing,
|
|
48
|
+
`FormLayoutRule`, `formCommandRules` or editor behavior must be reclassified as
|
|
49
|
+
`contrato-publico` or `transversal` before editing.
|
|
50
|
+
|
|
51
|
+
## Canonical Owner And Boundaries
|
|
52
|
+
|
|
53
|
+
| Area | Canonical owner | Boundary |
|
|
54
|
+
| --- | --- | --- |
|
|
55
|
+
| `FormConfig`, `formRules`, `formCommandRules`, embedded config editor | `@praxisui/dynamic-form` | Dynamic Form owns the authored form document and editor integration. |
|
|
56
|
+
| JSON Logic visual authoring and `RuleBuilderState` | `@praxisui/visual-builder` | Visual Builder owns visual rule graph, condition authoring and round-trip to serialized JSON expressions. |
|
|
57
|
+
| Allowed rule effect properties | `@praxisui/core` via `RULE_PROPERTY_SCHEMA` | Core owns the canonical property schema consumed by Dynamic Form and authoring tools. |
|
|
58
|
+
| Global action execution shape | `@praxisui/core` / shared action contract | Persisted command effects must use `globalAction: { actionId, payload?, payloadExpr?, meta? }`. |
|
|
59
|
+
| Public docs and npm claims | Package READMEs, landing docs, AI manifests | Public claims must not exceed tested runtime/editor parity. |
|
|
60
|
+
|
|
61
|
+
## Expert Review Synthesis
|
|
62
|
+
|
|
63
|
+
Four specialist reviews were requested before creating this artifact:
|
|
64
|
+
|
|
65
|
+
| Review area | Main confirmation | Required adjustment |
|
|
66
|
+
| --- | --- | --- |
|
|
67
|
+
| Contract/runtime | `formRules`, `formRulesState` and `formCommandRules` are distinct contracts and must not be collapsed. | Build two technical parity matrices instead of one. |
|
|
68
|
+
| UX/design | The issue is a trust gap: the editor suggests some capabilities that are not safely persisted or reopened. | Add a short confidence-hygiene phase before broad UX expansion. |
|
|
69
|
+
| Docs/LLM | Public claims and AI manifests can lead LLMs to generate valid JSON that is not visual-builder compatible. | Add a public-claims matrix and an LLM-safe subset before updating npm docs. |
|
|
70
|
+
| Tests/E2E | Existing tests cover basic rules and commands, but advanced round-trip gaps are under-tested. | Add focused converter/diagnostic specs before broad Playwright flows. |
|
|
71
|
+
|
|
72
|
+
## Core Problem
|
|
73
|
+
|
|
74
|
+
The current flow has four different levels of support that are not consistently
|
|
75
|
+
distinguished:
|
|
76
|
+
|
|
77
|
+
| Level | Meaning |
|
|
78
|
+
| --- | --- |
|
|
79
|
+
| Runtime-supported | The saved JSON/config can be consumed by the runtime. |
|
|
80
|
+
| JSON-authorable | A user or LLM can express the config in JSON. |
|
|
81
|
+
| Visual-authorable | The editor can create and edit it through guided UI. |
|
|
82
|
+
| Visual round-trip stable | The editor can reopen the saved config without semantic drift. |
|
|
83
|
+
|
|
84
|
+
The risky state is when a capability is runtime-supported or modelled, but the
|
|
85
|
+
editor either hides it behind raw JSON or exposes it without preserving the
|
|
86
|
+
semantic payload.
|
|
87
|
+
|
|
88
|
+
## Public Claims Matrix
|
|
89
|
+
|
|
90
|
+
This matrix prevents public docs, npm READMEs and AI manifests from promising
|
|
91
|
+
more than the implementation can safely support.
|
|
92
|
+
|
|
93
|
+
| Claim / surface | Published or advertised | Implemented | Tested | LLM-safe status | Recommended action |
|
|
94
|
+
| --- | --- | --- | --- | --- | --- |
|
|
95
|
+
| LLMs and consumers should write `formRules`, not `formRulesState` | README now includes an `LLM-Safe Authoring Subset` | Yes | Manifest spec protects AI rule operations from writing `formRulesState` | Safe when stated explicitly | Keep this wording in npm README and landing docs before publication. |
|
|
96
|
+
| Simple field conditions with scalar values and `and/or` round-trip visually | Advertised indirectly by visual rule authoring | Yes | Yes, basic coverage | Safe | Keep as stable visual round-trip subset. |
|
|
97
|
+
| Advanced JSON Logic operators round-trip visually | README and AI manifest now mark advanced operators as runtime JSON-only until focused visual round-trip support exists | Partial | Converter specs cover representative JSON-only operators; manifest spec protects condition descriptions | Not safe for visual claims | Keep runtime JSON-only wording until parser/emitter support exists. |
|
|
98
|
+
| `valueType = field/context/function` is a visual condition capability | UI/model expose it | Field-to-field is implemented; context/function are explicitly blocked until a canonical shape exists | Partial | Field is safe; context/function are not safe | Keep field-to-field as supported; define canonical shapes before enabling context/function. |
|
|
99
|
+
| Context variables are authorable through visual-builder | Manifest now separates registry support from field-condition operands | Registry/config support only | Manifest spec updated | Safe as registry-only; not safe as condition operand | Keep registry wording; define canonical condition operand shape before enabling context references. |
|
|
100
|
+
| `dsl.roundTrip.validate` is a general guarantee | Manifest now scopes it to the runtime-supported visual subset | Limited by supported subset | Manifest spec updated; advanced nodes still insufficient | Safe only when scoped | Keep subset wording; fail or classify unsupported advanced cases. |
|
|
101
|
+
| `surface.open` command payload is visually authorable | Dynamic Form command rules now reuse the canonical `SurfaceOpenActionEditorComponent` | Yes for structured `payload`; `payloadExpr` remains advanced | Focused config-editor spec plus Playwright save/reopen flow | Safe for structured payload | Keep `payloadExpr` as advanced JSON-only; common target coverage includes `praxis-dynamic-form`, `praxis-table` and `praxis-crud`. |
|
|
102
|
+
| `payloadExpr` is missing from UI | JSON contract supports it | Runtime-supported and preserved through advanced JSON | Focused config-editor specs cover preserve-without-payload and replace-when-structured-payload-is-authored | Advanced JSON-only | Treat as deliberate escape hatch unless product decision promotes it to structured UI. |
|
|
103
|
+
| Multiple command effects are authorable | Contract shape is array-based | Primary effect is visually editable; secondary effects are preserved when editing the primary effect | Focused config-editor spec | Not fully LLM-safe for visual authoring | Keep secondary effects JSON-authored until a multi-effect UI is designed. |
|
|
104
|
+
| Visual Builder README npm reflects local source | Published npm can lag local README and search metadata can be stale | npm search and `npm view` show canonical packages published as `9.0.0-beta.20`; retired `@praxisui/specification*` packages are tracked as known retired packages | `release:postflight:npm`, `validate:npm-search-surface`, `validate:npm-docs`, `validate:package-peers` and `audit:npm-packages` pass for the canonical inventory | Safe for version parity; retired npm packages remain visible externally until npm deprecation is executed by an authenticated owner | Keep `@praxisui/specification*` out of active docs, configs and release inventory. |
|
|
105
|
+
|
|
106
|
+
## Technical Matrix A: `formRules`
|
|
107
|
+
|
|
108
|
+
This matrix covers `FormLayoutRule`, `RuleBuilderState`, `RULE_PROPERTY_SCHEMA`
|
|
109
|
+
and the visual rule builder embedded in the Dynamic Form config editor.
|
|
110
|
+
|
|
111
|
+
| Capability | Runtime | JSON authoring | Visual create/edit | Reopen round-trip | Diagnostics | Current classification | Recommended action |
|
|
112
|
+
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
113
|
+
| Field target rule | Executes through `FormRulesService` | Yes | Yes | Stable for simple cases | Compatible | Stable visual round-trip | Keep and protect with specs. |
|
|
114
|
+
| Section/action/row/column/visualBlock target rule | Executes when target exists and properties are allowed | Yes | Yes | Covered for known, prefixed and section header action target cases | Compatible or property diagnostics | Stable visual round-trip for covered target types | Keep focused converter and diagnostic coverage for target normalization. |
|
|
115
|
+
| Multiple targets | Runtime shape supports target arrays | Yes | Yes for homogeneous target arrays | Stable for representative field and prefixed non-field targets | Compatible for covered prefixes | Stable for homogeneous target arrays | Add mixed-target visual interaction only if the UI starts allowing heterogeneous target sets. |
|
|
116
|
+
| Simple condition: field op literal | Executes | Yes | Yes | Stable for supported operators | Compatible | Stable visual round-trip | Keep as canonical baseline. |
|
|
117
|
+
| Nested `and/or` | Executes when JSON Logic is valid | Yes | Yes for field-condition groups | Stable for nested `and`/`or` with visual-safe field conditions | Covered by converter specs | Stable visual round-trip for covered subset | Keep separate from advanced operators such as `not`, `xor`, `implies`, `between` and `notIn`. |
|
|
118
|
+
| `not`, `!`, `xor`, `implies` | Runtime support must be verified per operator | JSON may be valid | Model suggests support | Not stable | Runtime-only | Runtime-supported JSON-only or experimental | Do not advertise visual round-trip until parser/emitter support exists. |
|
|
119
|
+
| `between`, `notIn`, null/empty operators | Runtime support must be verified per operator | JSON may be valid | Hidden from visual condition editor until round-trip is canonical | Not stable | Runtime-only / invalid | Runtime-supported JSON-only or experimental | Keep hidden from visual UI; re-enable only with parser/emitter specs. |
|
|
120
|
+
| Compare with another field | JSON Logic can express `{ var: otherField }` | Yes | UI exposes `valueType=field` | Stable after field-to-field round-trip support | Compatible | Stable visual round-trip | Keep and protect with converter/service specs. |
|
|
121
|
+
| Compare with context variable | Depends on context provider semantics | Yes if canonical path exists | Disabled in UI until canonical shape exists | Blocked by validation | Invalid/unsupported | Planned/experimental | Define canonical var path and round-trip before public claim. |
|
|
122
|
+
| Compare with function result | Depends on function registry semantics | Possibly | Disabled in UI until canonical shape exists | Blocked by validation | Invalid/unsupported | Planned/experimental | Keep experimental until function call JSON shape is canonical. |
|
|
123
|
+
| Property effect true values | Runtime sanitizes through property schema utilities | Yes | Yes | Stable for scalar values and covered structured editors | Covered for scalar hydrate and structured emit/hydrate | Stable for covered editors | Keep object-property expansion scoped to high-frequency properties. |
|
|
124
|
+
| Property effect false values | Runtime shape supports false branch | Yes | Yes for structured property editors | Stable for `options`, `validators`, breakpoint maps and `style` | Covered for emit/hydrate | Stable for covered editors | Improve clearer review UI only if product UX requires stronger visual comparison. |
|
|
125
|
+
| Object properties: `style`, `options`, validators, responsive maps | Runtime may accept sanitized values | Yes | `field.options`, `field.validators`, `field.style` and column breakpoint maps (`span`, `offset`, `order`, `hidden`) now have structured editors; `style` supports generic CSS string/number pairs | Partial | Sanitized / unsupported property | Supported partially | Specialize high-frequency style tokens only when product UX requires stronger guided controls. |
|
|
126
|
+
| VisualBlock text/title/message node ids | Runtime supports governed overrides | Yes | Yes through property panel | Stable for value and node-id hydrate/apply | Covered by property-panel specs | Stable guided property path | Keep technical `*NodeId` fields hidden from the primary property selector. |
|
|
127
|
+
| LLM-generated pending review | Adapter rejects direct `formRulesState` writes | Yes via `formRules` | Review flow exists with guarded accept action | Stable when diagnostics are clean | Pending review until accepted | Stable governance path | Preserve; public docs must emphasize reviewed `formRules` and no direct `formRulesState`. |
|
|
128
|
+
| Runtime-only existing rule | Runtime may execute | Yes | Visible as diagnostics, not visually editable | Preserved without visual conversion | Runtime-only with `Ver JSON` action | Supported JSON-only | Keep non-destructive JSON review; add conversion only after a canonical visual shape exists. |
|
|
129
|
+
|
|
130
|
+
## Technical Matrix B: `formCommandRules`
|
|
131
|
+
|
|
132
|
+
This matrix covers conditional commands, JSON Logic conditions,
|
|
133
|
+
`GlobalActionRef`, policies and effects.
|
|
134
|
+
|
|
135
|
+
| Capability | Runtime | JSON authoring | Visual create/edit | Reopen round-trip | Diagnostics | Current classification | Recommended action |
|
|
136
|
+
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
137
|
+
| Command condition: simple field op literal | Executes when condition validates | Yes | Yes via condition mode | Stable for simple cases | Preview | Stable visual round-trip | Keep and protect with specs. |
|
|
138
|
+
| Command condition: advanced JSON Logic | Runtime validator may accept broader JSON Logic | Yes | Not fully | Runtime-only in visual editor | Preview/JSON | Runtime-supported JSON-only | Mark clearly; do not imply full visual condition parity. |
|
|
139
|
+
| `dialog.alert` structured payload | Executes via `GlobalActionRef` | Yes | Yes | Covered by E2E | Preview/errors | Stable visual authoring | Keep as baseline. |
|
|
140
|
+
| `surface.open` payload | Executes if valid `GlobalActionRef` | Yes | Structured editor now reused in command rules | Focused spec and Playwright flow cover hydrate/edit/apply/save/reopen | Error/preview | Supported structured path | Keep common target coverage aligned with canonical `SURFACE_OPEN_PRESETS`; focused specs cover dynamic-form/table round-trip and CRUD payload preservation. |
|
|
141
|
+
| `payloadExpr` | Runtime contract supports escape hatch | Yes | Not exposed as primary UI | Preserved when no structured payload is authored; replaced when structured payload is authored | Preview / focused spec | Advanced JSON-only escape hatch | Keep JSON-only unless product decision promotes a structured expression editor. |
|
|
142
|
+
| Multiple effects | Contract uses array | Yes | UI edits the primary global action and preserves secondary effects | Secondary effects are preserved when editing the primary effect | Focused spec protects non-destructive primary-effect edits | Primary visual authoring plus secondary JSON preservation | Design explicit multi-effect UI before advertising full visual authoring. |
|
|
143
|
+
| Policy `distinct` and `distinctBy` | Runtime policy supported | Yes | Yes | Stable for visual edit/apply | Preview | Stable visual authoring | Keep controls scoped to the common command policy path. |
|
|
144
|
+
| Policy `runOnInitialEvaluation` | Runtime skips initial command execution unless explicitly enabled | Yes | Yes | Stable for hydrate/preview/apply | Preview | Stable visual authoring | Keep explicit because initial side effects are high-risk. |
|
|
145
|
+
| Other trigger modes / while-true behavior | Runtime behavior may be limited | JSON may express variants | Not exposed as visual controls | JSON-authored policy fields are preserved when editing visual fields | Focused spec protects non-destructive policy round-trip | Runtime-supported JSON-only | Keep JSON-only until runtime semantics are aligned; do not advertise full visual trigger authoring. |
|
|
146
|
+
| Invalid command payload | Runtime should reject or fail safely | Yes | Yes for catalog-required payload keys | Covered for `dialog.alert` and `surface.open` incomplete payloads | Authoring error / invalid preview | Stable for catalog-required keys | Keep deeper structural validation in the shared global-action catalog/runtime, not in the Dynamic Form editor. |
|
|
147
|
+
|
|
148
|
+
## Confidence Hygiene Backlog
|
|
149
|
+
|
|
150
|
+
These items are intentionally smaller than full parity work. They reduce false
|
|
151
|
+
signals before expanding the editor.
|
|
152
|
+
|
|
153
|
+
| Item | Class | Reason | Risk | Validation |
|
|
154
|
+
| --- | --- | --- | --- | --- |
|
|
155
|
+
| Remove visible placeholder buttons or implement their actions | `ja-suportado-mal-nomeado-ou-mal-materializado` | Placeholder actions damage authoring trust. | Low if hidden; medium if implemented. | Component spec or focused Playwright interaction. |
|
|
156
|
+
| Fix mojibake in critical editor surfaces | `ja-suportado-so-ux` | Corrupted labels weaken UX and LLM-facing docs; clear-column copy now has i18n-backed coverage. | Low, but encoding-sensitive. | `row-configurator` spec asserts clear-column copy has no `Ã`/`Â`; continue scanning broader editor surfaces. |
|
|
157
|
+
| Mark unsupported visual condition options as unavailable | `suportado-parcialmente` | `context` and `function` operands are shown as JSON-only and normalized out of visual authoring; unsupported operators such as `between`, `notIn`, null/empty and regex operators are hidden until parser/emitter support exists; `literal`, `field` and the visual-safe operator subset remain authorable. | Medium; may appear as feature removal. | `field-condition-editor` spec covers visual-safe valueType normalization, visual-safe operator filtering and unsupported reopened operators. |
|
|
158
|
+
| Replace native `confirm()` in authoring chrome | `ja-suportado-so-ux` | Platform authoring now uses the governed Material confirmation dialog for clearing column content. | Low. | `row-configurator` spec covers cancel and confirm flows. |
|
|
159
|
+
| Improve runtime-only rule state actions | `ja-suportado-mal-nomeado-ou-mal-materializado` | Runtime-only diagnostics now expose a non-destructive `Ver JSON` action that opens JSON review without rewriting visual state. | Low/medium. | Config editor spec covers JSON review navigation without mutating `formRulesState`. |
|
|
160
|
+
| Add focused advanced-condition gap specs | `docs-apenas` | Converter specs now explicitly preserve `!`, `xor`, `implies`, `between` and `notIn` as JSON-only instead of silently implying visual round-trip support. | Low; test-only guard. | `rule-converters` spec documents unsupported visual shapes without changing runtime behavior. |
|
|
161
|
+
| Keep target normalization parity specs | `docs-apenas` | Prefix handling for `visualBlock`, `section`, row, column and action targets is protected against false runtime-only diagnostics and round-trip drift. | Low; test-only guard. | `rule-converters` and `rule-authoring-diagnostics` specs cover explicitly typed prefixed targets, multiple prefixed non-field targets and section header actions. |
|
|
162
|
+
|
|
163
|
+
## Visual QA Findings
|
|
164
|
+
|
|
165
|
+
The first browser-level validation of the expanded rule property panel found two
|
|
166
|
+
runtime/editor gaps that unit specs did not expose:
|
|
167
|
+
|
|
168
|
+
| Finding | Cause | Resolution | Evidence |
|
|
169
|
+
| --- | --- | --- | --- |
|
|
170
|
+
| Numeric structured fields could fail in the browser while unit specs passed | Angular `input type="number"` can write a numeric value into `ngModel`, while the editor builders expected string-only `.trim()` semantics. | Structured builders now normalize editor values through a shared string conversion before validation and persistence. | Focused Playwright flow covers `style`, `options`, `validators` and column `span`. |
|
|
171
|
+
| A property-panel apply could be overwritten by a stale visual-builder echo | The config editor accepted a delayed `rulesChanged` event after applying a newer property-panel state. | The config editor now suppresses stale builder echoes until the expected property-panel state is observed. | Config-editor spec simulates stale echo after applying column `span`; Playwright confirms visual round-trip. |
|
|
172
|
+
|
|
173
|
+
## Follow-Up Implementation Order
|
|
174
|
+
|
|
175
|
+
1. Baseline current tests before behavior changes.
|
|
176
|
+
2. Add focused unit specs that document current advanced-condition gaps. Completed for unary negation and unsupported advanced operator shapes in `rule-converters.spec.ts`.
|
|
177
|
+
3. Add focused unit specs for target normalization and multiple prefixed non-field targets. Completed in `rule-converters.spec.ts` and `rule-authoring-diagnostics.spec.ts`.
|
|
178
|
+
4. Decide the operator and `valueType` policy. Completed by keeping `literal` and `field` as visual-safe operands, disabling `context` and `function`, and hiding unsupported operators from the visual condition editor until round-trip support exists.
|
|
179
|
+
5. Update public claims and AI manifest language to match the supported subset. Completed for Dynamic Form README and AI rule-operation condition descriptions.
|
|
180
|
+
6. Expand editors for the next highest-frequency JSON-only command/property
|
|
181
|
+
paths. Completed for structured `surface.open`, scalar property hydration,
|
|
182
|
+
`propertiesWhenFalse` hydration, visual-block node-id guided properties,
|
|
183
|
+
command payload fail-closed validation and non-destructive preservation of
|
|
184
|
+
secondary command effects/policy fields.
|
|
185
|
+
7. Keep `payloadExpr`, secondary effects, advanced condition operators,
|
|
186
|
+
`context/function` operands and non-common trigger policies as JSON-only
|
|
187
|
+
until each one has a canonical visual shape and focused round-trip specs.
|
|
188
|
+
8. Add focused Playwright flows only after contract and converter behavior are
|
|
189
|
+
explicit.
|
|
190
|
+
9. Validate npm publication and landing links after GitHub Actions publishes a
|
|
191
|
+
new package version. Completed for version parity after aligning local
|
|
192
|
+
package manifests to the published `9.0.0-beta.20`; legacy
|
|
193
|
+
`@praxisui/specification*` packages are retired known packages, not active
|
|
194
|
+
release inventory.
|
|
195
|
+
|
|
196
|
+
## NPM Publication Check
|
|
197
|
+
|
|
198
|
+
Registry checks on 2026-06-17 show the canonical `@praxisui/*` packages
|
|
199
|
+
published as `9.0.0-beta.9` with `latest` also pointing to `9.0.0-beta.9`.
|
|
200
|
+
The local workspace manifests were aligned from `9.0.0-beta.4` to
|
|
201
|
+
`9.0.0-beta.9`, so the existing postflight validators now pass for canonical
|
|
202
|
+
version parity.
|
|
203
|
+
|
|
204
|
+
Commands run:
|
|
205
|
+
|
|
206
|
+
```powershell
|
|
207
|
+
npm search praxisui --json
|
|
208
|
+
npm view @praxisui/table-rule-builder version dist-tags homepage repository.url bugs.url --json
|
|
209
|
+
cmd.exe /c npm run validate:npm-registry -- --published
|
|
210
|
+
cmd.exe /c npm run validate:npm-search-surface
|
|
211
|
+
cmd.exe /c npm run validate:package-peers
|
|
212
|
+
cmd.exe /c npm run validate:npm-docs
|
|
213
|
+
cmd.exe /c npm run audit:npm-packages
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Resolved:
|
|
217
|
+
|
|
218
|
+
- `validate:npm-registry -- --published` passes after local package manifests
|
|
219
|
+
were aligned to `9.0.0-beta.9`.
|
|
220
|
+
- `validate:npm-search-surface` passes for the 22 canonical packages after the
|
|
221
|
+
local-vs-search version drift was removed.
|
|
222
|
+
- `validate:package-peers`, `validate:npm-docs` and `audit:npm-packages` pass
|
|
223
|
+
for the aligned package metadata.
|
|
224
|
+
|
|
225
|
+
Retired package policy:
|
|
226
|
+
|
|
227
|
+
- npm search can still report `@praxisui/specification` and
|
|
228
|
+
`@praxisui/specification-core` at `1.0.0-beta.28`.
|
|
229
|
+
- They are tracked as known retired packages and must stay out of active docs,
|
|
230
|
+
workspace paths, test libs and release inventory.
|
|
231
|
+
- External npm deprecation still requires an authenticated package owner.
|
|
232
|
+
|
|
233
|
+
## Validation Plan
|
|
234
|
+
|
|
235
|
+
Before functional changes:
|
|
236
|
+
|
|
237
|
+
```powershell
|
|
238
|
+
cmd.exe /c npx ng test praxis-visual-builder --watch=false --browsers=ChromeHeadless
|
|
239
|
+
cmd.exe /c npx ng test praxis-dynamic-form --watch=false --browsers=ChromeHeadless --include=projects/praxis-dynamic-form/src/lib/utils/rule-converters.spec.ts --include=projects/praxis-dynamic-form/src/lib/utils/rule-authoring-diagnostics.spec.ts
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
For authoring flows after behavior changes:
|
|
243
|
+
|
|
244
|
+
```powershell
|
|
245
|
+
cmd.exe /c npx playwright test projects/praxis-dynamic-form/test-dev/e2e/form-config-editor-rules.playwright.spec.ts
|
|
246
|
+
cmd.exe /c npx playwright test projects/praxis-dynamic-form/test-dev/e2e/form-config-editor-command-rules.playwright.spec.ts
|
|
247
|
+
cmd.exe /c npx playwright test projects/praxis-dynamic-form/test-dev/e2e/surface-open-form-demo.playwright.spec.ts
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
Use Playwright screenshots as visual evidence only. Functional assertions should
|
|
251
|
+
prefer config JSON, diagnostics state and stable `data-testid` selectors.
|
|
252
|
+
|
|
253
|
+
## Ready Criteria For The Next Public Docs Update
|
|
254
|
+
|
|
255
|
+
- Public README claims are mapped to `stable visual round-trip`,
|
|
256
|
+
`runtime-supported JSON-only` or `planned/experimental`.
|
|
257
|
+
- AI manifest operations that cannot round-trip are downgraded, made explicit
|
|
258
|
+
as experimental, or backed by focused tests.
|
|
259
|
+
- Structured command payloads, scalar properties, false-branch property values
|
|
260
|
+
and visual-block guided properties are backed by focused round-trip specs
|
|
261
|
+
before being described as visually authorable.
|
|
262
|
+
- `formRulesState` is documented as internal editor state, never as an LLM write
|
|
263
|
+
target.
|
|
264
|
+
- NPM package page, `npm view`, dist-tags, landing page and official links are
|
|
265
|
+
checked after publication.
|
|
266
|
+
- The LLM-safe subset is explicit: simple JSON Logic field comparisons,
|
|
267
|
+
`and/or`, existing targets, properties allowed by `RULE_PROPERTY_SCHEMA`,
|
|
268
|
+
reviewed `formRules`, no direct `formRulesState`, no JavaScript/textual DSL.
|