Localization and performance
Versioned runtime messages
Runtime messages use a3s.dev/form-locale-catalog/v1. The package includes Chinese and English. An embedding host can replace individual messages without changing the form revision or digest.
React, Vue, Web Component, and Designer preview use the same catalog. Runtime controls, data-source states, progress, validation summaries, Schema errors, and asynchronous-validation fallback errors read from it. Field titles and explicit document copy remain the form author's responsibility.
Field subscriptions
The compiler records rule dependencies and subscriptions for every node. A field subscribes only to its own value, rules targeting it, and its data-source dependencies. A dynamic template such as routes.*.match is resolved against the current row index before comparison, so adjacent rows do not share an unnecessarily broad value subscription. React can skip unrelated field renders while callbacks still read the host's current complete value.
Custom node renderers receive the complete form value. Until the custom-node protocol supports dependency declarations, these nodes conservatively continue normal rendering.
CI performance budgets
npm run form:test:performance measures compilation, validation and computation, incremental computation, and server rendering.
The benchmark runs after package build and is part of npm run form:check. CI fails when the median exceeds a budget.
Data grids also enforce a 1,000-row virtualization threshold:
The benchmark uses a 480 px viewport and the default overscan. The runtime still constructs the complete controlled array and stable row indices, while server HTML and the browser DOM retain only the active window. CI fails when any threshold is exceeded.
