# Changelog

## 0.6.2 — 2026-10-27

Patch release adding opt-in `ui:options.validation.messages`, with no type, prop or export changes. Consumers should also check the submission metadata, date validation, file feedback and Wizard navigation behaviour changes below.

### Added

- FS #99: `ui:options.validation.messages` accepts plain strings keyed by AJV keyword, such as `minLength`, `maxLength`, `pattern`, `format`, `minimum`, `maximum` and `minItems`. Configured text replaces the default once per field inline, in `onError` and in the error list, including URL/Email `format` and Phone `pattern` widget feedback. Host `transformErrors` still runs last; unconfigured keywords keep their defaults.

### Fixes

- FS #94: Required empty file uploads show one inline message: "Upload a file." for a single file or "Upload at least one file." for multiple files. Host `transformErrors` and `customValidate` messages take precedence. An empty `[]` shows the normal upload label rather than "Replace File"; host-overridden `FileWidget` behaviour is unchanged.
- FS #42/#95: Date, calendar Date Range and DateTime accept `ui:options.minDate` / `maxDate` as `"YYYY-MM-DD"` or ISO date-time strings from JSON. Bounds are inclusive at calendar-date granularity, using the written date without time-zone shifts, and apply in the picker, on submit and on Wizard Next. Unparseable strings are ignored.
- FS #96: A non-function `disabledDate` is ignored instead of crashing; bounds and convenience flags still apply.

### Changed

- FS #97: Stepped Wizard Next/Submit can now be clicked for a required array below `minItems` to reveal its message; it still does not advance or submit invalid answers.
- FS #98: Submission `meta.hiddenFields` now lists a hidden object and every delivered descendant once, including nested objects, array items and static hidden fields inside it. Consumers relying on the former object-only list must account for the additional pointers. Delivered values and `disabledFields` are unchanged; the inactive whole-document root remains `""` only.
- FS #42/#95 (D-D6): Single-date submit and Wizard Next now refuse restored values outside bounds or prohibited by `disablePastDates`, `disableFutureDates`, `disableWeekends` or a `disabledDate` callback, as calendar Date Range already did. This also applies to read-only answers, which respondents cannot correct.
- FS #94: Optional untouched file arrays with `minItems` no longer receive a phantom item and can submit unanswered. With EDF's upload widget, a non-empty single string still counts as filled, but arrays without a string data URL count as empty, including arrays of server URLs.
- FS #94: File validation errors render inside the upload widget rather than relying on template feedback. Empty required upload errors use `name: 'required'`; hosts inspecting error classifications should account for this.

## 0.6.1 — 2026-10-26

Patch release with a behaviour change for Wizard navigation: consumers asserting a disabled Next or Submit for missing required answers must update those expectations.

### Fixes

- Fix default-size radio option labels inheriting the Ant Design radio group's zero font size (FS #73). Labels retain the active theme font size; explicit small and large radio sizing is unchanged.
- FS #79 (D-C4): Wizard Next and Submit remain enabled when the current step has missing-required errors, whether alone or mixed with other errors. Pressing the button reveals all of that step's normal inline errors without advancing or submitting. Final Submit also reveals errors immediately when it returns to an earlier invalid step. Steps with only non-required errors retain their existing gating.

## 0.6.0 — 2026-10-26

### Behaviour changes

- Wizard: conditional rules on each step, including inherited root rules, are evaluated against all wizard answers, so rules can reference fields on other steps to show, hide or require fields on their own step. The evaluating step's own answers win on key collisions; effects remain step-local. Inherited root rules that require a field on another step no longer block navigation on the wrong step. Conditions that read a key from another step, which previously evaluated as missing, now see that step's answer; review `missing` or `== null` style conditions. Same-step behaviour, live validation and template binding are unchanged. This broader rule context is a behaviour change and is why this is a minor release.

### Docs

- Move release history from the README into this changelog, clarify empty answers and submitted data, and document cross-step Wizard rules. Include CHANGELOG.md in the npm package so the README's version-history link resolves.

## 0.5.1 — 2026-10-24

### Changes

