Field keys the user has WRITTEN this session — non-ephemeral TRUSTED
intent, scope-collapsed (a field edited under two branch buckets reports
once, by addressKey; list element paths report as paths). Storage-loaded
and seeded values are boundary entries and don't count: dirty means "the
user did this here", which is what an unsaved-changes warning wants.
Deliberate divergence from react-hook-form: writing the default value
back STAYS dirty — the entry exists; we don't deep-compare defaults.
Keys whose codec is being rebuilt on every pass — hoist these.
Derived (computed) keys in the active branch.
Null when the field isn't active in the current branch.
Durable intent only — adopted defaults are session memory, never saved.
What the resolver adjusted this pass — clamps, dropped choices.
dirtyFields().length > 0, with an early-out.
The ops handle for an active list (proposal-0.4.md §1). Bounds violations REFUSE — the store never holds an invalid membership — and every op is an ordinary write: membership lands in durable intent, rules can react, and storage saves with it.
The strict submission projection — typed as Data on the same claim
parse makes: same keys, per-key output-validated (possibly stripped)
values. Never written back into state.
Deletes intent entries whose ADDRESS matches —
storageAdapter.removeKey sweeps (clearStorageForOutput). The predicate
sees full addresses (steps@groupA/2); match on addressKey(address) to
clear every bucket of one field.
Clears intent. Excluded FIELD KEYS keep everything they've accumulated —
every scoped bucket included, so an excluded steps survives with its
per-scope memory intact.
Attach an EXTERNAL validity judgment to a field — the door for async results (a server-side audit, a failed cost check) into the sync engine. Participates in the snapshot's error and in validate()/output(); never persisted. Cleared by a user write to the field, by the field leaving the active branch, or explicitly via clearError().
Runs output schemas, records errors on fields, and notifies. Mirrors
set's shape: no argument judges the whole active graph; a key or key
list judges ONLY those fields (a wizard step's "Next"), surfacing and
clearing errors for them alone — other fields' surfaced errors are left
untouched. The scoped form returns no data: its success vouches only
for the named fields, and the full projection would over-promise.
Runs output schemas, records errors on fields, and notifies. Mirrors
set's shape: no argument judges the whole active graph; a key or key
list judges ONLY those fields (a wizard step's "Next"), surfacing and
clearing errors for them alone — other fields' surfaced errors are left
untouched. The scoped form returns no data: its success vouches only
for the named fields, and the full projection would over-promise.
Phantom registry carried from the FormDefinition so registry-driven binding helpers can infer per-key types from a store value alone. Never read at runtime.