Field types

The 11 field types available on an input step, and the modifiers any field can take.

Defined in platform/contracts/src/authoring-fields.ts.


The types

TypeStoresNotes
boolbooleanCheckbox.
stringstringSingle line.
string-multilinestringTextarea.
numbernumber
decimal_stringstringDecimal held as a string to avoid float loss. Use for token amounts.
datetimestring
dropdownstringRequires values[], or choices.recipe for a list computed from the current instant (see choice lists).
file-singlefile refProcessFileRef; the file itself lives under PROCESS_FILES_ROOT.
file-multiplefile refs
item_listarray of rowsRepeating group. Requires subInputs[]. Nesting is allowed.
headernothingDisplay only — never written to context.

header takes headerLevel (section by default, or subsection) and may use defaultValue as subtitle HTML.


Modifiers

Any field may carry these.

ModifierEffect
titleLabel. Required.
mandatoryBlocks Continue until populated. Hidden and read-only fields are not enforced.
hintTooltip beside the label.
placeholderstring, string-multiline, number, decimal_string only.
visibleExpressionShow/hide. A hidden mandatory field does not block.
values[]Options for dropdown. Changing them is a template change.
choicesdropdown only, instead of values[]: { recipe }, an expression over the current instant alone that returns the options. Checked again on the server whenever a value is written. See choice lists.
permissions[]Per-field editability (OR). Users without a match see it read-only. Empty or omitted means anyone who can act on the step. Same matching rules as step-level permissions.
readOnlyRenders as resolved text from defaultValue. This is how view-control fields are built.
defaultValueRead-only: the template to resolve. Editable: the initial value. Both support ${path} and {{ expression }}.
downloadFilenameRead-only fields only. Adds a download button saving resolved defaultValue under this name. Supports {{ expression }} — e.g. payload-{{ todayIsoDate() }}.json. Use for generated payloads instead of copy-paste.
subInputs[]item_list only. The fields making up one row.

Subroutines

An input step's inputs[] accepts either a leaf field or a subroutine reference (TemplateStepInputSubroutine, domain/shared/src/authoring.ts):

{ type: "subroutine", key: "curve_verify", subroutineId: "safe_ui_verification", params: {…} }

A subroutine is a reusable group of fields defined in TypeScript under the Domain library, expanded into generic leaf fields at authoring/compilation by expandTemplateInputSubroutines().

params typically carries prefix, URLs, titles, fieldHints, and mandatoryKeys.

Compare like-for-like compiled presentations or normalized source. Public Process views already contain generic expanded fields; the browser must not re-run domain macro expansion.


Where values land

An input step writes to context[stepKey], keyed by field key:

context.s01_deal_registration = {
  _dealName: "Acme",
  _prime: "Spark",
}

Every write appends a StepContextAuditEntry. Fields the caller lacks permission for are filtered out before the merge — a rejected field write is silently dropped, not an error.