- Multi-step Wizards now show the form title and description above the steps on every step, honouring root `ui:title` / `ui:description` overrides and the existing `ui:options.label: false` control (visible by default). The existing `showStepDescription` prop (default `true`) now controls one active-step description inside the form, before its fields, even when `showProgressBar` is `false`. Progress and Card description duplicates are removed; nested descriptions and the `Skipped` status remain. One-step headings and callback contracts are unchanged.
- A step-level `ui:description` (or `ui:options.description`) replaces the schema description in the single in-form copy; step-level `ui:options.label: false` hides that description. Object, canonical-layout and host-delegating steps no longer show an in-form step title, matching the grid path. Step titles remain in the Steps bar and Card title; step-level `ui:title` overrides are no longer displayed.
- Redundant AJV `if` wrapper messages for failed `then`/`else` branches are suppressed when another error exists at the same property path; specific failures, and a sole wrapper at its path, stay visible. `ExtendedForm` and `WizardForm` apply host `transformErrors` after EDF folding.
- `ExtendedForm` and `WizardForm` render stably when `formData` is omitted, retain typed answers across host rerenders and wizard navigation, and submit ordinary extensible payloads without sharing empty data between instances. Explicit `formData` keeps its existing behavior. Formstudio can remove its temporary empty-data workarounds after adopting the EDF release containing this fix.
- Webhook configurations can append static query parameters, add non-overriding JSON payload properties and select top-level answers consistently on submit while preserving the standard event envelope, default payload shapes and explicit null values.
- Repeated field-validation messages receive unique React keys while preserving their text, order and visibility.
- Duplicate Wizard and email-field validation messages are fixed while keeping restored-answer feedback, the default Wizard error summary, navigation blocking and configuration-error feedback. Email fields now honour `ui:hideError` for schema and custom messages. Configuration failures, including those from the exported `nullContractValidator`, carry `name: 'edf:configuration'`; host `transformErrors` callbacks should preserve `name`.

### Behaviour changes

- Clearing Text, Textarea, Email, URL or Telephone now emits `null` by default. An explicit own `ui:options.emptyValue` overrides this default, including `""` and `undefined`. Password, Number (including String Mode), Date, Time and DateTime retain their existing clear values.
- In `ExtendedForm` and `WizardForm`, validation and validation-only schema resolution omit null object properties for every schema type before expanding dependencies and conditionals. Optional nulls behave like absent answers for content constraints, enums, combinators and dependencies; clearing an optional answer cannot activate a presence-based requirement. This applies to nested objects and object properties inside array items. Live answers, dynamic item UI and visible, enabled submission values retain null. Host custom validation receives real null answers and may reject them. Null does not refill a schema default.
- Native hosts using EDF text widgets in their own Form must switch to `nullContractValidator` or declare nullable schemas. The existing `validator` export remains plain AJV. A nullable string type accepts null for simple optional string constraints, but does not bypass enums, dependencies or combinators, or treat required nulls as missing. Use `nullContractValidator` for EDF's full policy, with required fields in the parent schema's `required` array; no Formstudio marker is needed.
- Cleared text-widget slots in primitive arrays are now null; declare `items: { type: ['string', 'null'] }` to accept them. Validation does not remove or normalize primitive array slots.
- A host-supplied null on a required nullable property now fails `required`.
- Submit callbacks, `afterSubmit` and submit webhooks add optional `meta` (`hiddenFields`, `disabledFields`; RFC 6901 pointers) when answers of rule-hidden or disabled fields are delivered. Those answers are sent unchanged and are no longer validated; hidden or disabled nulls are omitted. `meta` is a reserved webhook key, and submissions with nothing flagged keep their existing shape. Read-only fields remain answers. Receivers must distinguish null from absence, which can also mean an inactive null.
- Both `SubmissionMeta` arrays are present when emitted, and only paths with delivered values are flagged. Pointers are relative to delivered answers, include array indices after inactive-null omission and include the step key for structured Wizard answers. A hidden object is listed once rather than per descendant; an inactive root uses the whole-document pointer `""`. `hiddenFields` covers effectively hidden targets of visibility-capable conditional rules, including declarative `ui:dynamicItems` patches and base-hidden Show targets. Only `ui:widget`, `ui:options` or whole-UI replacements establish visibility provenance; only whole-UI replacements cover descendants. Static hidden IDs and prefills not addressed by such rules are sent without hidden flags. `disabledFields` covers static and rule-set disabled fields; a field may appear in both lists.
- Inactive-null omission does not clear live answers; re-showing a field restores its value. Dynamic item UI evaluates actual answers and original indices. Traversal follows RJSF-resolved references, `allOf`, schema dependencies and additional-property metadata. Declared fields use their own UI; pattern-only keys use `uiSchema.additionalProperties`. Wizard flat traversal is step-scoped, so an inactive step root cannot remove another step's answers.
- Hidden and disabled fields are exempt from validation and Wizard navigation requirements, including field-scoped custom and host errors. The validation-only schema removes inactive names from `required`, array-form `dependencies` and `dependentRequired`, and exempts field constraints, including matching patterns. Active validation and the authored schema are unchanged. Leaf validation schemas are not resolved as rendering schemas: conditional content constraints distinguish an explicit empty string from a supplied value, and corrected pattern configurations resume validation without losing answers. Array-level `minItems`, `maxItems` and `uniqueItems` validate the live array.
- `beforeSubmit` receives valued answers after inactive-null omission in the component's existing hook shape. Its returned answers are delivered without a second filter. Metadata is captured from submit-time field state and restricted to returned paths; it does not remove answers or re-add host-removed keys. Flags follow paths rather than item identity after host array reordering or removal.
- Submit webhooks emit `meta` at the root only when a flag list is non-empty; `body` cannot supply or override it. `formDataFields` restricts metadata to the selected answers, using flat answer pointers for Wizard selections. Other event snapshots remain unfiltered and have no metadata; their `fieldValue` semantics are unchanged. Standalone `FormEventHub` callers remain responsible for their own field state. ExtendedForm submit envelopes still contain the RJSF event under `formData`; one-step Wizard envelopes contain flat answers, and multi-step Wizard envelopes contain step data. `includeHiddenStepsInSubmit` keeps its structured-membership policy; hidden-step membership does not produce field flags, and the flat answer view retains its all-step contract.
- Conditional rules run in ascending `order` (finite numbers; ties keep array order; rules without `order` run after ordered ones), only matching rules act, and on conflict the later rule wins, in `ExtendedForm` and in each Wizard step. Rule lists that mix unordered rules with orders >= `Number.MAX_SAFE_INTEGER`, `Infinity` or `NaN` may now resolve differently.

