What a key goes through

What a key goes throughA line from values sent to storage: access, then coerce and accept, refine and validate, prepare, and commit, with a computed key filled at the end of accept and a dry run stopping before commit. values sent access The permission, then the access answers, asked before anything is read or written. accept() validate() prepare() commit() coerce '7' becomes 7 for an integer, by the Tool API's table; anything ambiguous is left for a constraint. accept Defaults, then stored, then sent. Absent keeps, null clears. A locked key keeps what is stored; an unknown key is refused. refine Static refiners and declared rules first, then runtime ones. Each only narrows. validate Constraints, against the keys as refined for these values. Refusals by pointer and code. prepare Storage lays the values out and checks its own schema. No side effects. commit Writes the prepared artifact: the only stage with side effects. storage A computed key is filled here, last, from its sources' accepted values. A dry run stops here: everything prepared, nothing written. What a key goes throughFrom values sent to storage: access, then coerce and accept, refine and validate, prepare, and commit, with a computed key filled at the end of accept and a dry run stopping before commit.values sent access The permission, then the access answers, asked before anything is read or written. accept() coerce '7' becomes 7 for an integer, by the Tool API's table; anything ambiguous is left for a constraint. accept Defaults, then stored, then sent. Absent keeps, null clears. A locked key keeps what is stored; an unknown key is refused. A computed key is filled here, last, from its sources' accepted values. validate() refine Static refiners and declared rules first, then runtime ones. Each only narrows. validate Constraints, against the keys as refined for these values. Refusals by pointer and code. prepare() prepare Storage lays the values out and checks its own schema. No side effects. A dry run stops here: everything prepared, nothing written. commit() commit Writes the prepared artifact: the only stage with side effects. storage

Every door hands its values to one pipeline: accept() coerces and merges them, validate() refines the keys for those values and then checks them, prepare() rehearses the write, and commit() makes it. Only commit has side effects, so a dry run is the pipeline stopped before it; a computed key is filled at the end of accept, from what its sources were accepted as.

Read more The pipeline, Transformations, Computed keys. Decisions Absent keeps, null clears, One coercion table, the Tool API's, A computed key is a pure function of its sources.

Part of Surface API; see the full explainer.