## 0.5.0 — 2026-10-24

### Breaking changes

This release bundles RJSF 6.11.0. Native hosts must migrate beta-era templates and custom field paths, review cleared values (D12), and adopt flat one-step Wizard answers (D13). Read the [0.5.0 migration guide](docs/migration-0.5.md) before upgrading. Publication and Formstudio adoption remain separate release gates.

### Changes

- Keep arbitrary RJSF/EDF metadata, including primitive-root registry-revision carriers, out of native controls. Input-backed widgets retain their base named-option contract without forwarding arbitrary callbacks or HTML5 validation attributes. Other native-control helpers allowlist supported native/Ant keys and aria/data attributes, preserving range `separator`, `allowEmpty`, `ranges`/`presets` and Image `draggable`. Map picker `dropdownClassName`/`popupClassName` to `classNames.popup.root` (current semantic classes win). Date/time, slider, ColorPicker and Image filtering is defensive.
- Normalize authored `autocomplete`/`autofocus` to React `autoComplete`/`autoFocus` on supporting controls, including RJSF `ui:autocomplete` and `ui:autofocus`; explicit camelCase options win. Do not send unsupported autocomplete attributes to switch/rating/slider controls.
- Retain Ant's native `addonBefore`/`addonAfter` rendering on Text, Email, URL, Password, Number/Currency and Telephone outside addons; Telephone's inside placement is unchanged. Ant 5.26.0 emits no addon deprecation. The addon-specific deprecation on Ant >=5.29 is an accepted warning for 0.5.0, pending the post-0.5.0 **antd addon API migration**; React unknown-prop/DOM-attribute diagnostics and other Ant deprecations remain guarded.
- Omit unset Number `addonBefore`/`addonAfter` properties to avoid presence-based deprecation warnings on newer Ant versions; configured text and icon addons remain native.
- Remove ExtendedForm's default full-answer `[VAL-EDF]` edit log. Invalid-submit errors remain visible and block acceptance; the installed RJSF 6.11 error-state adapter consumes the upstream default console logger and calls the latest host `onError` when provided. No global console patch, debug flag or change to host-owned logging.
- Honour runtime replacement and restoration of host `widgets`, `fields` and `templates` (including `FieldTemplate` and nested `ButtonTemplates`) on RJSF 6.11. Compare registry keys/component identities and carry a numeric revision in the native-only sanitized `ui:definitions` empty-ref slot, which RJSF never resolves. Pass the host `formContext` unchanged; do not wrap registered components, remount the form, reset answers or emit value changes. Host field templates retain ownership of consumed style/classes. Published consumer dependency changes remain separate.
- Pin the four bundled RJSF development packages to 6.11.0 and explicitly declare the bundled Ant Design icons 6.x dependency. Keep Ant Design 5.26.0, React 18 and existing dependency overrides unchanged.
- Replace Dropdown search's lodash import with a local trailing debounce that retains the latest arguments, empty-search callbacks and cancellation on unmount. Remove unused lodash types; retain the lodash override for transitive tooling dependencies.
- Migrate custom field, object/array heading and wizard identities to RJSF's `fieldPathId`. Layout grids generate child identities using `registry.globalFormOptions`, retaining configured DOM prefixes/separators. Webhook sanitization omits the new framework identity metadata.
- Route custom widget-as-field and compound-field updates through their absolute `fieldPathId.path`, preserving the root model and neighboring answers. Keep input/focus/blur identities on the widget-as-field route. Layout grids forward absolute paths unchanged (including configurations with the former `pathAware` flag); text-empty adapters retain scoped clear authority without duplicating array indices.
- Render RJSF 6.11 array item elements directly and consume bound move/remove/copy callbacks. Scope oneOf/anyOf preferences by the public `itemKey`, preserving independent nested choices through add, copy, removal, reordering and Wizard Back. Respect registry and per-array template overrides; keep positional DOM/error IDs and the text-empty adapters.
- Forward additional-property key rename, key-blur rename and removal callbacks to the existing wrapper controls. No new object-property Add control or property editor is introduced.
- Host array/item template overrides must use RJSF 6.11's React-element `items`, `ArrayFieldItemTemplateProps.itemKey` and bound callbacks rather than beta item descriptors/index factories. The known example type diagnostic and six failing tests remain documented release exceptions; Formstudio adoption requires the published 0.5.0 artifact.

### Behaviour changes (0.5.0)

- D13: one-step `WizardForm` schemas with a real `STEP_` wrapper now use the same extracted step schema/UI, conditional rules and validation as multi-step wizards, without adding navigation/progress chrome. The form title and description remain before the fields, honour root UI overrides and use distinct heading IDs; one-step forms show no step headings. Rebuilding host schema, UI or template objects preserves field instances and input focus, including controlled conditional-schema hosts. Step schema compilation errors always block submission; the error list appears by default, but an explicit `showErrorList={false}` hides it. Field IDs are `root_<fieldId>`; initial/live/change data and both `onSubmit.formData` and `onSubmit.flatFormData` are flat. Submit webhooks (`handleBeforeSubmit` and `handleAfterSubmit`) also receive the flat one-step payload; update receivers that expected a `STEP_` envelope. Hosts must supply flat one-step answers and step-local rule paths; there is no legacy nested-answer/rule compatibility layer. Two or more configured steps keep nested `onSubmit.formData` and flat `flatFormData`, even with only one visible step; hidden-step policy and ordinary root-form contracts are unchanged.
- One-step form-level headings now render before the fields inside the form's root styling scope, including `LayoutGridField` steps, using the real registry's title/description templates while retaining root UI overrides independently of the step's object template. Host wrapper fields retain their authored selector keys so they can delegate back to `SchemaField` without recursion.
- D16 (Chat's final decision, 24 October, option b): forms with exactly one configured step show no step title, description, progress or number on default `ObjectField`, `LayoutGridField` and host step-field paths. Form headings stay before the fields in their existing root styling scope, and two or more configured steps are unchanged, including two configured with one visible. There is no option to restore step headings. Host step fields receive `ui:options.label: false`, even without authored options or with authored `label: true`; selector keys remain exactly as authored. Move required one-step heading text into the form title, description or a field.
- Clearing an object property inside an array item now leaves it undefined (key omitted from JSON) instead of null, following RJSF >= 6.5.2 (#4952). Optional cleared repeater fields no longer fail `must be <type>`; required nullable properties now report required; hosts needing null must emit null explicitly; receivers should treat a missing key like null. Primitive array slots still clear to null without deleting or reindexing items. Existing EDF TextWidget clear-to-undefined behavior is unchanged.
- Native hosts should review strict null checks, form-data datasource `equals: null` / `notEquals: null` filters, JsonLogic `var` with an explicit fallback, and raw template `stringify` / webhook JSON: absence is not an explicit null in those contracts. In-memory clears survive Wizard Back without refilling item defaults; reloading JSON with an omitted key can refill a schema default. No persisted-answer migration or respondent draft-restore feature is included.
- Preserve unanswered required booleans with `requiredBooleanDefault: 'skip'` by default; an explicit host `experimental_defaultFormStateBehavior.requiredBooleanDefault` wins. Authored defaults and number-clear payloads remain unchanged. RJSF 6.11 intentionally performs no first-render live validation. Boolean `liveValidate` remains supported; multi-step Wizard retains its existing always-live child feedback and independent Next/final validation guards.
- Restore `ExtendedForm`'s public `reset()` to schema defaults with cleared errors rather than the edited controlled snapshot; preserve the native form instance and subsequent editing/reinitialization.
- Add the explicit `RJSF611ErrorStateAdapter` compatibility boundary for native Telephone integration; ExtendedForm and Wizard steps install it internally. Reconcile widget-owned feedback while preserving sibling/extra errors, React 18/19 native refs, error metadata and one notification per real edit. Refresh schema feedback only when the child live-validates (`true`/`'onChange'`) or the owned path already carries post-submit errors, without introducing schema messages in quiet non-live forms. Correct/clear, array item id changes, reconfiguration, controlled echoes and reset retire stale owned feedback; unrelated edits add no validation calls. Normalize failed-submit feedback and subsequent prop recomputes, including registry replacements and presentation-only changes, without value callbacks. No RJSF prototype/dependency patch is used.
- Native migration step: wrap an RJSF 6.11 Form registering EDF Telephone with the exported adapter inside FormEventProvider before adoption. Unwrapped native hosts retain upstream stale Telephone error-state residuals; registration alone does not repair them.

## 0.4.2 — 2026-10-23

- Security: dependency updates (bundled lodash 4.17.21 → 4.18.1; compatible brace-expansion, browserslist, flatted, js-yaml, minimatch, nanoid, picomatch, postcss, rollup, source-map-js, validator and ws fixes). Avoid deprecated lodash 4.18.0.
- Rebuild the ESM and browser UMD artifacts with fixed lodash. Public exports, declaration files, CSS, dependency/peer ranges, React/RJSF versions and the exact development antd 5.26.0 pin are unchanged. This is release preparation, not publication or Formstudio adoption.
- Use `npm ci` and `package-lock.json` as the reproducible security-audit authority. Keep `yarn.lock` synchronized; Yarn resolutions preserve the three targeted overrides that exceed upstream patch/exact pins. Do not refresh one lockfile independently of the other.
- Known tooling risks remain: braces has no published fix; Vite 5 and Vitest 2/tinypool advisories need a separate compatible tooling migration. The attempted Vite 6/Vitest 5 candidate changed the published CSS filename and was reverted rather than shipping a broken style export.

## 0.4.1 — 2026-10-23

- Docs: clean up README with consumer installation, public ESM usage, widget options, value contracts and known limitations. Preserve the previous README's internal release and bug-tracking detail in [internal release notes](docs/internal-release-notes.md), excluded from the npm package.
- Package metadata: removed placeholder repository/homepage/bugs links.
- No runtime, dependency or validation changes from 0.4.0.

## 0.4.0 — 2026-10-23

Changes since published 0.3.13 (`eeea15b5`): 97 commits / 36 merged MRs through dev `cf076de9`.
This is release preparation, not registry publication or Formstudio adoption.

### Features

- Add declarative wizard step visibility and skipping through `x-edf:stepRules`, including layouts and navigation that follow the visible steps.
- Honour Dropdown, Checkbox and Radio settings for search, keyboard navigation, accessible descriptions and announcements, selection counts, sizes, styles and validation feedback. Single choices remain scalars; multiple choices remain arrays. Remote paging is not implemented.
- Add opt-in Email domain policies, normalization and domain suggestions, plus URL normalization, URL-part display and safe link previews. URL feedback can separately opt into `validateAfterFirstBlur`; existing validation-timing defaults are unchanged.
- Add Telephone display masks, with opt-in country-mask fallback (`useCountryMasks`). Explicit field masks take precedence. Masks format the display; submitted phone values retain canonical digits and an optional leading `+`, not display-only letters or separators.
- Add an opt-in Password composition indicator, richer File Upload controls and previews, and improved Rating, Slider and display-widget options. Password strength feedback is advisory, not an additional acceptance rule.

### Fixes

- Complete the last visible wizard step, validate visible step snapshots before submission, revisit newly revealed invalid steps, and preserve untouched flat answers in structured submissions. Preserve array positions, nested values and row-specific schema choices across edits, removal, reordering and Back navigation.
- Validate Wizard Next and Submit against effective conditional schemas, including `require` / `optional` rules and configured Email, URL and choice constraints. Invalid pattern configuration blocks progression and exposes configuration feedback that updates when the schema is corrected.
- Round-trip Date, Time, DateTime and calendar Date Range answers consistently across input, callbacks, validation and submission. Preserve valid restored values without load-time rewrites; retain range endpoint drafts and discard them on explicit clear.
- Preserve literal affixes, icons, field-local styles, variants, status and input-mode hints without leaking presentation into sibling fields or changing answer values. Correct Email suggestion sizing and Phone feedback ownership.
- Correct Number, Currency and Percentage grouping and optional String Mode clearing. Retain existing numeric interactions and exact-decimal support with string schemas; ordinary numeric mode remains numeric.
- Separate choice field-validation messages from provider failures: invalid selections no longer appear as recoverable Data Error banners, while genuine data-source errors remain visible. Enforce configured selection limits on restored values as well as respondent edits.
- Make the browser UMD bundle work without a Node `process` shim. Synchronize dependency lockfiles for clean `npm ci` and pin the development Ant Design dependency to 5.26.0; the published peer range is unchanged.

### Breaking or behaviour changes

- **Explicit upgrade required:** this pre-1.0 minor release is a contract boundary, not a replacement for 0.3.13. Formstudio and native hosts must explicitly adopt the reviewed 0.4.0 artifact and verify their schemas, callbacks and submission storage. Do not rewrite persisted or in-progress answers automatically. This preparation does not change Formstudio's locked 0.3.13 dependency.
- **Temporal answers:** date-format Date fields emit `YYYY-MM-DD`; time-format Time fields emit `HH:mm:ss`; calendar Date Range emits ISO date pairs even with plain string items. Native Date/Time fields without their respective schema format retain configured-format output; explicitly time-bearing ranges retain their time-bearing contract. DateTime always accepts UTC instants (`Z`) from browser-local selections, rejects daylight-saving gaps and requires an occurrence choice for repeated local times. Zone-less legacy DateTime strings need re-entry, not a guessed timezone. Restored valid precision is retained until edited.
- **Empty values:** built-in Text clears emit `undefined` by default, so optional object properties are omitted in JSON, including inside array items. Defined `emptyValue` overrides, including `""`, `null` and falsy sentinels, remain schema-validated. String Mode decimal clears also emit absence unless explicitly overridden. DateTime clear emits `undefined` regardless of old `emptyValue` settings; calendar Range clear emits `[]`. Password, Textarea and other widget clear defaults are not globally changed.
- **Wizard requiredness and strings:** conditional `require` modifies schema requiredness; it is not an implicit nonempty-content rule. Supplied strings with `pattern`, positive `minLength`, or valid explicit `maxLength` directly declared on the property schema are validated without trimming or normalization to absence. With an explicit maximum, a matching supplied blank counts as present for JSON Schema `required`; use a positive minimum or an appropriate pattern to reject it. Other existing nested/edit blank normalization remains. Hidden steps are omitted from structured submissions unless `includeHiddenStepsInSubmit` is enabled; flat data retains the all-step context.
- **URL policy:** HTTP/HTTPS are the default accepted schemes. Explicit `allowedProtocols` replaces that default (an empty list rejects all nonempty URLs); safe additional schemes must be authored. `javascript:`, `data:` and `vbscript:` remain rejected even if listed or URL validation feedback is disabled. This can reject previously accepted restored answers after adoption.
- **Acceptance is separate from feedback:** disabling interaction feedback does not bypass Submit/Next constraints. Pending invalid DateTime edits can emit an `Invalid date-time` marker through change callbacks; that is not an accepted submission. Exact decimal String Mode needs a string schema and decimal-aware validation; JSON Schema numeric bounds do not validate strings.
- **Retained limits:** this release does not repair CommonJS/NodeNext packaging or the separate vanilla build's missing entry. The known six provider/conditional test failures remain release-gate exceptions, not fixes. Author-entered JavaScript strings are not executed; native callable hooks do not imply an author-script execution policy.

History sources: EDF merged MRs !1–!13 for Wizard, temporal, Text and validation changes; !28–!45 and !47–!51 for the integrated runtime, choice settings and clean-install changes. Only commits reachable from dev after the 0.3.13 release are included.

Older versions: see the [npm version history](https://www.npmjs.com/package/extended-dynamic-forms?activeTab=versions).
