about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--027call_ingredient.cc3
-rw-r--r--028call_return.cc1
-rw-r--r--053recipe_header.cc2
-rw-r--r--059to_text.mu6
-rw-r--r--061text.mu62
-rw-r--r--063array.mu18
-rw-r--r--064list.mu24
-rw-r--r--065duplex_list.mu40
-rw-r--r--066stream.mu12
-rw-r--r--068random.mu12
-rw-r--r--070table.mu8
-rw-r--r--075channel.mu26
-rw-r--r--081print.mu74
-rw-r--r--084console.mu12
-rw-r--r--088file.mu18
-rw-r--r--092socket.mu18
-rw-r--r--channel.mu4
-rw-r--r--chessboard.mu40
-rw-r--r--continuation1.mu2
-rw-r--r--continuation2.mu2
-rw-r--r--continuation4.mu2
-rw-r--r--continuation5.mu4
-rw-r--r--counters.mu4
-rw-r--r--edit/001-editor.mu14
-rw-r--r--edit/002-typing.mu28
-rw-r--r--edit/003-shortcuts.mu46
-rw-r--r--edit/004-programming-environment.mu22
-rw-r--r--edit/005-sandbox.mu30
-rw-r--r--edit/006-sandbox-copy.mu16
-rw-r--r--edit/007-sandbox-delete.mu6
-rw-r--r--edit/008-sandbox-edit.mu4
-rw-r--r--edit/009-sandbox-test.mu6
-rw-r--r--edit/010-sandbox-trace.mu4
-rw-r--r--edit/011-errors.mu6
-rw-r--r--edit/012-editor-undo.mu2
-rw-r--r--factorial.mu2
-rw-r--r--html/001help.cc.html85
-rw-r--r--html/003trace.cc.html2
-rw-r--r--html/010vm.cc.html34
-rw-r--r--html/011load.cc.html16
-rw-r--r--html/014literal_string.cc.html10
-rw-r--r--html/016dilated_reagent.cc.html2
-rw-r--r--html/017parse_tree.cc.html2
-rw-r--r--html/018type_abbreviations.cc.html4
-rw-r--r--html/020run.cc.html10
-rw-r--r--html/021check_instruction.cc.html4
-rw-r--r--html/026call.cc.html15
-rw-r--r--html/027call_ingredient.cc.html295
-rw-r--r--html/028call_return.cc.html291
-rw-r--r--html/030container.cc.html20
-rw-r--r--html/031merge.cc.html2
-rw-r--r--html/032array.cc.html12
-rw-r--r--html/033exclusive_container.cc.html10
-rw-r--r--html/034address.cc.html2
-rw-r--r--html/035lookup.cc.html10
-rw-r--r--html/036refcount.cc.html22
-rw-r--r--html/037abandon.cc.html14
-rw-r--r--html/038new_text.cc.html10
-rw-r--r--html/043space.cc.html10
-rw-r--r--html/044space_surround.cc.html2
-rw-r--r--html/045closure_name.cc.html2
-rw-r--r--html/050scenario.cc.html10
-rw-r--r--html/053recipe_header.cc.html12
-rw-r--r--html/054static_dispatch.cc.html12
-rw-r--r--html/055shape_shifting_container.cc.html28
-rw-r--r--html/056shape_shifting_recipe.cc.html12
-rw-r--r--html/059to_text.mu.html6
-rw-r--r--html/061text.mu.html62
-rw-r--r--html/062convert_ingredients_to_text.cc.html8
-rw-r--r--html/063array.mu.html18
-rw-r--r--html/064list.mu.html24
-rw-r--r--html/065duplex_list.mu.html40
-rw-r--r--html/066stream.mu.html12
-rw-r--r--html/068random.mu.html12
-rw-r--r--html/069hash.cc.html12
-rw-r--r--html/070table.mu.html8
-rw-r--r--html/071deep_copy.cc.html10
-rw-r--r--html/072recipe.cc.html4
-rw-r--r--html/073scheduler.cc.html2
-rw-r--r--html/074wait.cc.html8
-rw-r--r--html/075channel.mu.html26
-rw-r--r--html/076continuation.cc.html398
-rw-r--r--html/081print.mu.html74
-rw-r--r--html/082scenario_screen.cc.html44
-rw-r--r--html/084console.mu.html12
-rw-r--r--html/085scenario_console.cc.html12
-rw-r--r--html/087file.cc.html8
-rw-r--r--html/088file.mu.html18
-rw-r--r--html/092socket.mu.html18
-rw-r--r--html/099hardware_checks.cc.html4
-rw-r--r--html/100trace_browser.cc.html2
-rw-r--r--html/101run_sandboxed.cc.html4
-rw-r--r--html/channel.mu.html4
-rw-r--r--html/chessboard.mu.html40
-rw-r--r--html/continuation1.mu.html2
-rw-r--r--html/continuation2.mu.html2
-rw-r--r--html/continuation4.mu.html2
-rw-r--r--html/continuation5.mu.html4
-rw-r--r--html/counters.mu.html4
-rw-r--r--html/edit/001-editor.mu.html14
-rw-r--r--html/edit/002-typing.mu.html28
-rw-r--r--html/edit/003-shortcuts.mu.html46
-rw-r--r--html/edit/004-programming-environment.mu.html22
-rw-r--r--html/edit/005-sandbox.mu.html30
-rw-r--r--html/edit/006-sandbox-copy.mu.html16
-rw-r--r--html/edit/007-sandbox-delete.mu.html6
-rw-r--r--html/edit/008-sandbox-edit.mu.html4
-rw-r--r--html/edit/009-sandbox-test.mu.html6
-rw-r--r--html/edit/010-sandbox-trace.mu.html4
-rw-r--r--html/edit/011-errors.mu.html6
-rw-r--r--html/edit/012-editor-undo.mu.html2
-rw-r--r--html/factorial.mu.html2
-rw-r--r--html/http-client.mu.html43
-rw-r--r--html/immutable-error.mu.html2
-rw-r--r--html/lambda-to-mu.mu.html36
-rw-r--r--html/mutable.mu.html2
-rw-r--r--html/nqueens.mu.html8
-rw-r--r--html/static-dispatch.mu.html10
-rw-r--r--html/tangle.mu.html2
-rw-r--r--http-client.mu7
-rw-r--r--immutable-error.mu2
-rw-r--r--lambda-to-mu.mu36
-rw-r--r--mu.vim4
-rw-r--r--mutable.mu2
-rw-r--r--nqueens.mu8
-rw-r--r--sandbox/001-editor.mu14
-rw-r--r--sandbox/002-typing.mu28
-rw-r--r--sandbox/003-shortcuts.mu36
-rw-r--r--sandbox/004-programming-environment.mu14
-rw-r--r--sandbox/005-sandbox.mu32
-rw-r--r--sandbox/006-sandbox-copy.mu12
-rw-r--r--sandbox/007-sandbox-delete.mu6
-rw-r--r--sandbox/008-sandbox-edit.mu4
-rw-r--r--sandbox/009-sandbox-test.mu6
-rw-r--r--sandbox/010-sandbox-trace.mu4
-rw-r--r--sandbox/011-errors.mu4
-rw-r--r--sandbox/012-editor-undo.mu2
-rw-r--r--static-dispatch.mu10
-rw-r--r--tangle.mu2
139 files changed, 1517 insertions, 1449 deletions
diff --git a/027call_ingredient.cc b/027call_ingredient.cc
index ed0b8e5a..99d20b17 100644
--- a/027call_ingredient.cc
+++ b/027call_ingredient.cc
@@ -40,6 +40,7 @@ for (int i = 0;  i < SIZE(ingredients);  ++i) {
 NEXT_INGREDIENT,
 :(before "End Primitive Recipe Numbers")
 put(Recipe_ordinal, "next-ingredient", NEXT_INGREDIENT);
+put(Recipe_ordinal, "next-input", NEXT_INGREDIENT);
 :(before "End Primitive Recipe Checks")
 case NEXT_INGREDIENT: {
   if (!inst.ingredients.empty()) {
@@ -112,6 +113,7 @@ def f [
 REWIND_INGREDIENTS,
 :(before "End Primitive Recipe Numbers")
 put(Recipe_ordinal, "rewind-ingredients", REWIND_INGREDIENTS);
+put(Recipe_ordinal, "rewind-inputs", REWIND_INGREDIENTS);
 :(before "End Primitive Recipe Checks")
 case REWIND_INGREDIENTS: {
   break;
@@ -137,6 +139,7 @@ def f [
 INGREDIENT,
 :(before "End Primitive Recipe Numbers")
 put(Recipe_ordinal, "ingredient", INGREDIENT);
+put(Recipe_ordinal, "input", INGREDIENT);
 :(before "End Primitive Recipe Checks")
 case INGREDIENT: {
   if (SIZE(inst.ingredients) != 1) {
diff --git a/028call_return.cc b/028call_return.cc
index b9a1189c..c8c1bca6 100644
--- a/028call_return.cc
+++ b/028call_return.cc
@@ -29,6 +29,7 @@ RETURN,
 :(before "End Primitive Recipe Numbers")
 put(Recipe_ordinal, "return", RETURN);
 put(Recipe_ordinal, "reply", RETURN);  // synonym while teaching
+put(Recipe_ordinal, "output", RETURN);  // experiment
 :(before "End Primitive Recipe Checks")
 case RETURN: {
   break;  // checks will be performed by a transform below
diff --git a/053recipe_header.cc b/053recipe_header.cc
index 16f30917..057234f9 100644
--- a/053recipe_header.cc
+++ b/053recipe_header.cc
@@ -176,7 +176,7 @@ for (long int i = 0;  i < SIZE(caller.products);  ++i)
 //: Rewrite 'load-ingredients' to instructions to create all reagents in the header.
 
 :(before "End Rewrite Instruction(curr, recipe result)")
-if (curr.name == "load-ingredients") {
+if (curr.name == "load-ingredients" || curr.name == "load-inputs") {
   curr.clear();
   recipe_ordinal op = get(Recipe_ordinal, "next-ingredient-without-typechecking");
   for (int i = 0;  i < SIZE(result.ingredients);  ++i) {
diff --git a/059to_text.mu b/059to_text.mu
index 520fab33..d45afb0a 100644
--- a/059to_text.mu
+++ b/059to_text.mu
@@ -8,14 +8,14 @@
 # define it to be identical to 'to-text' by default
 def to-text-line x:_elem -> y:text [
   local-scope
-  load-ingredients
+  load-inputs
   y <- to-text x
 ]
 
 # variant for arrays (since we can't pass them around otherwise)
 def array-to-text-line x:&:@:_elem -> y:text [
   local-scope
-  load-ingredients
+  load-inputs
   y <- to-text *x
 ]
 
@@ -33,7 +33,7 @@ scenario array-to-text-line-early-warning-for-static-dispatch [
 # finally, a specialization for single characters
 def to-text c:char -> y:text [
   local-scope
-  load-ingredients
+  load-inputs
   y <- new character:type, 1/capacity
   *y <- put-index *y, 0, c
 ]
diff --git a/061text.mu b/061text.mu
index 29529c12..c2c8915e 100644
--- a/061text.mu
+++ b/061text.mu
@@ -2,7 +2,7 @@
 
 def equal a:text, b:text -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   an:num, bn:num <- copy a, b
   address-equal?:boolean <- equal an, bn
   return-if address-equal?, 1/true
@@ -124,7 +124,7 @@ container buffer:_elem [
 
 def new-buffer capacity:num -> result:&:buffer:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   result <- new {(buffer _elem): type}
   *result <- put *result, length:offset, 0
   {
@@ -139,7 +139,7 @@ def new-buffer capacity:num -> result:&:buffer:_elem [
 
 def grow-buffer buf:&:buffer:_elem -> buf:&:buffer:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   # double buffer size
   olddata:&:@:_elem <- get *buf, data:offset
   oldlen:num <- length *olddata
@@ -160,7 +160,7 @@ def grow-buffer buf:&:buffer:_elem -> buf:&:buffer:_elem [
 
 def buffer-full? in:&:buffer:_elem -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   len:num <- get *in, length:offset
   s:&:@:_elem <- get *in, data:offset
   capacity:num <- length *s
@@ -170,7 +170,7 @@ def buffer-full? in:&:buffer:_elem -> result:bool [
 # most broadly applicable definition of append to a buffer
 def append buf:&:buffer:_elem, x:_elem -> buf:&:buffer:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   len:num <- get *buf, length:offset
   {
     # grow buffer if necessary
@@ -188,7 +188,7 @@ def append buf:&:buffer:_elem, x:_elem -> buf:&:buffer:_elem [
 # call to-text
 def append buf:&:buffer:char, x:_elem -> buf:&:buffer:char [
   local-scope
-  load-ingredients
+  load-inputs
   text:text <- to-text x
   buf <- append buf, text
 ]
@@ -196,7 +196,7 @@ def append buf:&:buffer:char, x:_elem -> buf:&:buffer:char [
 # specialization for characters that is backspace-aware
 def append buf:&:buffer:char, c:char -> buf:&:buffer:char [
   local-scope
-  load-ingredients
+  load-inputs
   len:num <- get *buf, length:offset
   {
     # backspace? just drop last character if it exists and return
@@ -222,7 +222,7 @@ def append buf:&:buffer:char, c:char -> buf:&:buffer:char [
 
 def append buf:&:buffer:_elem, t:&:@:_elem -> buf:&:buffer:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   len:num <- length *t
   i:num <- copy 0
   {
@@ -337,7 +337,7 @@ scenario append-to-buffer-of-non-characters [
 
 def buffer-to-array in:&:buffer:_elem -> result:&:@:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   # propagate null buffer
   return-unless in, 0
   len:num <- get *in, length:offset
@@ -357,7 +357,7 @@ def buffer-to-array in:&:buffer:_elem -> result:&:@:_elem [
 
 def blank? x:&:@:_elem -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless x, 1/true
   len:num <- length *x
   result <- equal len, 0
@@ -373,16 +373,16 @@ def blank? x:&:@:_elem -> result:bool [
 # will never ever get used.
 def append first:text -> result:text [
   local-scope
-  load-ingredients
+  load-inputs
   buf:&:buffer:char <- new-buffer 30
-  # append first ingredient
+  # append first input
   {
     break-unless first
     buf <- append buf, first
   }
-  # append remaining ingredients
+  # append remaining inputs
   {
-    arg:text, arg-found?:bool <- next-ingredient
+    arg:text, arg-found?:bool <- next-input
     break-unless arg-found?
     loop-unless arg
     buf <- append buf, arg
@@ -458,7 +458,7 @@ scenario replace-character-in-text [
 
 def replace s:text, oldc:char, newc:char, from:num/optional -> s:text [
   local-scope
-  load-ingredients
+  load-inputs
   len:num <- length *s
   i:num <- find-next s, oldc, from
   done?:bool <- greater-or-equal i, len
@@ -519,13 +519,13 @@ scenario replace-all-characters [
 # replace underscores in first with remaining args
 def interpolate template:text -> result:text [
   local-scope
-  load-ingredients  # consume just the template
+  load-inputs  # consume just the template
   # compute result-len, space to allocate for result
   tem-len:num <- length *template
   result-len:num <- copy tem-len
   {
-    # while ingredients remain
-    a:text, arg-received?:bool <- next-ingredient
+    # while inputs remain
+    a:text, arg-received?:bool <- next-input
     break-unless arg-received?
     # result-len = result-len + arg.length - 1 (for the 'underscore' being replaced)
     a-len:num <- length *a
@@ -533,15 +533,15 @@ def interpolate template:text -> result:text [
     result-len <- subtract result-len, 1
     loop
   }
-  rewind-ingredients
-  _ <- next-ingredient  # skip template
+  rewind-inputs
+  _ <- next-input  # skip template
   result <- new character:type, result-len
   # repeatedly copy sections of template and 'holes' into result
   result-idx:num <- copy 0
   i:num <- copy 0
   {
     # while arg received
-    a:text, arg-received?:bool <- next-ingredient
+    a:text, arg-received?:bool <- next-input
     break-unless arg-received?
     # copy template into result until '_'
     {
@@ -633,7 +633,7 @@ scenario interpolate-at-end [
 # result:bool <- space? c:char
 def space? c:char -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   # most common case first
   result <- equal c, 32/space
   return-if result
@@ -694,7 +694,7 @@ def space? c:char -> result:bool [
 
 def trim s:text -> result:text [
   local-scope
-  load-ingredients
+  load-inputs
   len:num <- length *s
   # left trim: compute start
   start:num <- copy 0
@@ -804,7 +804,7 @@ scenario trim-newline-tab [
 
 def find-next text:text, pattern:char, idx:num -> next-index:num [
   local-scope
-  load-ingredients
+  load-inputs
   len:num <- length *text
   {
     eof?:bool <- greater-or-equal idx, len
@@ -910,7 +910,7 @@ scenario text-find-next-second [
 # fairly dumb algorithm
 def find-next text:text, pattern:text, idx:num -> next-index:num [
   local-scope
-  load-ingredients
+  load-inputs
   first:char <- index *pattern, 0
   # repeatedly check for match at current idx
   len:num <- length *text
@@ -991,7 +991,7 @@ scenario find-next-suffix-match-2 [
 # checks if pattern matches at index 'idx'
 def match-at text:text, pattern:text, idx:num -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   pattern-len:num <- length *pattern
   # check that there's space left for the pattern
   x:num <- length *text
@@ -1122,7 +1122,7 @@ scenario match-at-inside-bounds-2 [
 
 def split s:text, delim:char -> result:&:@:text [
   local-scope
-  load-ingredients
+  load-inputs
   # empty text? return empty array
   len:num <- length *s
   {
@@ -1254,7 +1254,7 @@ scenario text-split-empty-piece [
 
 def split-first text:text, delim:char -> x:text, y:text [
   local-scope
-  load-ingredients
+  load-inputs
   # empty text? return empty texts
   len:num <- length *text
   {
@@ -1286,7 +1286,7 @@ scenario text-split-first [
 
 def copy-range buf:text, start:num, end:num -> result:text [
   local-scope
-  load-ingredients
+  load-inputs
   # if end is out of bounds, trim it
   len:num <- length *buf
   end:num <- min len, end
@@ -1345,7 +1345,7 @@ scenario copy-range-out-of-bounds-2 [
 
 def parse-whole-number in:text -> out:num, error?:bool [
   local-scope
-  load-ingredients
+  load-inputs
   out <- copy 0
   result:num <- copy 0  # temporary location
   i:num <- copy 0
@@ -1369,7 +1369,7 @@ def parse-whole-number in:text -> out:num, error?:bool [
 # (contributed by Ella Couch)
 recipe character-code-to-digit character-code:number -> result:number, error?:boolean [
   local-scope
-  load-ingredients
+  load-inputs
   result <- copy 0
   error? <- lesser-than character-code, 48  # '0'
   return-if error?
diff --git a/063array.mu b/063array.mu
index 04e6e427..a56e87f0 100644
--- a/063array.mu
+++ b/063array.mu
@@ -18,20 +18,20 @@ def new-array -> result:&:@:_elem [
   capacity:num <- copy 0
   {
     # while read curr-value
-    curr-value:_elem, exists?:bool <- next-ingredient
+    curr-value:_elem, exists?:bool <- next-input
     break-unless exists?
     capacity <- add capacity, 1
     loop
   }
   result <- new _elem:type, capacity
-  rewind-ingredients
+  rewind-inputs
   i:num <- copy 0
   {
     # while read curr-value
     done?:bool <- greater-or-equal i, capacity
     break-if done?
-    curr-value:_elem, exists?:bool <- next-ingredient
-    assert exists?, [error in rewinding ingredients to new-array]
+    curr-value:_elem, exists?:bool <- next-input
+    assert exists?, [error in rewinding inputs to new-array]
     *result <- put-index *result, i, curr-value
     i <- add i, 1
     loop
@@ -43,13 +43,13 @@ def new-array -> result:&:@:_elem [
 # (contributed by Caleb Couch)
 def fill array:&:@:num -> array:&:@:num [
   local-scope
-  load-ingredients
+  load-inputs
   loopn:num <- copy 0
   length:num <- length *array
   {
     length?:bool <- equal loopn, length
     break-if length?
-    object:num, arg-received?:bool <- next-ingredient
+    object:num, arg-received?:bool <- next-input
     break-unless arg-received?
     *array <- put-index *array, loopn, object
     loopn <- add loopn, 1
@@ -88,7 +88,7 @@ scenario fill-overwrites-existing-values [
   ]
 ]
 
-scenario fill-exits-gracefully-when-given-no-ingredients [
+scenario fill-exits-gracefully-when-given-no-inputs [
   local-scope
   array:&:@:num <- new number:type, 3
   run [
@@ -107,7 +107,7 @@ scenario fill-exits-gracefully-when-given-no-ingredients [
 # (contributed by Caleb Couch)
 def swap array:&:@:num, index1:num, index2:num -> array:&:@:num [
   local-scope
-  load-ingredients
+  load-inputs
   object1:num <- index *array, index1
   object2:num <- index *array, index2
   *array <- put-index *array, index1, object2
@@ -133,7 +133,7 @@ scenario swap-works [
 # (contributed by Caleb Couch)
 def reverse array:&:@:_elem -> array:&:@:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   start:num <- copy 0
   length:num <- length *array
   end:num <- subtract length, 1
diff --git a/064list.mu b/064list.mu
index 1e10243a..6177e3f3 100644
--- a/064list.mu
+++ b/064list.mu
@@ -10,20 +10,20 @@ container list:_elem [
 
 def push x:_elem, l:&:list:_elem -> result:&:list:_elem/contained-in:l [
   local-scope
-  load-ingredients
+  load-inputs
   result <- new {(list _elem): type}
   *result <- merge x, l
 ]
 
 def first in:&:list:_elem -> result:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   result <- get *in, value:offset
 ]
 
 def rest in:&:list:_elem -> result:&:list:_elem/contained-in:in [
   local-scope
-  load-ingredients
+  load-inputs
   result <- get *in, next:offset
 ]
 
@@ -50,7 +50,7 @@ scenario list-handling [
 
 def length l:&:list:_elem -> result:num [
   local-scope
-  load-ingredients
+  load-inputs
   result <- copy 0
   {
     break-unless l
@@ -63,7 +63,7 @@ def length l:&:list:_elem -> result:num [
 # insert 'x' after 'in'
 def insert x:_elem, in:&:list:_elem -> in:&:list:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   new-node:&:list:_elem <- new {(list _elem): type}
   *new-node <- put *new-node, value:offset, x
   next-node:&:list:_elem <- get *in, next:offset
@@ -155,7 +155,7 @@ scenario inserting-after-start-of-list [
 # pointers to the head are now invalid.
 def remove x:&:list:_elem/contained-in:in, in:&:list:_elem -> in:&:list:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   # if 'x' is null, return
   return-unless x
   next-node:&:list:_elem <- rest x
@@ -265,7 +265,7 @@ scenario removing-from-singleton-list [
 # (contributed by Caleb Couch)
 def reverse list:&:list:_elem temp:&:list:_elem/contained-in:result -> result:&:list:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless list, temp
   object:_elem <- first, list
   list <- rest list
@@ -304,7 +304,7 @@ scenario stash-list [
 
 def to-text in:&:list:_elem -> result:text [
   local-scope
-  load-ingredients
+  load-inputs
   buf:&:buffer:char <- new-buffer 80
   buf <- to-buffer in, buf
   result <- buffer-to-array buf
@@ -313,7 +313,7 @@ def to-text in:&:list:_elem -> result:text [
 # variant of 'to-text' which stops printing after a few elements (and so is robust to cycles)
 def to-text-line in:&:list:_elem -> result:text [
   local-scope
-  load-ingredients
+  load-inputs
   buf:&:buffer:char <- new-buffer 80
   buf <- to-buffer in, buf, 6  # max elements to display
   result <- buffer-to-array buf
@@ -321,7 +321,7 @@ def to-text-line in:&:list:_elem -> result:text [
 
 def to-buffer in:&:list:_elem, buf:&:buffer:char -> buf:&:buffer:char [
   local-scope
-  load-ingredients
+  load-inputs
   {
     break-if in
     buf <- append buf, [[]]
@@ -336,9 +336,9 @@ def to-buffer in:&:list:_elem, buf:&:buffer:char -> buf:&:buffer:char [
   return-unless next
   buf <- append buf, [ -> ]
   # and recurse
-  remaining:num, optional-ingredient-found?:bool <- next-ingredient
+  remaining:num, optional-input-found?:bool <- next-input
   {
-    break-if optional-ingredient-found?
+    break-if optional-input-found?
     # unlimited recursion
     buf <- to-buffer next, buf
     return
diff --git a/065duplex_list.mu b/065duplex_list.mu
index 30552fb6..037cb923 100644
--- a/065duplex_list.mu
+++ b/065duplex_list.mu
@@ -8,7 +8,7 @@ container duplex-list:_elem [
 
 def push x:_elem, in:&:duplex-list:_elem/contained-in:result -> result:&:duplex-list:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   result:&:duplex-list:_elem <- new {(duplex-list _elem): type}
   *result <- merge x, in, 0
   return-unless in
@@ -17,21 +17,21 @@ def push x:_elem, in:&:duplex-list:_elem/contained-in:result -> result:&:duplex-
 
 def first in:&:duplex-list:_elem -> result:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless in, 0
   result <- get *in, value:offset
 ]
 
 def next in:&:duplex-list:_elem -> result:&:duplex-list:_elem/contained-in:in [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless in, 0
   result <- get *in, next:offset
 ]
 
 def prev in:&:duplex-list:_elem -> result:&:duplex-list:_elem/contained-in:in [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless in, 0
   result <- get *in, prev:offset
   return result
@@ -81,7 +81,7 @@ scenario duplex-list-handling [
 
 def length l:&:duplex-list:_elem -> result:num [
   local-scope
-  load-ingredients
+  load-inputs
   result <- copy 0
   {
     break-unless l
@@ -94,7 +94,7 @@ def length l:&:duplex-list:_elem -> result:num [
 # insert 'x' after 'in'
 def insert x:_elem, in:&:duplex-list:_elem -> in:&:duplex-list:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   new-node:&:duplex-list:_elem <- new {(duplex-list _elem): type}
   *new-node <- put *new-node, value:offset, x
   # save old next before changing it
@@ -223,7 +223,7 @@ scenario inserting-after-start-of-duplex-list [
 # pointers to the head are now invalid.
 def remove x:&:duplex-list:_elem/contained-in:in, in:&:duplex-list:_elem -> in:&:duplex-list:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   # if 'x' is null, return
   return-unless x
   next-node:&:duplex-list:_elem <- get *x, next:offset
@@ -347,7 +347,7 @@ scenario removing-from-singleton-duplex-list [
 
 def remove x:&:duplex-list:_elem/contained-in:in, n:num, in:&:duplex-list:_elem -> in:&:duplex-list:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   i:num <- copy 0
   curr:&:duplex-list:_elem <- copy x
   {
@@ -384,7 +384,7 @@ scenario removing-multiple-from-duplex-list [
 # clean way to return the new head pointer.
 def remove-between start:&:duplex-list:_elem, end:&:duplex-list:_elem/contained-in:start -> start:&:duplex-list:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   next:&:duplex-list:_elem <- get *start, next:offset
   nothing-to-delete?:bool <- equal next, end
   return-if nothing-to-delete?
@@ -524,7 +524,7 @@ scenario remove-range-to-end [
 # insert list beginning at 'start' after 'in'
 def splice in:&:duplex-list:_elem, start:&:duplex-list:_elem/contained-in:in -> in:&:duplex-list:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless in
   return-unless start
   end:&:duplex-list:_elem <- last start
@@ -541,7 +541,7 @@ def splice in:&:duplex-list:_elem, start:&:duplex-list:_elem/contained-in:in ->
 # insert contents of 'new' after 'in'
 def insert in:&:duplex-list:_elem, new:&:@:_elem -> in:&:duplex-list:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless in
   return-unless new
   len:num <- length *new
@@ -562,7 +562,7 @@ def insert in:&:duplex-list:_elem, new:&:@:_elem -> in:&:duplex-list:_elem [
 
 def append in:&:duplex-list:_elem, new:&:duplex-list:_elem/contained-in:in -> in:&:duplex-list:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   last:&:duplex-list:_elem <- last in
   *last <- put *last, next:offset, new
   return-unless new
@@ -571,7 +571,7 @@ def append in:&:duplex-list:_elem, new:&:duplex-list:_elem/contained-in:in -> in
 
 def last in:&:duplex-list:_elem -> result:&:duplex-list:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   result <- copy in
   {
     next:&:duplex-list:_elem <- next result
@@ -584,7 +584,7 @@ def last in:&:duplex-list:_elem -> result:&:duplex-list:_elem [
 # does a duplex list start with a certain sequence of elements?
 def match x:&:duplex-list:_elem, y:&:@:_elem -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   i:num <- copy 0
   max:num <- length *y
   {
@@ -629,7 +629,7 @@ scenario duplex-list-match [
 # helper for debugging
 def dump-from x:&:duplex-list:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   $print x, [: ]
   {
     break-unless x
@@ -662,7 +662,7 @@ scenario stash-duplex-list [
 
 def to-text in:&:duplex-list:_elem -> result:text [
   local-scope
-  load-ingredients
+  load-inputs
   buf:&:buffer:char <- new-buffer 80
   buf <- to-buffer in, buf
   result <- buffer-to-array buf
@@ -671,7 +671,7 @@ def to-text in:&:duplex-list:_elem -> result:text [
 # variant of 'to-text' which stops printing after a few elements (and so is robust to cycles)
 def to-text-line in:&:duplex-list:_elem -> result:text [
   local-scope
-  load-ingredients
+  load-inputs
   buf:&:buffer:char <- new-buffer 80
   buf <- to-buffer in, buf, 6  # max elements to display
   result <- buffer-to-array buf
@@ -679,7 +679,7 @@ def to-text-line in:&:duplex-list:_elem -> result:text [
 
 def to-buffer in:&:duplex-list:_elem, buf:&:buffer:char -> buf:&:buffer:char [
   local-scope
-  load-ingredients
+  load-inputs
   {
     break-if in
     buf <- append buf, [[]]
@@ -694,9 +694,9 @@ def to-buffer in:&:duplex-list:_elem, buf:&:buffer:char -> buf:&:buffer:char [
   return-unless next
   buf <- append buf, [ <-> ]
   # and recurse
-  remaining:num, optional-ingredient-found?:bool <- next-ingredient
+  remaining:num, optional-input-found?:bool <- next-input
   {
-    break-if optional-ingredient-found?
+    break-if optional-input-found?
     # unlimited recursion
     buf <- to-buffer next, buf
     return
diff --git a/066stream.mu b/066stream.mu
index 9c7824dd..6d5d0520 100644
--- a/066stream.mu
+++ b/066stream.mu
@@ -6,7 +6,7 @@ container stream:_elem [
 
 def new-stream s:&:@:_elem -> result:&:stream:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless s, 0/null
   result <- new {(stream _elem): type}
   *result <- put *result, index:offset, 0
@@ -15,14 +15,14 @@ def new-stream s:&:@:_elem -> result:&:stream:_elem [
 
 def rewind in:&:stream:_elem -> in:&:stream:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless in
   *in <- put *in, index:offset, 0
 ]
 
 def read in:&:stream:_elem -> result:_elem, empty?:bool, in:&:stream:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   assert in, [cannot read; stream has no data]
   empty? <- copy 0/false
   idx:num <- get *in, index:offset
@@ -41,7 +41,7 @@ def read in:&:stream:_elem -> result:_elem, empty?:bool, in:&:stream:_elem [
 
 def peek in:&:stream:_elem -> result:_elem, empty?:bool [
   local-scope
-  load-ingredients
+  load-inputs
   assert in, [cannot peek; stream has no data]
   empty?:bool <- copy 0/false
   idx:num <- get *in, index:offset
@@ -58,7 +58,7 @@ def peek in:&:stream:_elem -> result:_elem, empty?:bool [
 
 def read-line in:&:stream:char -> result:text, in:&:stream:char [
   local-scope
-  load-ingredients
+  load-inputs
   assert in, [cannot read-line; stream has no data]
   idx:num <- get *in, index:offset
   s:text <- get *in, data:offset
@@ -71,7 +71,7 @@ def read-line in:&:stream:char -> result:text, in:&:stream:char [
 
 def end-of-stream? in:&:stream:_elem -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   assert in, [cannot check end-of-stream?; stream has no data]
   idx:num <- get *in, index:offset
   s:&:@:_elem <- get *in, data:offset
diff --git a/068random.mu b/068random.mu
index f13df4f2..78c059de 100644
--- a/068random.mu
+++ b/068random.mu
@@ -1,6 +1,6 @@
 def random generator:&:stream:num -> result:num, fail?:bool, generator:&:stream:num [
   local-scope
-  load-ingredients
+  load-inputs
   {
     break-if generator
     # generator is 0? use real random-number generator
@@ -13,20 +13,20 @@ def random generator:&:stream:num -> result:num, fail?:bool, generator:&:stream:
 # helper for tests
 def assume-random-numbers -> result:&:stream:num [
   local-scope
-  load-ingredients
+  load-inputs
   # compute result-len, space to allocate in result
   result-len:num <- copy 0
   {
-    _, arg-received?:bool <- next-ingredient
+    _, arg-received?:bool <- next-input
     break-unless arg-received?
     result-len <- add result-len, 1
     loop
   }
-  rewind-ingredients
+  rewind-inputs
   result-data:&:@:num <- new number:type, result-len
   idx:num <- copy 0
   {
-    curr:num, arg-received?:bool <- next-ingredient
+    curr:num, arg-received?:bool <- next-input
     break-unless arg-received?
     *result-data <- put-index *result-data, idx, curr
     idx <- add idx, 1
@@ -57,7 +57,7 @@ scenario random-numbers-in-scenario [
 # generate a random integer in the semi-open interval [start, end)
 def random-in-range generator:&:stream:num, start:num, end:num -> result:num, fail?:bool, generator:&:stream:num [
   local-scope
-  load-ingredients
+  load-inputs
   result, fail?, generator <- random generator
   return-if fail?
   delta:num <- subtract end, start
diff --git a/070table.mu b/070table.mu
index f82bb9c7..a4ec5afb 100644
--- a/070table.mu
+++ b/070table.mu
@@ -55,7 +55,7 @@ container table-row:_key:_value [
 
 def new-table capacity:num -> result:&:table:_key:_value [
   local-scope
-  load-ingredients
+  load-inputs
   result <- new {(table _key _value): type}
   data:&:@:table-row:_key:_value <- new {(table-row _key _value): type}, capacity
   *result <- merge 0/length, capacity, data
@@ -65,7 +65,7 @@ def new-table capacity:num -> result:&:table:_key:_value [
 # then we could handle conflicts simply by resizing the table
 def put-index table:&:table:_key:_value, key:_key, value:_value -> table:&:table:_key:_value [
   local-scope
-  load-ingredients
+  load-inputs
   hash:num <- hash key
   hash <- abs hash
   capacity:num <- get *table, capacity:offset
@@ -82,7 +82,7 @@ def put-index table:&:table:_key:_value, key:_key, value:_value -> table:&:table
 
 def index table:&:table:_key:_value, key:_key -> result:_value, found?:bool [
   local-scope
-  load-ingredients
+  load-inputs
   hash:num <- hash key
   hash <- abs hash
   capacity:num <- get *table, capacity:offset
@@ -102,7 +102,7 @@ def index table:&:table:_key:_value, key:_key -> result:_value, found?:bool [
 
 def abs n:num -> result:num [
   local-scope
-  load-ingredients
+  load-inputs
   positive?:bool <- greater-or-equal n, 0
   return-if positive?, n
   result <- multiply n, -1
diff --git a/075channel.mu b/075channel.mu
index 72fa0a6c..1f8248ef 100644
--- a/075channel.mu
+++ b/075channel.mu
@@ -10,9 +10,9 @@
 #   addresses from being shared between routines, and therefore eliminates all
 #   possibility of race conditions.
 #
-# There's still a narrow window for race conditions: the ingredients passed in
+# There's still a narrow window for race conditions: the inputs passed in
 # to 'start-running'. Pass only channels into routines and you should be fine.
-# Any other mutable ingredients will require locks.
+# Any other mutable inputs will require locks.
 
 scenario channel [
   run [
@@ -50,7 +50,7 @@ container sink:_elem [
 
 def new-channel capacity:num -> in:&:source:_elem, out:&:sink:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   result:&:channel:_elem <- new {(channel _elem): type}
   *result <- put *result, first-full:offset, 0
   *result <- put *result, first-free:offset, 0
@@ -66,7 +66,7 @@ def new-channel capacity:num -> in:&:source:_elem, out:&:sink:_elem [
 # write a value to a channel
 def write out:&:sink:_elem, val:_elem -> out:&:sink:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   assert out, [write to null channel]
   chan:&:channel:_elem <- get *out, chan:offset
   <channel-write-initial>
@@ -112,7 +112,7 @@ def write out:&:sink:_elem, val:_elem -> out:&:sink:_elem [
 # read a value from a channel
 def read in:&:source:_elem -> result:_elem, eof?:bool, in:&:source:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   assert in, [read on null channel]
   eof? <- copy 0/false  # default result
   chan:&:channel:_elem <- get *in, chan:offset
@@ -311,7 +311,7 @@ scenario channel-clear [
 
 def clear in:&:source:_elem -> in:&:source:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   chan:&:channel:_elem <- get *in, chan:offset
   {
     empty?:bool <- channel-empty? chan
@@ -333,13 +333,13 @@ container channel:_elem [
 # both routines can modify the 'closed?' bit, but they can only ever set it, so this is a benign race
 def close x:&:source:_elem -> x:&:source:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   chan:&:channel:_elem <- get *x, chan:offset
   *chan <- put *chan, closed?:offset, 1/true
 ]
 def close x:&:sink:_elem -> x:&:sink:_elem [
   local-scope
-  load-ingredients
+  load-inputs
   chan:&:channel:_elem <- get *x, chan:offset
   *chan <- put *chan, closed?:offset, 1/true
 ]
@@ -369,7 +369,7 @@ after <channel-read-empty> [
 # An empty channel has first-free and first-full both at the same value.
 def channel-empty? chan:&:channel:_elem -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   # return chan.first-full == chan.first-free
   full:num <- get *chan, first-full:offset
   free:num <- get *chan, first-free:offset
@@ -380,7 +380,7 @@ def channel-empty? chan:&:channel:_elem -> result:bool [
 # (Other alternatives: https://www.snellman.net/blog/archive/2016-12-13-ring-buffers)
 def channel-full? chan:&:channel:_elem -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   # tmp = chan.first-free + 1
   tmp:num <- get *chan, first-free:offset
   tmp <- add tmp, 1
@@ -398,7 +398,7 @@ def channel-full? chan:&:channel:_elem -> result:bool [
 
 def capacity chan:&:channel:_elem -> result:num [
   local-scope
-  load-ingredients
+  load-inputs
   q:&:@:_elem <- get *chan, data:offset
   result <- length *q
 ]
@@ -407,7 +407,7 @@ def capacity chan:&:channel:_elem -> result:num [
 
 def buffer-lines in:&:source:char, buffered-out:&:sink:char -> buffered-out:&:sink:char, in:&:source:char [
   local-scope
-  load-ingredients
+  load-inputs
   # repeat forever
   eof?:bool <- copy 0/false
   {
@@ -506,7 +506,7 @@ F buffer-lines-blocks-until-newline: channel should contain data after writing n
 
 def drain source:&:source:char -> result:text, source:&:source:char [
   local-scope
-  load-ingredients
+  load-inputs
   buf:&:buffer:char <- new-buffer 30
   {
     c:char, done?:bool <- read source
diff --git a/081print.mu b/081print.mu
index e1ea6069..50b6485a 100644
--- a/081print.mu
+++ b/081print.mu
@@ -31,7 +31,7 @@ container screen-cell [
 
 def new-fake-screen w:num, h:num -> result:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   result <- new screen:type
   non-zero-width?:bool <- greater-than w, 0
   assert non-zero-width?, [screen can't have zero width]
@@ -45,7 +45,7 @@ def new-fake-screen w:num, h:num -> result:&:screen [
 
 def clear-screen screen:&:screen -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
 #?   stash [clear-screen]
   {
     break-if screen
@@ -73,7 +73,7 @@ def clear-screen screen:&:screen -> screen:&:screen [
 
 def fake-screen-is-empty? screen:&:screen -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
 #?   stash [fake-screen-is-empty?]
   return-unless screen, 1/true  # do nothing for real screens
   buf:&:@:screen-cell <- get *screen, data:offset
@@ -94,14 +94,14 @@ def fake-screen-is-empty? screen:&:screen -> result:bool [
 
 def print screen:&:screen, c:char -> screen:&:screen [
   local-scope
-  load-ingredients
-  color:num, color-found?:bool <- next-ingredient
+  load-inputs
+  color:num, color-found?:bool <- next-input
   {
     # default color to white
     break-if color-found?
     color <- copy 7/white
   }
-  bg-color:num, bg-color-found?:bool <- next-ingredient
+  bg-color:num, bg-color-found?:bool <- next-input
   {
     # default bg-color to black
     break-if bg-color-found?
@@ -205,7 +205,7 @@ def print screen:&:screen, c:char -> screen:&:screen [
 
 def cursor-down-on-fake-screen screen:&:screen -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
 #?   stash [cursor-down]
   row:num <- get *screen, cursor-row:offset
   height:num <- get *screen, num-rows:offset
@@ -224,7 +224,7 @@ def cursor-down-on-fake-screen screen:&:screen -> screen:&:screen [
 
 def scroll-fake-screen screen:&:screen -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
 #?   stash [scroll-fake-screen]
   width:num <- get *screen, num-columns:offset
   height:num <- get *screen, num-rows:offset
@@ -252,7 +252,7 @@ def scroll-fake-screen screen:&:screen -> screen:&:screen [
 # while accounting for scrolling (sliding top-idx)
 def data-index row:num, column:num, width:num, height:num, top-idx:num -> result:num [
   local-scope
-  load-ingredients
+  load-inputs
   {
     overflow?:bool <- greater-or-equal row, height
     break-unless overflow?
@@ -508,13 +508,13 @@ scenario print-character-at-bottom-right [
 # these helpers help check for scrolling at development time
 def save-top-idx screen:&:screen -> result:num [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless screen, 0  # check is only for fake screens
   result <- get *screen, top-idx:offset
 ]
 def assert-no-scroll screen:&:screen, old-top-idx:num [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless screen
   new-top-idx:num <- get *screen, top-idx:offset
   no-scroll?:bool <- equal old-top-idx, new-top-idx
@@ -523,7 +523,7 @@ def assert-no-scroll screen:&:screen, old-top-idx:num [
 
 def clear-line screen:&:screen -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
 #?   stash [clear-line]
   space:char <- copy 0/nul
   {
@@ -552,14 +552,14 @@ def clear-line screen:&:screen -> screen:&:screen [
 # only for non-scrolling apps
 def clear-line-until screen:&:screen, right:num/inclusive -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   row:num, column:num <- cursor-position screen
 #?   stash [clear-line-until] row column
   height:num <- screen-height screen
   past-bottom?:bool <- greater-or-equal row, height
   return-if past-bottom?
   space:char <- copy 32/space
-  bg-color:num, bg-color-found?:bool <- next-ingredient
+  bg-color:num, bg-color-found?:bool <- next-input
   {
     # default bg-color to black
     break-if bg-color-found?
@@ -576,7 +576,7 @@ def clear-line-until screen:&:screen, right:num/inclusive -> screen:&:screen [
 
 def cursor-position screen:&:screen -> row:num, column:num [
   local-scope
-  load-ingredients
+  load-inputs
   {
     break-if screen
     # real screen
@@ -590,7 +590,7 @@ def cursor-position screen:&:screen -> row:num, column:num [
 
 def move-cursor screen:&:screen, new-row:num, new-column:num -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
 #?   stash [move-cursor] new-row new-column
   {
     break-if screen
@@ -644,7 +644,7 @@ scenario clear-line-erases-printed-characters [
 
 def cursor-down screen:&:screen -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
 #?   stash [cursor-down]
   {
     break-if screen
@@ -687,7 +687,7 @@ scenario cursor-down-scrolls [
 
 def cursor-up screen:&:screen -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
 #?   stash [cursor-up]
   {
     break-if screen
@@ -705,7 +705,7 @@ def cursor-up screen:&:screen -> screen:&:screen [
 
 def cursor-right screen:&:screen -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
 #?   stash [cursor-right]
   {
     break-if screen
@@ -725,7 +725,7 @@ def cursor-right screen:&:screen -> screen:&:screen [
 
 def cursor-left screen:&:screen -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
 #?   stash [cursor-left]
   {
     break-if screen
@@ -743,7 +743,7 @@ def cursor-left screen:&:screen -> screen:&:screen [
 
 def cursor-to-start-of-line screen:&:screen -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
 #?   stash [cursor-to-start-of-line]
   row:num <- cursor-position screen
   screen <- move-cursor screen, row, 0/column
@@ -751,7 +751,7 @@ def cursor-to-start-of-line screen:&:screen -> screen:&:screen [
 
 def cursor-to-next-line screen:&:screen -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
 #?   stash [cursor-to-next-line]
   screen <- cursor-down screen
   screen <- cursor-to-start-of-line screen
@@ -759,7 +759,7 @@ def cursor-to-next-line screen:&:screen -> screen:&:screen [
 
 def move-cursor-to-column screen:&:screen, column:num -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   row:num, _ <- cursor-position screen
 #?   stash [move-cursor-to-column] row
   move-cursor screen, row, column
@@ -767,7 +767,7 @@ def move-cursor-to-column screen:&:screen, column:num -> screen:&:screen [
 
 def screen-width screen:&:screen -> width:num [
   local-scope
-  load-ingredients
+  load-inputs
 #?   stash [screen-width]
   {
     break-unless screen
@@ -781,7 +781,7 @@ def screen-width screen:&:screen -> width:num [
 
 def screen-height screen:&:screen -> height:num [
   local-scope
-  load-ingredients
+  load-inputs
 #?   stash [screen-height]
   {
     break-unless screen
@@ -795,14 +795,14 @@ def screen-height screen:&:screen -> height:num [
 
 def print screen:&:screen, s:text -> screen:&:screen [
   local-scope
-  load-ingredients
-  color:num, color-found?:bool <- next-ingredient
+  load-inputs
+  color:num, color-found?:bool <- next-input
   {
     # default color to white
     break-if color-found?
     color <- copy 7/white
   }
-  bg-color:num, bg-color-found?:bool <- next-ingredient
+  bg-color:num, bg-color-found?:bool <- next-input
   {
     # default bg-color to black
     break-if bg-color-found?
@@ -851,14 +851,14 @@ scenario print-text-wraps-past-right-margin [
 
 def print screen:&:screen, n:num -> screen:&:screen [
   local-scope
-  load-ingredients
-  color:num, color-found?:bool <- next-ingredient
+  load-inputs
+  color:num, color-found?:bool <- next-input
   {
     # default color to white
     break-if color-found?
     color <- copy 7/white
   }
-  bg-color:num, bg-color-found?:bool <- next-ingredient
+  bg-color:num, bg-color-found?:bool <- next-input
   {
     # default bg-color to black
     break-if bg-color-found?
@@ -871,14 +871,14 @@ def print screen:&:screen, n:num -> screen:&:screen [
 
 def print screen:&:screen, n:bool -> screen:&:screen [
   local-scope
-  load-ingredients
-  color:num, color-found?:bool <- next-ingredient
+  load-inputs
+  color:num, color-found?:bool <- next-input
   {
     # default color to white
     break-if color-found?
     color <- copy 7/white
   }
-  bg-color:num, bg-color-found?:bool <- next-ingredient
+  bg-color:num, bg-color-found?:bool <- next-input
   {
     # default bg-color to black
     break-if bg-color-found?
@@ -890,14 +890,14 @@ def print screen:&:screen, n:bool -> screen:&:screen [
 
 def print screen:&:screen, n:&:_elem -> screen:&:screen [
   local-scope
-  load-ingredients
-  color:num, color-found?:bool <- next-ingredient
+  load-inputs
+  color:num, color-found?:bool <- next-input
   {
     # default color to white
     break-if color-found?
     color <- copy 7/white
   }
-  bg-color:num, bg-color-found?:bool <- next-ingredient
+  bg-color:num, bg-color-found?:bool <- next-input
   {
     # default bg-color to black
     break-if bg-color-found?
diff --git a/084console.mu b/084console.mu
index 9f55ca91..6aee5702 100644
--- a/084console.mu
+++ b/084console.mu
@@ -27,14 +27,14 @@ container console [
 
 def new-fake-console events:&:@:event -> result:&:console [
   local-scope
-  load-ingredients
+  load-inputs
   result:&:console <- new console:type
   *result <- put *result, events:offset, events
 ]
 
 def read-event console:&:console -> result:event, found?:bool, quit?:bool, console:&:console [
   local-scope
-  load-ingredients
+  load-inputs
   {
     break-unless console
     current-event-index:num <- get *console, current-event-index:offset
@@ -61,7 +61,7 @@ def read-event console:&:console -> result:event, found?:bool, quit?:bool, conso
 # newlines, tabs, ctrl-d..
 def read-key console:&:console -> result:char, found?:bool, quit?:bool, console:&:console [
   local-scope
-  load-ingredients
+  load-inputs
   x:event, found?:bool, quit?:bool, console <- read-event console
   return-if quit?, 0, found?, quit?
   return-unless found?, 0, found?, quit?
@@ -72,7 +72,7 @@ def read-key console:&:console -> result:char, found?:bool, quit?:bool, console:
 
 def send-keys-to-channel console:&:console, chan:&:sink:char, screen:&:screen -> console:&:console, chan:&:sink:char, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   {
     c:char, found?:bool, quit?:bool, console <- read-key console
     loop-unless found?
@@ -87,7 +87,7 @@ def send-keys-to-channel console:&:console, chan:&:sink:char, screen:&:screen ->
 
 def wait-for-event console:&:console -> console:&:console [
   local-scope
-  load-ingredients
+  load-inputs
   {
     _, found?:bool <- read-event console
     break-if found?
@@ -98,7 +98,7 @@ def wait-for-event console:&:console -> console:&:console [
 
 def has-more-events? console:&:console -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   return-if console, 0/false  # fake events are processed as soon as they arrive
   result <- interactions-left?
 ]
diff --git a/088file.mu b/088file.mu
index f851acae..a7a3ba77 100644
--- a/088file.mu
+++ b/088file.mu
@@ -20,7 +20,7 @@ container resource [
 
 def start-reading resources:&:resources, filename:text -> contents:&:source:char, error?:bool [
   local-scope
-  load-ingredients
+  load-inputs
   error? <- copy 0/false
   {
     break-unless resources
@@ -37,7 +37,7 @@ def start-reading resources:&:resources, filename:text -> contents:&:source:char
 
 def slurp resources:&:resources, filename:text -> contents:text, error?:bool [
   local-scope
-  load-ingredients
+  load-inputs
   source:&:source:char, error?:bool <- start-reading resources, filename
   return-if error?, 0/contents
   buf:&:buffer:char <- new-buffer 30/capacity
@@ -52,7 +52,7 @@ def slurp resources:&:resources, filename:text -> contents:text, error?:bool [
 
 def start-reading-from-fake-resource resources:&:resources, resource:text -> contents:&:source:char, error?:bool [
   local-scope
-  load-ingredients
+  load-inputs
   error? <- copy 0/no-error
   i:num <- copy 0
   data:&:@:resource <- get *resources, data:offset
@@ -75,7 +75,7 @@ def start-reading-from-fake-resource resources:&:resources, resource:text -> con
 
 def receive-from-file file:num, sink:&:sink:char -> sink:&:sink:char [
   local-scope
-  load-ingredients
+  load-inputs
   {
     c:char, eof?:bool <- $read-from-file file
     break-if eof?
@@ -88,7 +88,7 @@ def receive-from-file file:num, sink:&:sink:char -> sink:&:sink:char [
 
 def receive-from-text contents:text, sink:&:sink:char -> sink:&:sink:char [
   local-scope
-  load-ingredients
+  load-inputs
   i:num <- copy 0
   len:num <- length *contents
   {
@@ -104,7 +104,7 @@ def receive-from-text contents:text, sink:&:sink:char -> sink:&:sink:char [
 
 def start-writing resources:&:resources, filename:text -> sink:&:sink:char, routine-id:num, error?:bool [
   local-scope
-  load-ingredients
+  load-inputs
   error? <- copy 0/false
   source:&:source:char, sink:&:sink:char <- new-channel 30
   {
@@ -126,7 +126,7 @@ def start-writing resources:&:resources, filename:text -> sink:&:sink:char, rout
 
 def dump resources:&:resources, filename:text, contents:text -> resources:&:resources, error?:bool [
   local-scope
-  load-ingredients
+  load-inputs
   # todo: really create an empty file
   return-unless contents, resources, 0/no-error
   sink-file:&:sink:char, write-routine:num, error?:bool <- start-writing resources, filename
@@ -149,7 +149,7 @@ def dump resources:&:resources, filename:text, contents:text -> resources:&:reso
 
 def transmit-to-file file:num, source:&:source:char -> source:&:source:char [
   local-scope
-  load-ingredients
+  load-inputs
   {
     c:char, done?:bool, source <- read source
     break-if done?
@@ -161,7 +161,7 @@ def transmit-to-file file:num, source:&:source:char -> source:&:source:char [
 
 def transmit-to-fake-resource resources:&:resources, filename:text, source:&:source:char -> resources:&:resources, source:&:source:char [
   local-scope
-  load-ingredients
+  load-inputs
   lock:location <- get-location *resources, lock:offset
   wait-for-reset-then-set lock
   # compute new file contents
diff --git a/092socket.mu b/092socket.mu
index 1cf6930a..be4e5bb2 100644
--- a/092socket.mu
+++ b/092socket.mu
@@ -25,7 +25,7 @@ F - example-server-test: $open-server-socket failed]
 # helper just for this scenario
 def example-handler query:text -> response:text [
   local-scope
-  load-ingredients
+  load-inputs
   return [abc]
 ]
 
@@ -54,7 +54,7 @@ type request-handler = (recipe text -> text)
 
 def serve-one-request socket:num, request-handler:request-handler -> socket:num [
   local-scope
-  load-ingredients
+  load-inputs
   session:num <- $accept socket
   assert session, [ 
 F - example-server-test: $accept failed]
@@ -68,9 +68,9 @@ F - example-server-test: $accept failed]
 
 def start-reading-from-network resources:&:resources, uri:text -> contents:&:source:char [
   local-scope
-  load-ingredients
+  load-inputs
   {
-    port:num, port-found?:boolean <- next-ingredient
+    port:num, port-found?:boolean <- next-input
     break-if port-found?
     port <- copy 80/http-port
   }
@@ -92,7 +92,7 @@ def start-reading-from-network resources:&:resources, uri:text -> contents:&:sou
 
 def request-socket socket:num, s:text -> socket:num [
   local-scope
-  load-ingredients
+  load-inputs
   write-to-socket socket, s
   $write-to-socket socket, 13/cr
   $write-to-socket socket, 10/lf
@@ -103,7 +103,7 @@ def request-socket socket:num, s:text -> socket:num [
 
 def receive-from-socket socket:num, sink:&:sink:char -> sink:&:sink:char, socket:num [
   local-scope
-  load-ingredients
+  load-inputs
   {
     +next-attempt
     c:char, found?:bool, eof?:bool, error:num <- $read-from-socket socket
@@ -124,14 +124,14 @@ def receive-from-socket socket:num, sink:&:sink:char -> sink:&:sink:char, socket
 
 def receive-from-client-socket-and-close socket:num, sink:&:sink:char -> sink:&:sink:char, socket:num [
   local-scope
-  load-ingredients
+  load-inputs
   sink <- receive-from-socket socket, sink
   socket <- $close-socket socket
 ]
 
 def write-to-socket socket:num, s:text [
   local-scope
-  load-ingredients
+  load-inputs
   len:num <- length *s
   i:num <- copy 0
   {
@@ -147,7 +147,7 @@ def write-to-socket socket:num, s:text [
 # like split-first, but don't eat the delimiter
 def split-at text:text, delim:char -> x:text, y:text [
   local-scope
-  load-ingredients
+  load-inputs
   # empty text? return empty texts
   len:num <- length *text
   {
diff --git a/channel.mu b/channel.mu
index 66d0be79..4a553148 100644
--- a/channel.mu
+++ b/channel.mu
@@ -3,7 +3,7 @@
 def producer sink:&:sink:char -> sink:&:sink:char [
   # produce characters 1 to 5 on a channel
   local-scope
-  load-ingredients
+  load-inputs
   # n = 0
   n:char <- copy 0
   {
@@ -22,7 +22,7 @@ def producer sink:&:sink:char -> sink:&:sink:char [
 def consumer source:&:source:char -> source:&:source:char [
   # consume and print integers from a channel
   local-scope
-  load-ingredients
+  load-inputs
   {
     # read an integer from the channel
     n:char, eof?:bool, source <- read source
diff --git a/chessboard.mu b/chessboard.mu
index 27e16fd8..c8ca6ba5 100644
--- a/chessboard.mu
+++ b/chessboard.mu
@@ -6,7 +6,7 @@ def main [
   open-console  # take control of screen, keyboard and mouse
   clear-screen 0/screen  # non-scrolling app
 
-  # The chessboard function takes keyboard and screen objects as 'ingredients'.
+  # The chessboard function takes keyboard and screen objects as inputs.
   #
   # In Mu it is good form (though not required) to explicitly state what
   # hardware a function needs.
@@ -68,7 +68,7 @@ type board = &:@:&:@:char  # a 2-D array of arrays of characters
 
 def chessboard screen:&:screen, console:&:console -> screen:&:screen, console:&:console [
   local-scope
-  load-ingredients
+  load-inputs
   board:board <- initial-position
   # hook up stdin
   stdin-in:&:source:char, stdin-out:&:sink:char <- new-channel 10/capacity
@@ -106,7 +106,7 @@ def chessboard screen:&:screen, console:&:console -> screen:&:screen, console:&:
 
 def new-board initial-position:&:@:char -> board:board [
   local-scope
-  load-ingredients
+  load-inputs
   # assert(length(initial-position) == 64)
   len:num <- length *initial-position
   correct-length?:bool <- equal len, 64
@@ -126,7 +126,7 @@ def new-board initial-position:&:@:char -> board:board [
 
 def new-file position:&:@:char, index:num -> result:&:@:char [
   local-scope
-  load-ingredients
+  load-inputs
   index <- multiply index, 8
   result <- new character:type, 8
   row:num <- copy 0
@@ -143,7 +143,7 @@ def new-file position:&:@:char, index:num -> result:&:@:char [
 
 def print-board screen:&:screen, board:board -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   row:num <- copy 7  # start printing from the top of the board
   space:char <- copy 32/space
   # print each row
@@ -237,7 +237,7 @@ container move [
 # prints only error messages to screen
 def read-move stdin:&:source:char, screen:&:screen -> result:&:move, quit?:bool, error?:bool, stdin:&:source:char, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   from-file:num, quit?:bool, error?:bool <- read-file stdin, screen
   return-if quit?, 0/dummy
   return-if error?, 0/dummy
@@ -265,7 +265,7 @@ def read-move stdin:&:source:char, screen:&:screen -> result:&:move, quit?:bool,
 # valid values for file: 0-7
 def read-file stdin:&:source:char, screen:&:screen -> file:num, quit:bool, error:bool, stdin:&:source:char, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   c:char, eof?:bool, stdin <- read stdin
   return-if eof?, 0/dummy, 1/quit, 0/error
   q-pressed?:bool <- equal c, 81/Q
@@ -303,7 +303,7 @@ def read-file stdin:&:source:char, screen:&:screen -> file:num, quit:bool, error
 # valid values for rank: 0-7
 def read-rank stdin:&:source:char, screen:&:screen -> rank:num, quit?:bool, error?:bool, stdin:&:source:char, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   c:char, eof?:bool, stdin <- read stdin
   return-if eof?, 0/dummy, 1/quit, 0/error
   q-pressed?:bool <- equal c, 81/Q
@@ -341,7 +341,7 @@ def read-rank stdin:&:source:char, screen:&:screen -> rank:num, quit?:bool, erro
 # return true on error
 def expect-from-channel stdin:&:source:char, expected:char, screen:&:screen -> result:bool, stdin:&:source:char, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   c:char, eof?:bool, stdin <- read stdin
   return-if eof? 1/true
   {
@@ -358,7 +358,7 @@ scenario read-move-blocking [
   source:&:source:char, sink:&:sink:char <- new-channel 2/capacity
   read-move-routine:num/routine <- start-running read-move, source, screen:&:screen
   run [
-    # 'read-move' is waiting for input
+    # 'read-move' is waiting for keypress
     wait-for-routine-to-block read-move-routine
     read-move-state:num <- routine-state read-move-routine
     waiting?:bool <- not-equal read-move-state, 2/discontinued
@@ -367,7 +367,7 @@ F read-move-blocking: routine failed to pause after coming up (before any keys w
     # press 'a'
     sink <- write sink, 97/a
     restart read-move-routine
-    # 'read-move' still waiting for input
+    # 'read-move' still waiting for keypress
     wait-for-routine-to-block read-move-routine
     read-move-state <- routine-state read-move-routine
     waiting? <- not-equal read-move-state, 2/discontinued
@@ -376,7 +376,7 @@ F read-move-blocking: routine failed to pause after rank 'a']
     # press '2'
     sink <- write sink, 50/'2'
     restart read-move-routine
-    # 'read-move' still waiting for input
+    # 'read-move' still waiting for keypress
     wait-for-routine-to-block read-move-routine
     read-move-state <- routine-state read-move-routine
     waiting? <- not-equal read-move-state, 2/discontinued
@@ -385,7 +385,7 @@ F read-move-blocking: routine failed to pause after file 'a2']
     # press '-'
     sink <- write sink, 45/'-'
     restart read-move-routine
-    # 'read-move' still waiting for input
+    # 'read-move' still waiting for keypress
     wait-for-routine-to-block read-move-routine
     read-move-state <- routine-state read-move-routine
     waiting? <- not-equal read-move-state, 2/discontinued
@@ -394,7 +394,7 @@ F read-move-blocking: routine failed to pause after hyphen 'a2-']
     # press 'a'
     sink <- write sink, 97/a
     restart read-move-routine
-    # 'read-move' still waiting for input
+    # 'read-move' still waiting for keypress
     wait-for-routine-to-block read-move-routine
     read-move-state <- routine-state read-move-routine
     waiting? <- not-equal read-move-state, 2/discontinued
@@ -403,7 +403,7 @@ F read-move-blocking: routine failed to pause after rank 'a2-a']
     # press '4'
     sink <- write sink, 52/'4'
     restart read-move-routine
-    # 'read-move' still waiting for input
+    # 'read-move' still waiting for keypress
     wait-for-routine-to-block read-move-routine
     read-move-state <- routine-state read-move-routine
     waiting? <- not-equal read-move-state, 2/discontinued
@@ -431,7 +431,7 @@ scenario read-move-quit [
   source:&:source:char, sink:&:sink:char <- new-channel 2/capacity
   read-move-routine:num <- start-running read-move, source, screen:&:screen
   run [
-    # 'read-move' is waiting for input
+    # 'read-move' is waiting for keypress
     wait-for-routine-to-block read-move-routine
     read-move-state:num <- routine-state read-move-routine
     waiting?:bool <- not-equal read-move-state, 2/discontinued
@@ -459,7 +459,7 @@ scenario read-move-illegal-file [
   source:&:source:char, sink:&:sink:char <- new-channel 2/capacity
   read-move-routine:num <- start-running read-move, source, screen:&:screen
   run [
-    # 'read-move' is waiting for input
+    # 'read-move' is waiting for keypress
     wait-for-routine-to-block read-move-routine
     read-move-state:num <- routine-state read-move-routine
     waiting?:bool <- not-equal read-move-state, 2/discontinued
@@ -481,7 +481,7 @@ scenario read-move-illegal-rank [
   source:&:source:char, sink:&:sink:char <- new-channel 2/capacity
   read-move-routine:num <- start-running read-move, source, screen:&:screen
   run [
-    # 'read-move' is waiting for input
+    # 'read-move' is waiting for keypress
     wait-for-routine-to-block read-move-routine
     read-move-state:num <- routine-state read-move-routine
     waiting?:bool <- not-equal read-move-state, 2/discontinued
@@ -504,7 +504,7 @@ scenario read-move-empty [
   source:&:source:char, sink:&:sink:char <- new-channel 2/capacity
   read-move-routine:num <- start-running read-move, source, screen:&:screen
   run [
-    # 'read-move' is waiting for input
+    # 'read-move' is waiting for keypress
     wait-for-routine-to-block read-move-routine
     read-move-state:num <- routine-state read-move-routine
     waiting?:bool <- not-equal read-move-state, 2/discontinued
@@ -523,7 +523,7 @@ F read-move-empty: routine failed to pause after coming up (before any keys were
 
 def make-move board:board, m:&:move -> board:board [
   local-scope
-  load-ingredients
+  load-inputs
   from-file:num <- get *m, from-file:offset
   from-rank:num <- get *m, from-rank:offset
   to-file:num <- get *m, to-file:offset
diff --git a/continuation1.mu b/continuation1.mu
index 47d036fa..467b21f5 100644
--- a/continuation1.mu
+++ b/continuation1.mu
@@ -19,7 +19,7 @@ def main [
 
 def create-yielder -> n:num [
   local-scope
-  load-ingredients
+  load-inputs
   return-continuation-until-mark
   return 1
 ]
diff --git a/continuation2.mu b/continuation2.mu
index 0e698aec..def83867 100644
--- a/continuation2.mu
+++ b/continuation2.mu
@@ -28,7 +28,7 @@ def main [
 
 def create-yielder l:&:list:num -> n:num, done?:bool [
   local-scope
-  load-ingredients
+  load-inputs
   return-continuation-until-mark
   done? <- equal l, 0
   return-if done?, 0
diff --git a/continuation4.mu b/continuation4.mu
index b8398945..215fc29d 100644
--- a/continuation4.mu
+++ b/continuation4.mu
@@ -30,7 +30,7 @@ def main [
 
 def create-yielder l:&:list:num -> n:num, done?:bool [
   local-scope
-  load-ingredients
+  load-inputs
   {
     done? <- equal l, 0
     break-if done?
diff --git a/continuation5.mu b/continuation5.mu
index 9f9b87cb..e3030149 100644
--- a/continuation5.mu
+++ b/continuation5.mu
@@ -1,5 +1,5 @@
 # Example program showing that a 'paused' continuation can be 'resumed' with
-# ingredients.
+# inputs.
 #
 # Print out a list of numbers, first adding 0 to the first, 1 to the second, 2
 # to the third, and so on.
@@ -33,7 +33,7 @@ def main [
 
 def create-yielder l:&:list:num -> n:num, done?:bool [
   local-scope
-  load-ingredients
+  load-inputs
   a:num <- copy 0
   {
     done? <- equal l, 0
diff --git a/counters.mu b/counters.mu
index dfa3e765..ea2fa77d 100644
--- a/counters.mu
+++ b/counters.mu
@@ -3,12 +3,12 @@
 
 def new-counter n:num -> default-space:space [
   default-space <- new location:type, 30
-  load-ingredients  # initialize n
+  load-inputs  # initialize n
 ]
 
 def increment-counter outer:space/names:new-counter, x:num -> n:num/space:1 [
   local-scope
-  load-ingredients
+  load-inputs
   0:space/names:new-counter <- copy outer  # setup outer space; it *must* come from 'new-counter'
   n/space:1 <- add n/space:1, x
 ]
diff --git a/edit/001-editor.mu b/edit/001-editor.mu
index 9e136b7e..74f0ab20 100644
--- a/edit/001-editor.mu
+++ b/edit/001-editor.mu
@@ -4,7 +4,7 @@
 # screen dimensions, then stop
 def main text:text [
   local-scope
-  load-ingredients
+  load-inputs
   open-console
   clear-screen 0/screen  # non-scrolling app
   e:&:editor <- new-editor text, 0/left, 5/right
@@ -50,7 +50,7 @@ container editor [
 #   right is exclusive
 def new-editor s:text, left:num, right:num -> result:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   # no clipping of bounds
   right <- subtract right, 1
   result <- new editor:type
@@ -71,7 +71,7 @@ def new-editor s:text, left:num, right:num -> result:&:editor [
 
 def insert-text editor:&:editor, text:text -> editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   curr:&:duplex-list:char <- get *editor, data:offset
   insert curr, text
 ]
@@ -106,7 +106,7 @@ scenario editor-initializes-without-data [
 # outside text.
 def render screen:&:screen, editor:&:editor -> last-row:num, last-column:num, screen:&:screen, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless editor, 1/top, 0/left
   left:num <- get *editor, left:offset
   screen-height:num <- screen-height screen
@@ -206,7 +206,7 @@ def render screen:&:screen, editor:&:editor -> last-row:num, last-column:num, sc
 
 def clear-screen-from screen:&:screen, row:num, column:num, left:num, right:num -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
 #?   stash [clear-screen-from] row column [between] left [and] right
   # if it's the real screen, use the optimized primitive
   {
@@ -222,7 +222,7 @@ def clear-screen-from screen:&:screen, row:num, column:num, left:num, right:num
 
 def clear-rest-of-screen screen:&:screen, row:num, left:num, right:num -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   row <- add row, 1
   # if it's the real screen, use the optimized primitive
   {
@@ -396,7 +396,7 @@ after <character-c-received> [
 # so far the previous color is all the information we need; that may change
 def get-color color:num, c:char -> color:num [
   local-scope
-  load-ingredients
+  load-inputs
   color-is-white?:bool <- equal color, 7/white
   # if color is white and next character is '#', switch color to blue
   {
diff --git a/edit/002-typing.mu b/edit/002-typing.mu
index f5bbeb6f..709e8d22 100644
--- a/edit/002-typing.mu
+++ b/edit/002-typing.mu
@@ -4,7 +4,7 @@
 # hit ctrl-c to exit
 def! main text:text [
   local-scope
-  load-ingredients
+  load-inputs
   open-console
   clear-screen 0/screen  # non-scrolling app
   editor:&:editor <- new-editor text, 5/left, 45/right
@@ -15,7 +15,7 @@ def! main text:text [
 
 def editor-event-loop screen:&:screen, console:&:console, editor:&:editor -> screen:&:screen, console:&:console, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   {
     # looping over each (keyboard or touch) event as it occurs
     +next-event
@@ -49,7 +49,7 @@ def editor-event-loop screen:&:screen, console:&:console, editor:&:editor -> scr
 # process click, return if it was on current editor
 def move-cursor editor:&:editor, screen:&:screen, t:touch-event -> in-focus?:bool, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless editor, 0/false
   click-row:num <- get t, row:offset
   return-unless click-row, 0/false  # ignore clicks on 'menu'
@@ -74,7 +74,7 @@ def move-cursor editor:&:editor, screen:&:screen, t:touch-event -> in-focus?:boo
 # past the last line it positions at end of last line.
 def snap-cursor editor:&:editor, screen:&:screen, target-row:num, target-column:num -> editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless editor
   left:num <- get *editor, left:offset
   right:num <- get *editor, right:offset
@@ -165,7 +165,7 @@ def snap-cursor editor:&:editor, screen:&:screen, target-row:num, target-column:
 # Set 'go-render?' to true to indicate the caller must perform a non-minimal update.
 def handle-keyboard-event screen:&:screen, editor:&:editor, e:event -> go-render?:bool, screen:&:screen, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless editor, 0/don't-render
   screen-width:num <- screen-width screen
   screen-height:num <- screen-height screen
@@ -202,7 +202,7 @@ def handle-keyboard-event screen:&:screen, editor:&:editor, e:event -> go-render
 
 def insert-at-cursor editor:&:editor, c:char, screen:&:screen -> go-render?:bool, editor:&:editor, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
   insert c, before-cursor
   before-cursor <- next before-cursor
@@ -264,7 +264,7 @@ def insert-at-cursor editor:&:editor, c:char, screen:&:screen -> go-render?:bool
 # helper for tests
 def editor-render screen:&:screen, editor:&:editor -> screen:&:screen, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   old-top-idx:num <- save-top-idx screen
   left:num <- get *editor, left:offset
   right:num <- get *editor, right:offset
@@ -867,7 +867,7 @@ after <handle-special-character> [
 
 def insert-new-line-and-indent editor:&:editor, screen:&:screen -> editor:&:editor, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   cursor-row:num <- get *editor, cursor-row:offset
   cursor-column:num <- get *editor, cursor-column:offset
   before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
@@ -913,7 +913,7 @@ def insert-new-line-and-indent editor:&:editor, screen:&:screen -> editor:&:edit
 
 def at-start-of-wrapped-line? editor:&:editor -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   left:num <- get *editor, left:offset
   cursor-column:num <- get *editor, cursor-column:offset
   cursor-at-left?:bool <- equal cursor-column, left
@@ -933,7 +933,7 @@ def at-start-of-wrapped-line? editor:&:editor -> result:bool [
 # the number of spaces at the start of the line containing 'curr'.
 def line-indent curr:&:duplex-list:char, start:&:duplex-list:char -> result:num [
   local-scope
-  load-ingredients
+  load-inputs
   result:num <- copy 0
   return-unless curr
   at-start?:bool <- equal curr, start
@@ -1115,22 +1115,22 @@ after <handle-special-key> [
 
 def draw-horizontal screen:&:screen, row:num, x:num, right:num -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   height:num <- screen-height screen
   past-bottom?:bool <- greater-or-equal row, height
   return-if past-bottom?
-  style:char, style-found?:bool <- next-ingredient
+  style:char, style-found?:bool <- next-input
   {
     break-if style-found?
     style <- copy 9472/horizontal
   }
-  color:num, color-found?:bool <- next-ingredient
+  color:num, color-found?:bool <- next-input
   {
     # default color to white
     break-if color-found?
     color <- copy 245/grey
   }
-  bg-color:num, bg-color-found?:bool <- next-ingredient
+  bg-color:num, bg-color-found?:bool <- next-input
   {
     break-if bg-color-found?
     bg-color <- copy 0/black
diff --git a/edit/003-shortcuts.mu b/edit/003-shortcuts.mu
index df40a6e4..e24f7e72 100644
--- a/edit/003-shortcuts.mu
+++ b/edit/003-shortcuts.mu
@@ -108,7 +108,7 @@ after <handle-special-character> [
 #   backspaced-cell - value deleted (or 0 if nothing was deleted) so we can save it for undo, etc.
 def delete-before-cursor editor:&:editor, screen:&:screen -> go-render?:bool, backspaced-cell:&:duplex-list:char, editor:&:editor, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
   data:&:duplex-list:char <- get *editor, data:offset
   # if at start of text (before-cursor at § sentinel), return
@@ -155,7 +155,7 @@ def delete-before-cursor editor:&:editor, screen:&:screen -> go-render?:bool, ba
 
 def move-cursor-coordinates-left editor:&:editor -> go-render?:bool, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   go-render?:bool <- copy 0/false
   before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
   cursor-row:num <- get *editor, cursor-row:offset
@@ -218,7 +218,7 @@ def move-cursor-coordinates-left editor:&:editor -> go-render?:bool, editor:&:ed
 # the length of the previous line before the 'curr' pointer.
 def previous-line-length curr:&:duplex-list:char, start:&:duplex-list:char -> result:num [
   local-scope
-  load-ingredients
+  load-inputs
   result:num <- copy 0
   return-unless curr
   at-start?:bool <- equal curr, start
@@ -372,7 +372,7 @@ after <handle-special-key> [
 
 def delete-at-cursor editor:&:editor, screen:&:screen -> go-render?:bool, deleted-cell:&:duplex-list:char, editor:&:editor, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
   data:&:duplex-list:char <- get *editor, data:offset
   deleted-cell:&:duplex-list:char <- next before-cursor
@@ -452,7 +452,7 @@ after <handle-special-key> [
 
 def move-cursor-coordinates-right editor:&:editor, screen-height:num -> go-render?:bool, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   before-cursor:&:duplex-list:char <- get *editor before-cursor:offset
   cursor-row:num <- get *editor, cursor-row:offset
   cursor-column:num <- get *editor, cursor-column:offset
@@ -999,7 +999,7 @@ after <handle-special-key> [
 
 def move-to-previous-line editor:&:editor -> go-render?:bool, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   go-render?:bool <- copy 0/false
   cursor-row:num <- get *editor, cursor-row:offset
   cursor-column:num <- get *editor, cursor-column:offset
@@ -1353,7 +1353,7 @@ after <handle-special-key> [
 
 def move-to-next-line editor:&:editor, screen-height:num -> go-render?:bool, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   cursor-row:num <- get *editor, cursor-row:offset
   cursor-column:num <- get *editor, cursor-column:offset
   before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
@@ -1564,7 +1564,7 @@ after <handle-special-key> [
 # precondition: cursor-column should be in a consistent state
 def move-to-start-of-screen-line editor:&:editor -> editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   # update cursor column
   left:num <- get *editor, left:offset
   col:num <- get *editor, cursor-column:offset
@@ -1787,7 +1787,7 @@ after <handle-special-key> [
 
 def move-to-end-of-line editor:&:editor -> editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
   cursor-column:num <- get *editor, cursor-column:offset
   right:num <- get *editor, right:offset
@@ -1970,7 +1970,7 @@ after <handle-special-character> [
 
 def minimal-render-for-ctrl-u screen:&:screen, editor:&:editor, deleted-cells:&:duplex-list:char -> go-render?:bool, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   curr-column:num <- get *editor, cursor-column:offset
   # accumulate the current line as text and render it
   buf:&:buffer:char <- new-buffer 30  # accumulator for the text we need to render
@@ -2005,7 +2005,7 @@ def minimal-render-for-ctrl-u screen:&:screen, editor:&:editor, deleted-cells:&:
 
 def delete-to-start-of-line editor:&:editor -> result:&:duplex-list:char, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   # compute range to delete
   init:&:duplex-list:char <- get *editor, data:offset
   top-of-screen:&:duplex-list:char <- get *editor, top-of-screen:offset
@@ -2061,7 +2061,7 @@ def delete-to-start-of-line editor:&:editor -> result:&:duplex-list:char, editor
 
 def render-code screen:&:screen, s:text, left:num, right:num, row:num -> row:num, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless s
   color:num <- copy 7/white
   column:num <- copy left
@@ -2548,7 +2548,7 @@ after <handle-special-character> [
 
 def minimal-render-for-ctrl-k screen:&:screen, editor:&:editor, deleted-cells:&:duplex-list:char -> go-render?:bool, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   # if we deleted nothing, there's nothing to render
   return-unless deleted-cells, 0/dont-render
   # if the line used to wrap before, give up and render the whole screen
@@ -2566,7 +2566,7 @@ def minimal-render-for-ctrl-k screen:&:screen, editor:&:editor, deleted-cells:&:
 
 def delete-to-end-of-line editor:&:editor -> result:&:duplex-list:char, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   # compute range to delete
   start:&:duplex-list:char <- get *editor, before-cursor:offset
   end:&:duplex-list:char <- next start
@@ -2803,7 +2803,7 @@ after <scroll-down> [
 # Beware: never return null pointer.
 def before-start-of-next-line original:&:duplex-list:char, max:num -> curr:&:duplex-list:char [
   local-scope
-  load-ingredients
+  load-inputs
   count:num <- copy 0
   curr:&:duplex-list:char <- copy original
   # skip the initial newline if it exists
@@ -3174,7 +3174,7 @@ after <scroll-up> [
 # Beware: never return null pointer.
 def before-previous-screen-line in:&:duplex-list:char, editor:&:editor -> out:&:duplex-list:char [
   local-scope
-  load-ingredients
+  load-inputs
   curr:&:duplex-list:char <- copy in
   c:char <- get *curr, value:offset
   # compute max, number of characters to skip
@@ -3596,7 +3596,7 @@ after <handle-special-key> [
 # taking up the entire screen
 def page-down editor:&:editor -> editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   # if editor contents don't overflow screen, do nothing
   bottom-of-screen:&:duplex-list:char <- get *editor, bottom-of-screen:offset
   return-unless bottom-of-screen
@@ -3621,7 +3621,7 @@ def page-down editor:&:editor -> editor:&:editor [
 # jump to previous newline
 def move-to-start-of-line editor:&:editor -> editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   # update cursor column
   left:num <- get *editor, left:offset
   cursor-column:num <- copy left
@@ -3819,7 +3819,7 @@ after <handle-special-key> [
 
 def page-up editor:&:editor, screen-height:num -> editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   max:num <- subtract screen-height, 1/menu-bar, 1/overlapping-line
   count:num <- copy 0
   top-of-screen:&:duplex-list:char <- get *editor, top-of-screen:offset
@@ -4148,7 +4148,7 @@ after <handle-special-character> [
 
 def line-up editor:&:editor, screen-height:num -> go-render?:bool, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   left:num <- get *editor, left:offset
   right:num <- get *editor, right:offset
   max:num <- subtract right, left
@@ -4179,7 +4179,7 @@ after <handle-special-character> [
 
 def line-down editor:&:editor, screen-height:num -> go-render?:bool, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   old-top:&:duplex-list:char <- get *editor, top-of-screen:offset
   new-top:&:duplex-list:char <- before-previous-screen-line old-top, editor
   movement?:bool <- not-equal old-top, new-top
@@ -4249,7 +4249,7 @@ after <handle-special-character> [
 # the caller to go-render? the entire screen.
 def render-line-from-start screen:&:screen, editor:&:editor, right-margin:num -> go-render?:bool, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   before-line-start:&:duplex-list:char <- before-start-of-screen-line editor
   line-start:&:duplex-list:char <- next before-line-start
   color:num <- copy 7/white
@@ -4279,7 +4279,7 @@ def render-line-from-start screen:&:screen, editor:&:editor, right-margin:num ->
 
 def before-start-of-screen-line editor:&:editor -> result:&:duplex-list:char [
   local-scope
-  load-ingredients
+  load-inputs
   cursor:&:duplex-list:char <- get *editor, before-cursor:offset
   {
     next:&:duplex-list:char <- next cursor
diff --git a/edit/004-programming-environment.mu b/edit/004-programming-environment.mu
index 73d26d4d..cff42327 100644
--- a/edit/004-programming-environment.mu
+++ b/edit/004-programming-environment.mu
@@ -20,7 +20,7 @@ container environment [
 
 def new-programming-environment resources:&:resources, screen:&:screen, test-sandbox-editor-contents:text -> result:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   width:num <- screen-width screen
   result <- new environment:type
   # recipe editor on the left
@@ -38,7 +38,7 @@ def new-programming-environment resources:&:resources, screen:&:screen, test-san
 
 def event-loop screen:&:screen, console:&:console, env:&:environment, resources:&:resources -> screen:&:screen, console:&:console, env:&:environment, resources:&:resources [
   local-scope
-  load-ingredients
+  load-inputs
   recipes:&:editor <- get *env, recipes:offset
   current-sandbox:&:editor <- get *env, current-sandbox:offset
   sandbox-in-focus?:bool <- get *env, sandbox-in-focus?:offset
@@ -130,7 +130,7 @@ def event-loop screen:&:screen, console:&:console, env:&:environment, resources:
 
 def resize screen:&:screen, env:&:environment -> env:&:environment, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   clear-screen screen  # update screen dimensions
   width:num <- screen-width screen
   divider:num, _ <- divide-with-remainder width, 2
@@ -157,7 +157,7 @@ def resize screen:&:screen, env:&:environment -> env:&:environment, screen:&:scr
 # off-screen, it resets cursor-row and cursor-column.
 def render-without-moving-cursor screen:&:screen, editor:&:editor -> last-row:num, last-column:num, screen:&:screen, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless editor, 1/top, 0/left
   left:num <- get *editor, left:offset
   screen-height:num <- screen-height screen
@@ -401,7 +401,7 @@ type render-recipe = (recipe (address screen) (address editor) -> number number
 
 def render-all screen:&:screen, env:&:environment, render-editor:render-recipe -> screen:&:screen, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   trace 10, [app], [render all]
   # top menu
   trace 11, [app], [render top menu]
@@ -430,7 +430,7 @@ def render-all screen:&:screen, env:&:environment, render-editor:render-recipe -
 
 def render-recipes screen:&:screen, env:&:environment, render-editor:render-recipe -> screen:&:screen, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   trace 11, [app], [render recipes]
   old-top-idx:num <- save-top-idx screen
   recipes:&:editor <- get *env, recipes:offset
@@ -452,7 +452,7 @@ def render-recipes screen:&:screen, env:&:environment, render-editor:render-reci
 # replaced in a later layer
 def render-sandbox-side screen:&:screen, env:&:environment, render-editor:render-recipe -> screen:&:screen, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   trace 11, [app], [render sandboxes]
   old-top-idx:num <- save-top-idx screen
   current-sandbox:&:editor <- get *env, current-sandbox:offset
@@ -471,7 +471,7 @@ def render-sandbox-side screen:&:screen, env:&:environment, render-editor:render
 
 def update-cursor screen:&:screen, recipes:&:editor, current-sandbox:&:editor, sandbox-in-focus?:bool, env:&:environment -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   <update-cursor-special-cases>
   {
     break-if sandbox-in-focus?
@@ -505,13 +505,13 @@ after <global-type> [
 
 def draw-vertical screen:&:screen, col:num, y:num, bottom:num -> screen:&:screen [
   local-scope
-  load-ingredients
-  style:char, style-found?:bool <- next-ingredient
+  load-inputs
+  style:char, style-found?:bool <- next-input
   {
     break-if style-found?
     style <- copy 9474/vertical
   }
-  color:num, color-found?:bool <- next-ingredient
+  color:num, color-found?:bool <- next-input
   {
     # default color to white
     break-if color-found?
diff --git a/edit/005-sandbox.mu b/edit/005-sandbox.mu
index 869b4ca4..bb991504 100644
--- a/edit/005-sandbox.mu
+++ b/edit/005-sandbox.mu
@@ -145,7 +145,7 @@ after <global-keypress> [
 
 def run-sandboxes env:&:environment, resources:&:resources, screen:&:screen -> errors-found?:bool, env:&:environment, resources:&:resources, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   errors-found?:bool <- update-recipes env, resources, screen
   jump-if errors-found?, +return
   # check contents of right editor (sandbox)
@@ -196,7 +196,7 @@ def run-sandboxes env:&:environment, resources:&:resources, screen:&:screen -> e
 # replaced in a later layer (whereupon errors-found? will actually be set)
 def update-recipes env:&:environment, resources:&:resources, screen:&:screen -> errors-found?:bool, env:&:environment, resources:&:resources, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   recipes:&:editor <- get *env, recipes:offset
   in:text <- editor-contents recipes
   resources <- dump resources, [lesson/recipes.mu], in
@@ -207,7 +207,7 @@ def update-recipes env:&:environment, resources:&:resources, screen:&:screen ->
 # replaced in a later layer
 def update-sandbox sandbox:&:sandbox, env:&:environment, idx:num -> sandbox:&:sandbox, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   data:text <- get *sandbox, data:offset
   response:text, _, fake-screen:&:screen <- run-sandboxed data
   *sandbox <- put *sandbox, response:offset, response
@@ -216,14 +216,14 @@ def update-sandbox sandbox:&:sandbox, env:&:environment, idx:num -> sandbox:&:sa
 
 def update-status screen:&:screen, msg:text, color:num -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   screen <- move-cursor screen, 0, 2
   screen <- print screen, msg, color, 238/grey/background
 ]
 
 def save-sandboxes env:&:environment, resources:&:resources -> resources:&:resources [
   local-scope
-  load-ingredients
+  load-inputs
   trace 11, [app], [save sandboxes]
   current-sandbox:&:editor <- get *env, current-sandbox:offset
   # first clear previous versions, in case we deleted some sandbox
@@ -241,7 +241,7 @@ def save-sandboxes env:&:environment, resources:&:resources -> resources:&:resou
 
 def save-sandbox resources:&:resources, sandbox:&:sandbox, sandbox-index:num -> resources:&:resources [
   local-scope
-  load-ingredients
+  load-inputs
   data:text <- get *sandbox, data:offset
   filename:text <- append [lesson/], sandbox-index
   resources <- dump resources, filename, data
@@ -250,7 +250,7 @@ def save-sandbox resources:&:resources, sandbox:&:sandbox, sandbox-index:num ->
 
 def! render-sandbox-side screen:&:screen, env:&:environment, render-editor:render-recipe -> screen:&:screen, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   trace 11, [app], [render sandbox side]
   old-top-idx:num <- save-top-idx screen
   current-sandbox:&:editor <- get *env, current-sandbox:offset
@@ -277,7 +277,7 @@ def! render-sandbox-side screen:&:screen, env:&:environment, render-editor:rende
 
 def render-sandboxes screen:&:screen, sandbox:&:sandbox, left:num, right:num, row:num, render-from:num, idx:num -> row:num, screen:&:screen, sandbox:&:sandbox [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless sandbox
   screen-height:num <- screen-height screen
   hidden?:bool <- lesser-than idx, render-from
@@ -332,7 +332,7 @@ def render-sandboxes screen:&:screen, sandbox:&:sandbox, left:num, right:num, ro
 
 def render-sandbox-menu screen:&:screen, sandbox-index:num, left:num, right:num -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   move-cursor-to-column screen, left
   edit-button-left:num, edit-button-right:num, copy-button-left:num, copy-button-right:num, recipe-button-left:num, recipe-button-right:num, delete-button-left:num <- sandbox-menu-columns left, right
   print screen, sandbox-index, 232/dark-grey, 245/grey
@@ -377,7 +377,7 @@ scenario skip-rendering-sandbox-menu-past-bottom-row [
 # all left/right pairs are inclusive
 def sandbox-menu-columns left:num, right:num -> edit-button-left:num, edit-button-right:num, copy-button-left:num, copy-button-right:num, recipe-button-left:num, recipe-button-right:num, delete-button-left:num [
   local-scope
-  load-ingredients
+  load-inputs
   start-buttons:num <- add left, 4/space-for-sandbox-index
   buttons-space:num <- subtract right, start-buttons
   button-width:num <- divide-with-remainder buttons-space, 4  # integer division
@@ -397,7 +397,7 @@ def sandbox-menu-columns left:num, right:num -> edit-button-left:num, edit-butto
 # like 'render-code' but without syntax-based colorization
 def render-text screen:&:screen, s:text, left:num, right:num, color:num, row:num -> row:num, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless s
   column:num <- copy left
   screen <- move-cursor screen, row, column
@@ -474,7 +474,7 @@ scenario render-text-wraps-barely-long-lines [
 # assumes programming environment has no sandboxes; restores them from previous session
 def restore-sandboxes env:&:environment, resources:&:resources -> env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   # read all scenarios, pushing them to end of a list of scenarios
   idx:num <- copy 0
   curr:&:sandbox <- copy 0
@@ -508,7 +508,7 @@ def restore-sandboxes env:&:environment, resources:&:resources -> env:&:environm
 # leave cursor at start of next line
 def render-screen screen:&:screen, sandbox-screen:&:screen, left:num, right:num, row:num -> row:num, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless sandbox-screen
   # print 'screen:'
   row <- render-text screen, [screen:], left, right, 245/grey, row
@@ -682,7 +682,7 @@ scenario run-instruction-manages-screen-per-sandbox [
 
 def editor-contents editor:&:editor -> result:text [
   local-scope
-  load-ingredients
+  load-inputs
   buf:&:buffer:char <- new-buffer 80
   curr:&:duplex-list:char <- get *editor, data:offset
   # skip § sentinel
@@ -944,7 +944,7 @@ after <global-keypress> [
 # return 0 if there's no such sandbox, either because 'in' doesn't exist in 'env', or because it's the first sandbox
 def previous-sandbox env:&:environment, in:&:sandbox -> out:&:sandbox [
   local-scope
-  load-ingredients
+  load-inputs
   curr:&:sandbox <- get *env, sandbox:offset
   return-unless curr, 0/nil
   next:&:sandbox <- get *curr, next-sandbox:offset
diff --git a/edit/006-sandbox-copy.mu b/edit/006-sandbox-copy.mu
index ef9bed24..72f320f6 100644
--- a/edit/006-sandbox-copy.mu
+++ b/edit/006-sandbox-copy.mu
@@ -139,7 +139,7 @@ after <global-touch> [
 # some preconditions for attempting to copy a sandbox
 def should-attempt-copy? click-row:num, click-column:num, env:&:environment -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   # are we below the sandbox editor?
   click-sandbox-area?:bool <- click-on-sandbox-area? click-row, click-column, env
   return-unless click-sandbox-area?, 0/false
@@ -158,7 +158,7 @@ def should-attempt-copy? click-row:num, click-column:num, env:&:environment -> r
 
 def try-copy-sandbox click-row:num, env:&:environment -> clicked-on-copy-button?:bool, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   # identify the sandbox to copy, if the click was actually on the 'copy' button
   sandbox:&:sandbox <- find-sandbox env, click-row
   return-unless sandbox, 0/false
@@ -174,7 +174,7 @@ def try-copy-sandbox click-row:num, env:&:environment -> clicked-on-copy-button?
 
 def find-sandbox env:&:environment, click-row:num -> result:&:sandbox [
   local-scope
-  load-ingredients
+  load-inputs
   curr-sandbox:&:sandbox <- get *env, sandbox:offset
   {
     break-unless curr-sandbox
@@ -189,7 +189,7 @@ def find-sandbox env:&:environment, click-row:num -> result:&:sandbox [
 
 def click-on-sandbox-area? click-row:num, click-column:num, env:&:environment -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   current-sandbox:&:editor <- get *env, current-sandbox:offset
   sandbox-left-margin:num <- get *current-sandbox, left:offset
   on-sandbox-side?:bool <- greater-or-equal click-column, sandbox-left-margin
@@ -202,7 +202,7 @@ def click-on-sandbox-area? click-row:num, click-column:num, env:&:environment ->
 
 def empty-editor? editor:&:editor -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   head:&:duplex-list:char <- get *editor, data:offset
   first:&:duplex-list:char <- next head
   result <- not first
@@ -210,7 +210,7 @@ def empty-editor? editor:&:editor -> result:bool [
 
 def within-range? x:num, low:num, high:num -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   not-too-far-left?:bool <- greater-or-equal x, low
   not-too-far-right?:bool <- lesser-or-equal x, high
   result <- and not-too-far-left? not-too-far-right?
@@ -359,7 +359,7 @@ after <global-touch> [
 # some preconditions for attempting to copy a sandbox into the recipe side
 def should-copy-to-recipe? click-row:num, click-column:num, env:&:environment -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   # are we below the sandbox editor?
   click-sandbox-area?:bool <- click-on-sandbox-area? click-row, click-column, env
   return-unless click-sandbox-area?, 0/false
@@ -374,7 +374,7 @@ def should-copy-to-recipe? click-row:num, click-column:num, env:&:environment ->
 
 def prepend-sandbox-into-recipe-side click-row:num, env:&:environment -> clicked-on-copy-to-recipe-button?:bool, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   sandbox:&:sandbox <- find-sandbox env, click-row
   return-unless sandbox, 0/false
   recipe-editor:&:editor <- get *env, recipes:offset
diff --git a/edit/007-sandbox-delete.mu b/edit/007-sandbox-delete.mu
index 2db88964..0e599758 100644
--- a/edit/007-sandbox-delete.mu
+++ b/edit/007-sandbox-delete.mu
@@ -82,7 +82,7 @@ after <global-touch> [
 # some preconditions for attempting to delete a sandbox
 def should-attempt-delete? click-row:num, click-column:num, env:&:environment -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   # are we below the sandbox editor?
   click-sandbox-area?:bool <- click-on-sandbox-area? click-row, click-column, env
   return-unless click-sandbox-area?, 0/false
@@ -97,7 +97,7 @@ def should-attempt-delete? click-row:num, click-column:num, env:&:environment ->
 
 def try-delete-sandbox click-row:num, env:&:environment -> clicked-on-delete-button?:bool, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   # identify the sandbox to delete, if the click was actually on the 'delete' button
   sandbox:&:sandbox <- find-sandbox env, click-row
   return-unless sandbox, 0/false
@@ -107,7 +107,7 @@ def try-delete-sandbox click-row:num, env:&:environment -> clicked-on-delete-but
 
 def delete-sandbox env:&:environment, sandbox:&:sandbox -> env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   curr-sandbox:&:sandbox <- get *env, sandbox:offset
   first-sandbox?:bool <- equal curr-sandbox, sandbox
   {
diff --git a/edit/008-sandbox-edit.mu b/edit/008-sandbox-edit.mu
index eeb0cd69..ab4f1f63 100644
--- a/edit/008-sandbox-edit.mu
+++ b/edit/008-sandbox-edit.mu
@@ -122,7 +122,7 @@ after <global-touch> [
 # some preconditions for attempting to edit a sandbox
 def should-attempt-edit? click-row:num, click-column:num, env:&:environment -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   # are we below the sandbox editor?
   click-sandbox-area?:bool <- click-on-sandbox-area? click-row, click-column, env
   return-unless click-sandbox-area?, 0/false
@@ -141,7 +141,7 @@ def should-attempt-edit? click-row:num, click-column:num, env:&:environment -> r
 
 def try-edit-sandbox click-row:num, env:&:environment -> clicked-on-edit-button?:bool, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   # identify the sandbox to edit, if the click was actually on the 'edit' button
   sandbox:&:sandbox <- find-sandbox env, click-row
   return-unless sandbox, 0/false
diff --git a/edit/009-sandbox-test.mu b/edit/009-sandbox-test.mu
index 4893e1ea..b871107e 100644
--- a/edit/009-sandbox-test.mu
+++ b/edit/009-sandbox-test.mu
@@ -151,7 +151,7 @@ after <global-touch> [
 
 def find-click-in-sandbox-output env:&:environment, click-row:num -> sandbox:&:sandbox, sandbox-index:num [
   local-scope
-  load-ingredients
+  load-inputs
   # assert click-row >= sandbox.starting-row-on-screen
   sandbox:&:sandbox <- get *env, sandbox:offset
   start:num <- get *sandbox, starting-row-on-screen:offset
@@ -179,7 +179,7 @@ def find-click-in-sandbox-output env:&:environment, click-row:num -> sandbox:&:s
 
 def toggle-expected-response sandbox:&:sandbox -> sandbox:&:sandbox [
   local-scope
-  load-ingredients
+  load-inputs
   expected-response:text <- get *sandbox, expected-response:offset
   {
     # if expected-response is set, reset
@@ -206,7 +206,7 @@ after <render-sandbox-response> [
 
 def render-sandbox-response screen:&:screen, sandbox:&:sandbox, left:num, right:num -> row:num, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   sandbox-response:text <- get *sandbox, response:offset
   expected-response:text <- get *sandbox, expected-response:offset
   row:num <- get *sandbox response-starting-row-on-screen:offset
diff --git a/edit/010-sandbox-trace.mu b/edit/010-sandbox-trace.mu
index 2d681b8f..cc8b2805 100644
--- a/edit/010-sandbox-trace.mu
+++ b/edit/010-sandbox-trace.mu
@@ -174,7 +174,7 @@ container sandbox [
 # replaced in a later layer
 def! update-sandbox sandbox:&:sandbox, env:&:environment, idx:num -> sandbox:&:sandbox, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   data:text <- get *sandbox, data:offset
   response:text, _, fake-screen:&:screen, trace:text <- run-sandboxed data
   *sandbox <- put *sandbox, response:offset, response
@@ -211,7 +211,7 @@ after <global-touch> [
 
 def find-click-in-sandbox-code env:&:environment, click-row:num -> sandbox:&:sandbox [
   local-scope
-  load-ingredients
+  load-inputs
   # assert click-row >= sandbox.starting-row-on-screen
   sandbox <- get *env, sandbox:offset
   start:num <- get *sandbox, starting-row-on-screen:offset
diff --git a/edit/011-errors.mu b/edit/011-errors.mu
index 554130b5..af94c2ed 100644
--- a/edit/011-errors.mu
+++ b/edit/011-errors.mu
@@ -7,7 +7,7 @@ container environment [
 # copy code from recipe editor, persist to disk, load, save any errors
 def! update-recipes env:&:environment, resources:&:resources, screen:&:screen -> errors-found?:bool, env:&:environment, resources:&:resources, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   recipes:&:editor <- get *env, recipes:offset
   in:text <- editor-contents recipes
   resources <- dump resources, [lesson/recipes.mu], in
@@ -41,7 +41,7 @@ before <end-render-recipe-components> [
 
 def render-recipe-errors env:&:environment, screen:&:screen -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   recipe-errors:text <- get *env, recipe-errors:offset
   return-unless recipe-errors
   recipes:&:editor <- get *env, recipes:offset
@@ -96,7 +96,7 @@ container sandbox [
 
 def! update-sandbox sandbox:&:sandbox, env:&:environment, idx:num -> sandbox:&:sandbox, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   data:text <- get *sandbox, data:offset
   response:text, errors:text, fake-screen:&:screen, trace:text, completed?:bool <- run-sandboxed data
   *sandbox <- put *sandbox, response:offset, response
diff --git a/edit/012-editor-undo.mu b/edit/012-editor-undo.mu
index 024a0398..161e6843 100644
--- a/edit/012-editor-undo.mu
+++ b/edit/012-editor-undo.mu
@@ -201,7 +201,7 @@ before <end-insert-enter> [
 # moving the cursor can lose work on the undo stack.
 def add-operation editor:&:editor, op:&:operation -> editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   undo:&:list:&:operation <- get *editor, undo:offset
   undo <- push op undo
   *editor <- put *editor, undo:offset, undo
diff --git a/factorial.mu b/factorial.mu
index 8a261207..cf2284b2 100644
--- a/factorial.mu
+++ b/factorial.mu
@@ -9,7 +9,7 @@ def main [
 
 def factorial n:num -> result:num [
   local-scope
-  load-ingredients
+  load-inputs
   {
     # if n=0 return 1
     zero?:bool <- equal n, 0
diff --git a/html/001help.cc.html b/html/001help.cc.html
index f04fd9dd..16025a66 100644
--- a/html/001help.cc.html
+++ b/html/001help.cc.html
@@ -220,7 +220,7 @@ if ('onhashchange' in window) {
 <span id="L157" class="LineNr">157 </span>  sigaction<span class="Delimiter">(</span><span class="Constant">SIGABRT</span><span class="Delimiter">,</span> &amp;action<span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">);</span>  <span class="Comment">// assert() failure or integer overflow on linux (with -ftrapv)</span>
 <span id="L158" class="LineNr">158 </span>  sigaction<span class="Delimiter">(</span><span class="Constant">SIGILL</span><span class="Delimiter">,</span>  &amp;action<span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">);</span>  <span class="Comment">// integer overflow on OS X (with -ftrapv)</span>
 <span id="L159" class="LineNr">159 </span><span class="Delimiter">}</span>
-<span id="L160" class="LineNr">160 </span><span class="Normal">void</span> <a href='001help.cc.html#L160'>dump_and_exit</a><span class="Delimiter">(</span><span class="Normal">int</span> sig<span class="Delimiter">,</span> <a href='001help.cc.html#L258'>unused</a> siginfo_t* dummy1<span class="Delimiter">,</span> <a href='001help.cc.html#L258'>unused</a> <span class="Normal">void</span>* dummy2<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L160" class="LineNr">160 </span><span class="Normal">void</span> <a href='001help.cc.html#L160'>dump_and_exit</a><span class="Delimiter">(</span><span class="Normal">int</span> sig<span class="Delimiter">,</span> <a href='001help.cc.html#L259'>unused</a> siginfo_t* dummy1<span class="Delimiter">,</span> <a href='001help.cc.html#L259'>unused</a> <span class="Normal">void</span>* dummy2<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L161" class="LineNr">161 </span>  <span class="Normal">switch</span> <span class="Delimiter">(</span>sig<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L162" class="LineNr">162 </span>  <span class="Conceal">¦</span> <span class="Normal">case</span> <span class="Constant">SIGABRT</span>:
 <span id="L163" class="LineNr">163 </span><span class="PreProc">  </span><span class="Conceal">¦</span><span class="PreProc"> </span><span class="Conceal">¦</span><span class="PreProc"> #ifndef __APPLE__</span>
@@ -282,47 +282,48 @@ if ('onhashchange' in window) {
 <span id="L219" class="LineNr">219 </span>  <span class="Identifier">return</span> iter<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
 <span id="L220" class="LineNr">220 </span><span class="Delimiter">}</span>
 <span id="L221" class="LineNr">221 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">typename</span> T::mapped_type <span class="Normal">const</span>&amp; <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">,</span> <span class="Normal">typename</span> T::mapped_type <span class="Normal">const</span>&amp; value<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L222" class="LineNr">222 </span>  map[key] = value<span class="Delimiter">;</span>
-<span id="L223" class="LineNr">223 </span>  <span class="Identifier">return</span> map[key]<span class="Delimiter">;</span>
-<span id="L224" class="LineNr">224 </span><span class="Delimiter">}</span>
-<span id="L225" class="LineNr">225 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">bool</span> contains_key<span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L226" class="LineNr">226 </span>  <span class="Identifier">return</span> map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">)</span> != map<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L227" class="LineNr">227 </span><span class="Delimiter">}</span>
-<span id="L228" class="LineNr">228 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">typename</span> T::mapped_type&amp; <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L229" class="LineNr">229 </span>  <span class="Identifier">return</span> map[key]<span class="Delimiter">;</span>
-<span id="L230" class="LineNr">230 </span><span class="Delimiter">}</span>
-<span id="L231" class="LineNr">231 </span><span class="Comment">//: The contract: any container that relies on get_or_insert should never call</span>
-<span id="L232" class="LineNr">232 </span><span class="Comment">//: contains_key.</span>
-<span id="L233" class="LineNr">233 </span>
-<span id="L234" class="LineNr">234 </span><span class="Comment">//: 7. istreams are a royal pain in the arse. You have to be careful about</span>
-<span id="L235" class="LineNr">235 </span><span class="Comment">//: what subclass you try to putback into. You have to watch out for the pesky</span>
-<span id="L236" class="LineNr">236 </span><span class="Comment">//: failbit and badbit. Just avoid eof() and use this helper instead.</span>
-<span id="L237" class="LineNr">237 </span><span class="Delimiter">:(code)</span>
-<span id="L238" class="LineNr">238 </span><span class="Normal">bool</span> <a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L239" class="LineNr">239 </span>  <span class="Identifier">return</span> in &amp;&amp; !in<span class="Delimiter">.</span>eof<span class="Delimiter">();</span>
-<span id="L240" class="LineNr">240 </span><span class="Delimiter">}</span>
-<span id="L241" class="LineNr">241 </span>
-<span id="L242" class="LineNr">242 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L243" class="LineNr">243 </span><span class="PreProc">#include </span><span class="Constant">&lt;assert.h&gt;</span>
-<span id="L244" class="LineNr">244 </span>
-<span id="L245" class="LineNr">245 </span><span class="PreProc">#include </span><span class="Constant">&lt;iostream&gt;</span>
-<span id="L246" class="LineNr">246 </span><span class="Normal">using</span> std::istream<span class="Delimiter">;</span>
-<span id="L247" class="LineNr">247 </span><span class="Normal">using</span> std::ostream<span class="Delimiter">;</span>
-<span id="L248" class="LineNr">248 </span><span class="Normal">using</span> std::iostream<span class="Delimiter">;</span>
-<span id="L249" class="LineNr">249 </span><span class="Normal">using</span> std::cin<span class="Delimiter">;</span>
-<span id="L250" class="LineNr">250 </span><span class="Normal">using</span> std::cout<span class="Delimiter">;</span>
-<span id="L251" class="LineNr">251 </span><span class="Normal">using</span> std::cerr<span class="Delimiter">;</span>
-<span id="L252" class="LineNr">252 </span><span class="PreProc">#include </span><span class="Constant">&lt;iomanip&gt;</span>
-<span id="L253" class="LineNr">253 </span>
-<span id="L254" class="LineNr">254 </span><span class="PreProc">#include </span><span class="Constant">&lt;string.h&gt;</span>
-<span id="L255" class="LineNr">255 </span><span class="PreProc">#include </span><span class="Constant">&lt;string&gt;</span>
-<span id="L256" class="LineNr">256 </span><span class="Normal">using</span> std::string<span class="Delimiter">;</span>
-<span id="L257" class="LineNr">257 </span>
-<span id="L258" class="LineNr">258 </span><span class="PreProc">#define unused  __attribute__((unused))</span>
-<span id="L259" class="LineNr">259 </span>
-<span id="L260" class="LineNr">260 </span><span class="PreProc">#include </span><span class="Constant">&lt;algorithm&gt;</span>
-<span id="L261" class="LineNr">261 </span><span class="Normal">using</span> std::min<span class="Delimiter">;</span>
-<span id="L262" class="LineNr">262 </span><span class="Normal">using</span> std::max<span class="Delimiter">;</span>
+<span id="L222" class="LineNr">222 </span>  <span class="Comment">// map[key] requires mapped_type to have a zero-arg (default) constructor</span>
+<span id="L223" class="LineNr">223 </span>  map<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>std::make_pair<span class="Delimiter">(</span>key<span class="Delimiter">,</span> value<span class="Delimiter">)).</span>first<span class="Delimiter">-&gt;</span>second = value<span class="Delimiter">;</span>
+<span id="L224" class="LineNr">224 </span>  <span class="Identifier">return</span> value<span class="Delimiter">;</span>
+<span id="L225" class="LineNr">225 </span><span class="Delimiter">}</span>
+<span id="L226" class="LineNr">226 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">bool</span> contains_key<span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L227" class="LineNr">227 </span>  <span class="Identifier">return</span> map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">)</span> != map<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L228" class="LineNr">228 </span><span class="Delimiter">}</span>
+<span id="L229" class="LineNr">229 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">typename</span> T::mapped_type&amp; <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L230" class="LineNr">230 </span>  <span class="Identifier">return</span> map[key]<span class="Delimiter">;</span>
+<span id="L231" class="LineNr">231 </span><span class="Delimiter">}</span>
+<span id="L232" class="LineNr">232 </span><span class="Comment">//: The contract: any container that relies on get_or_insert should never call</span>
+<span id="L233" class="LineNr">233 </span><span class="Comment">//: contains_key.</span>
+<span id="L234" class="LineNr">234 </span>
+<span id="L235" class="LineNr">235 </span><span class="Comment">//: 7. istreams are a royal pain in the arse. You have to be careful about</span>
+<span id="L236" class="LineNr">236 </span><span class="Comment">//: what subclass you try to putback into. You have to watch out for the pesky</span>
+<span id="L237" class="LineNr">237 </span><span class="Comment">//: failbit and badbit. Just avoid eof() and use this helper instead.</span>
+<span id="L238" class="LineNr">238 </span><span class="Delimiter">:(code)</span>
+<span id="L239" class="LineNr">239 </span><span class="Normal">bool</span> <a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L240" class="LineNr">240 </span>  <span class="Identifier">return</span> in &amp;&amp; !in<span class="Delimiter">.</span>eof<span class="Delimiter">();</span>
+<span id="L241" class="LineNr">241 </span><span class="Delimiter">}</span>
+<span id="L242" class="LineNr">242 </span>
+<span id="L243" class="LineNr">243 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L244" class="LineNr">244 </span><span class="PreProc">#include </span><span class="Constant">&lt;assert.h&gt;</span>
+<span id="L245" class="LineNr">245 </span>
+<span id="L246" class="LineNr">246 </span><span class="PreProc">#include </span><span class="Constant">&lt;iostream&gt;</span>
+<span id="L247" class="LineNr">247 </span><span class="Normal">using</span> std::istream<span class="Delimiter">;</span>
+<span id="L248" class="LineNr">248 </span><span class="Normal">using</span> std::ostream<span class="Delimiter">;</span>
+<span id="L249" class="LineNr">249 </span><span class="Normal">using</span> std::iostream<span class="Delimiter">;</span>
+<span id="L250" class="LineNr">250 </span><span class="Normal">using</span> std::cin<span class="Delimiter">;</span>
+<span id="L251" class="LineNr">251 </span><span class="Normal">using</span> std::cout<span class="Delimiter">;</span>
+<span id="L252" class="LineNr">252 </span><span class="Normal">using</span> std::cerr<span class="Delimiter">;</span>
+<span id="L253" class="LineNr">253 </span><span class="PreProc">#include </span><span class="Constant">&lt;iomanip&gt;</span>
+<span id="L254" class="LineNr">254 </span>
+<span id="L255" class="LineNr">255 </span><span class="PreProc">#include </span><span class="Constant">&lt;string.h&gt;</span>
+<span id="L256" class="LineNr">256 </span><span class="PreProc">#include </span><span class="Constant">&lt;string&gt;</span>
+<span id="L257" class="LineNr">257 </span><span class="Normal">using</span> std::string<span class="Delimiter">;</span>
+<span id="L258" class="LineNr">258 </span>
+<span id="L259" class="LineNr">259 </span><span class="PreProc">#define unused  __attribute__((unused))</span>
+<span id="L260" class="LineNr">260 </span>
+<span id="L261" class="LineNr">261 </span><span class="PreProc">#include </span><span class="Constant">&lt;algorithm&gt;</span>
+<span id="L262" class="LineNr">262 </span><span class="Normal">using</span> std::min<span class="Delimiter">;</span>
+<span id="L263" class="LineNr">263 </span><span class="Normal">using</span> std::max<span class="Delimiter">;</span>
 </pre>
 </body>
 </html>
diff --git a/html/003trace.cc.html b/html/003trace.cc.html
index b374865a..5087f342 100644
--- a/html/003trace.cc.html
+++ b/html/003trace.cc.html
@@ -257,7 +257,7 @@ if ('onhashchange' in window) {
 <span id="L196" class="LineNr">196 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
 <span id="L197" class="LineNr">197 </span><span class="Normal">struct</span> <a href='003trace.cc.html#L197'>end</a> <span class="Delimiter">{};</span>
 <span id="L198" class="LineNr">198 </span><span class="Delimiter">:(code)</span>
-<span id="L199" class="LineNr">199 </span>ostream&amp; <span class="Normal">operator</span>&lt;&lt;<span class="Delimiter">(</span>ostream&amp; os<span class="Delimiter">,</span> <a href='001help.cc.html#L258'>unused</a> <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L199" class="LineNr">199 </span>ostream&amp; <span class="Normal">operator</span>&lt;&lt;<span class="Delimiter">(</span>ostream&amp; os<span class="Delimiter">,</span> <a href='001help.cc.html#L259'>unused</a> <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L200" class="LineNr">200 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L127'>newline</a><span class="Delimiter">();</span>
 <span id="L201" class="LineNr">201 </span>  <span class="Identifier">return</span> os<span class="Delimiter">;</span>
 <span id="L202" class="LineNr">202 </span><span class="Delimiter">}</span>
diff --git a/html/010vm.cc.html b/html/010vm.cc.html
index c37b89f9..bc742c78 100644
--- a/html/010vm.cc.html
+++ b/html/010vm.cc.html
@@ -196,18 +196,18 @@ if ('onhashchange' in window) {
 <span id="L132" class="LineNr">132 </span>  Next_type_ordinal = <span class="Constant">1</span><span class="Delimiter">;</span>
 <span id="L133" class="LineNr">133 </span>  <span class="Comment">// Mu Types Initialization</span>
 <span id="L134" class="LineNr">134 </span>  <a href='010vm.cc.html#L123'>type_ordinal</a> number = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;number&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
-<span id="L135" class="LineNr">135 </span>  <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> number<span class="Delimiter">).</span>name = <span class="Constant">&quot;number&quot;</span><span class="Delimiter">;</span>
+<span id="L135" class="LineNr">135 </span>  <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> number<span class="Delimiter">).</span>name = <span class="Constant">&quot;number&quot;</span><span class="Delimiter">;</span>
 <span id="L136" class="LineNr">136 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;location&quot;</span><span class="Delimiter">,</span> number<span class="Delimiter">);</span>  <span class="Comment">// synonym of number to indicate we only care about its size</span>
 <span id="L137" class="LineNr">137 </span>  <a href='010vm.cc.html#L123'>type_ordinal</a> <a href='043space.cc.html#L82'>address</a> = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
-<span id="L138" class="LineNr">138 </span>  <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">).</span>name = <span class="Constant">&quot;address&quot;</span><span class="Delimiter">;</span>
+<span id="L138" class="LineNr">138 </span>  <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">).</span>name = <span class="Constant">&quot;address&quot;</span><span class="Delimiter">;</span>
 <span id="L139" class="LineNr">139 </span>  <a href='010vm.cc.html#L123'>type_ordinal</a> boolean = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;boolean&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
-<span id="L140" class="LineNr">140 </span>  <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> boolean<span class="Delimiter">).</span>name = <span class="Constant">&quot;boolean&quot;</span><span class="Delimiter">;</span>
+<span id="L140" class="LineNr">140 </span>  <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> boolean<span class="Delimiter">).</span>name = <span class="Constant">&quot;boolean&quot;</span><span class="Delimiter">;</span>
 <span id="L141" class="LineNr">141 </span>  <a href='010vm.cc.html#L123'>type_ordinal</a> character = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;character&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
-<span id="L142" class="LineNr">142 </span>  <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> character<span class="Delimiter">).</span>name = <span class="Constant">&quot;character&quot;</span><span class="Delimiter">;</span>
+<span id="L142" class="LineNr">142 </span>  <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> character<span class="Delimiter">).</span>name = <span class="Constant">&quot;character&quot;</span><span class="Delimiter">;</span>
 <span id="L143" class="LineNr">143 </span>  <span class="Comment">// Array types are a special modifier to any other type. For example,</span>
 <span id="L144" class="LineNr">144 </span>  <span class="Comment">// array:number or array:address:boolean.</span>
 <span id="L145" class="LineNr">145 </span>  <a href='010vm.cc.html#L123'>type_ordinal</a> array = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;array&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
-<span id="L146" class="LineNr">146 </span>  <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> array<span class="Delimiter">).</span>name = <span class="Constant">&quot;array&quot;</span><span class="Delimiter">;</span>
+<span id="L146" class="LineNr">146 </span>  <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> array<span class="Delimiter">).</span>name = <span class="Constant">&quot;array&quot;</span><span class="Delimiter">;</span>
 <span id="L147" class="LineNr">147 </span>  <span class="Comment">// End Mu Types Initialization</span>
 <span id="L148" class="LineNr">148 </span><span class="Delimiter">}</span>
 <span id="L149" class="LineNr">149 </span><span class="Normal">void</span> <a href='010vm.cc.html#L149'>teardown_types</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
@@ -361,7 +361,7 @@ if ('onhashchange' in window) {
 <span id="L297" class="LineNr">297 </span><span class="Delimiter">}</span>
 <span id="L298" class="LineNr">298 </span>
 <span id="L299" class="LineNr">299 </span><span class="Normal">void</span> slurp_properties<span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> vector&lt;pair&lt;string<span class="Delimiter">,</span> string_tree*&gt; &gt;&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L300" class="LineNr">300 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L300" class="LineNr">300 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L301" class="LineNr">301 </span>  <span class="Conceal">¦</span> istringstream row<span class="Delimiter">(</span>slurp_until<span class="Delimiter">(</span>in<span class="Delimiter">,</span> <span class="Constant">'/'</span><span class="Delimiter">));</span>
 <span id="L302" class="LineNr">302 </span>  <span class="Conceal">¦</span> row &gt;&gt; std::noskipws<span class="Delimiter">;</span>
 <span id="L303" class="LineNr">303 </span>  <span class="Conceal">¦</span> string key = slurp_until<span class="Delimiter">(</span>row<span class="Delimiter">,</span> <span class="Constant">':'</span><span class="Delimiter">);</span>
@@ -658,11 +658,11 @@ if ('onhashchange' in window) {
 <span id="L594" class="LineNr">594 </span><span class="Comment">//: Use inspect() only for emitting a canonical format that can be parsed back</span>
 <span id="L595" class="LineNr">595 </span><span class="Comment">//: into the value.</span>
 <span id="L596" class="LineNr">596 </span>
-<span id="L597" class="LineNr">597 </span>string <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L597" class="LineNr">597 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L598" class="LineNr">598 </span>  ostringstream out<span class="Delimiter">;</span>
 <span id="L599" class="LineNr">599 </span>  out &lt;&lt; <span class="Constant">&quot;recipe &quot;</span> &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
 <span id="L600" class="LineNr">600 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L601" class="LineNr">601 </span>  <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">&quot;  &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L601" class="LineNr">601 </span>  <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">&quot;  &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
 <span id="L602" class="LineNr">602 </span>  out &lt;&lt; <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
 <span id="L603" class="LineNr">603 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
 <span id="L604" class="LineNr">604 </span><span class="Delimiter">}</span>
@@ -682,7 +682,7 @@ if ('onhashchange' in window) {
 <span id="L618" class="LineNr">618 </span>  <span class="Comment">// Begin debug_string(recipe x)</span>
 <span id="L619" class="LineNr">619 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span>  index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L620" class="LineNr">620 </span>  <span class="Conceal">¦</span> <span class="Normal">const</span> instruction&amp; inst = x<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
-<span id="L621" class="LineNr">621 </span>  <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">&quot;inst: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L621" class="LineNr">621 </span>  <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">&quot;inst: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
 <span id="L622" class="LineNr">622 </span>  <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">&quot;  ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
 <span id="L623" class="LineNr">623 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
 <span id="L624" class="LineNr">624 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">&quot;    &quot;</span> &lt;&lt; debug_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
@@ -711,30 +711,30 @@ if ('onhashchange' in window) {
 <span id="L647" class="LineNr">647 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
 <span id="L648" class="LineNr">648 </span><span class="Delimiter">}</span>
 <span id="L649" class="LineNr">649 </span>
-<span id="L650" class="LineNr">650 </span>string <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L650" class="LineNr">650 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L651" class="LineNr">651 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>is_label<span class="Delimiter">)</span> <span class="Identifier">return</span> inst<span class="Delimiter">.</span>label<span class="Delimiter">;</span>
 <span id="L652" class="LineNr">652 </span>  ostringstream out<span class="Delimiter">;</span>
 <span id="L653" class="LineNr">653 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L654" class="LineNr">654 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">0</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">&quot;, &quot;</span><span class="Delimiter">;</span>
-<span id="L655" class="LineNr">655 </span>  <span class="Conceal">¦</span> out &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L655" class="LineNr">655 </span>  <span class="Conceal">¦</span> out &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
 <span id="L656" class="LineNr">656 </span>  <span class="Delimiter">}</span>
 <span id="L657" class="LineNr">657 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> out &lt;&lt; <span class="Constant">&quot; &lt;- &quot;</span><span class="Delimiter">;</span>
 <span id="L658" class="LineNr">658 </span>  out &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
 <span id="L659" class="LineNr">659 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L660" class="LineNr">660 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">0</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">&quot;, &quot;</span><span class="Delimiter">;</span>
-<span id="L661" class="LineNr">661 </span>  <span class="Conceal">¦</span> out &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L661" class="LineNr">661 </span>  <span class="Conceal">¦</span> out &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
 <span id="L662" class="LineNr">662 </span>  <span class="Delimiter">}</span>
 <span id="L663" class="LineNr">663 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
 <span id="L664" class="LineNr">664 </span><span class="Delimiter">}</span>
 <span id="L665" class="LineNr">665 </span>
-<span id="L666" class="LineNr">666 </span>string <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L666" class="LineNr">666 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L667" class="LineNr">667 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">&quot;_&quot;</span><span class="Delimiter">;</span>
 <span id="L668" class="LineNr">668 </span>  ostringstream out<span class="Delimiter">;</span>
 <span id="L669" class="LineNr">669 </span>  out &lt;&lt; <span class="Constant">&quot;{&quot;</span><span class="Delimiter">;</span>
 <span id="L670" class="LineNr">670 </span>  out &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
 <span id="L671" class="LineNr">671 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L672" class="LineNr">672 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>properties<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L673" class="LineNr">673 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">&quot;, </span><span class="cSpecial">\&quot;</span><span class="Constant">&quot;</span> &lt;&lt; r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\&quot;</span><span class="Constant">: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">);</span>
+<span id="L673" class="LineNr">673 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">&quot;, </span><span class="cSpecial">\&quot;</span><span class="Constant">&quot;</span> &lt;&lt; r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\&quot;</span><span class="Constant">: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">);</span>
 <span id="L674" class="LineNr">674 </span>  <span class="Delimiter">}</span>
 <span id="L675" class="LineNr">675 </span>  out &lt;&lt; <span class="Constant">&quot;}&quot;</span><span class="Delimiter">;</span>
 <span id="L676" class="LineNr">676 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
@@ -747,11 +747,11 @@ if ('onhashchange' in window) {
 <span id="L683" class="LineNr">683 </span>
 <span id="L684" class="LineNr">684 </span>string debug_string<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L685" class="LineNr">685 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L686" class="LineNr">686 </span>  out &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; -- &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
+<span id="L686" class="LineNr">686 </span>  out &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; -- &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
 <span id="L687" class="LineNr">687 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
 <span id="L688" class="LineNr">688 </span><span class="Delimiter">}</span>
 <span id="L689" class="LineNr">689 </span>
-<span id="L690" class="LineNr">690 </span>string <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> string_tree* property<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L690" class="LineNr">690 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> string_tree* property<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L691" class="LineNr">691 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!property<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;()&quot;</span><span class="Delimiter">;</span>
 <span id="L692" class="LineNr">692 </span>  ostringstream out<span class="Delimiter">;</span>
 <span id="L693" class="LineNr">693 </span>  dump<span class="Delimiter">(</span>property<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
@@ -779,7 +779,7 @@ if ('onhashchange' in window) {
 <span id="L715" class="LineNr">715 </span>  out &lt;&lt; <span class="Constant">')'</span><span class="Delimiter">;</span>
 <span id="L716" class="LineNr">716 </span><span class="Delimiter">}</span>
 <span id="L717" class="LineNr">717 </span>
-<span id="L718" class="LineNr">718 </span>string <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L718" class="LineNr">718 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L719" class="LineNr">719 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;()&quot;</span><span class="Delimiter">;</span>
 <span id="L720" class="LineNr">720 </span>  ostringstream out<span class="Delimiter">;</span>
 <span id="L721" class="LineNr">721 </span>  dump<span class="Delimiter">(</span>type<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
diff --git a/html/011load.cc.html b/html/011load.cc.html
index 9a6ec529..bfc99952 100644
--- a/html/011load.cc.html
+++ b/html/011load.cc.html
@@ -86,7 +86,7 @@ if ('onhashchange' in window) {
 <span id="L22" class="LineNr"> 22 </span>vector&lt;recipe_ordinal&gt; load<span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L23" class="LineNr"> 23 </span>  in &gt;&gt; std::noskipws<span class="Delimiter">;</span>
 <span id="L24" class="LineNr"> 24 </span>  vector&lt;recipe_ordinal&gt; result<span class="Delimiter">;</span>
-<span id="L25" class="LineNr"> 25 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L25" class="LineNr"> 25 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L26" class="LineNr"> 26 </span>  <span class="Conceal">¦</span> <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L27" class="LineNr"> 27 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L28" class="LineNr"> 28 </span>  <span class="Conceal">¦</span> string command = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
@@ -152,7 +152,7 @@ if ('onhashchange' in window) {
 <span id="L88" class="LineNr"> 88 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='011load.cc.html#L96'>next_instruction</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> &amp;curr<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L89" class="LineNr"> 89 </span>  <span class="Conceal">¦</span> curr<span class="Delimiter">.</span>original_string = to_original_string<span class="Delimiter">(</span>curr<span class="Delimiter">);</span>
 <span id="L90" class="LineNr"> 90 </span>  <span class="Conceal">¦</span> <span class="Comment">// End Rewrite Instruction(curr, recipe result)</span>
-<span id="L91" class="LineNr"> 91 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;load&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;after rewriting: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>curr<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L91" class="LineNr"> 91 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;load&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;after rewriting: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>curr<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L92" class="LineNr"> 92 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!curr<span class="Delimiter">.</span>is_empty<span class="Delimiter">())</span> result<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>curr<span class="Delimiter">);</span>
 <span id="L93" class="LineNr"> 93 </span>  <span class="Delimiter">}</span>
 <span id="L94" class="LineNr"> 94 </span><span class="Delimiter">}</span>
@@ -166,7 +166,7 @@ if ('onhashchange' in window) {
 <span id="L102" class="LineNr">102 </span>  <span class="Delimiter">}</span>
 <span id="L103" class="LineNr">103 </span>
 <span id="L104" class="LineNr">104 </span>  vector&lt;string&gt; words<span class="Delimiter">;</span>
-<span id="L105" class="LineNr">105 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L105" class="LineNr">105 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L106" class="LineNr">106 </span>  <span class="Conceal">¦</span> skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L107" class="LineNr">107 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L108" class="LineNr">108 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete <a href='010vm.cc.html#L19'>recipe</a> at <a href='003trace.cc.html#L197'>end</a> of file (1)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
@@ -216,9 +216,9 @@ if ('onhashchange' in window) {
 <span id="L152" class="LineNr">152 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction: &quot;</span> &lt;&lt; curr<span class="Delimiter">-&gt;</span>name &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L153" class="LineNr">153 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  number of ingredients: &quot;</span> &lt;&lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>ingredients<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L154" class="LineNr">154 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;reagent&gt;::iterator p = curr<span class="Delimiter">-&gt;</span>ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != curr<span class="Delimiter">-&gt;</span>ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
-<span id="L155" class="LineNr">155 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  ingredient: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>*p<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L155" class="LineNr">155 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  ingredient: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>*p<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L156" class="LineNr">156 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;reagent&gt;::iterator p = curr<span class="Delimiter">-&gt;</span>products<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != curr<span class="Delimiter">-&gt;</span>products<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
-<span id="L157" class="LineNr">157 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  product: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>*p<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L157" class="LineNr">157 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  product: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>*p<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L158" class="LineNr">158 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L159" class="LineNr">159 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;9: unbalanced '[' for <a href='010vm.cc.html#L19'>recipe</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L160" class="LineNr">160 </span>  <span class="Conceal">¦</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
@@ -256,7 +256,7 @@ if ('onhashchange' in window) {
 <span id="L192" class="LineNr">192 </span><span class="Delimiter">:(code)</span>
 <span id="L193" class="LineNr">193 </span><span class="Normal">void</span> <a href='011load.cc.html#L193'>slurp_word</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L194" class="LineNr">194 </span>  <span class="Normal">char</span> c<span class="Delimiter">;</span>
-<span id="L195" class="LineNr">195 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; Terminators<span class="Delimiter">.</span>find<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">())</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L195" class="LineNr">195 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; Terminators<span class="Delimiter">.</span>find<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">())</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L196" class="LineNr">196 </span>  <span class="Conceal">¦</span> in &gt;&gt; c<span class="Delimiter">;</span>
 <span id="L197" class="LineNr">197 </span>  <span class="Conceal">¦</span> out &lt;&lt; c<span class="Delimiter">;</span>
 <span id="L198" class="LineNr">198 </span>  <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
@@ -293,9 +293,9 @@ if ('onhashchange' in window) {
 <span id="L229" class="LineNr">229 </span><span class="Delimiter">}</span>
 <span id="L230" class="LineNr">230 </span>
 <span id="L231" class="LineNr">231 </span><span class="Normal">void</span> <a href='011load.cc.html#L231'>skip_comment</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L232" class="LineNr">232 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">'#'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L232" class="LineNr">232 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">'#'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L233" class="LineNr">233 </span>  <span class="Conceal">¦</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
-<span id="L234" class="LineNr">234 </span>  <span class="Conceal">¦</span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
+<span id="L234" class="LineNr">234 </span>  <span class="Conceal">¦</span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
 <span id="L235" class="LineNr">235 </span>  <span class="Delimiter">}</span>
 <span id="L236" class="LineNr">236 </span><span class="Delimiter">}</span>
 <span id="L237" class="LineNr">237 </span>
diff --git a/html/014literal_string.cc.html b/html/014literal_string.cc.html
index 067f1ca4..07bfa932 100644
--- a/html/014literal_string.cc.html
+++ b/html/014literal_string.cc.html
@@ -95,7 +95,7 @@ if ('onhashchange' in window) {
 <span id="L32" class="LineNr"> 32 </span><span class="Delimiter">:(code)</span>
 <span id="L33" class="LineNr"> 33 </span>string <a href='014literal_string.cc.html#L33'>slurp_quoted</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L34" class="LineNr"> 34 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L35" class="LineNr"> 35 </span>  assert<span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">));</span>  assert<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">'['</span><span class="Delimiter">);</span>  out &lt;&lt; <span class="Normal">static_cast</span>&lt;<span class="Normal">char</span>&gt;<span class="Delimiter">(</span>in<span class="Delimiter">.</span>get<span class="Delimiter">());</span>  <span class="Comment">// slurp the '['</span>
+<span id="L35" class="LineNr"> 35 </span>  assert<span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">));</span>  assert<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">'['</span><span class="Delimiter">);</span>  out &lt;&lt; <span class="Normal">static_cast</span>&lt;<span class="Normal">char</span>&gt;<span class="Delimiter">(</span>in<span class="Delimiter">.</span>get<span class="Delimiter">());</span>  <span class="Comment">// slurp the '['</span>
 <span id="L36" class="LineNr"> 36 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='014literal_string.cc.html#L45'>is_code_string</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> out<span class="Delimiter">))</span>
 <span id="L37" class="LineNr"> 37 </span>  <span class="Conceal">¦</span> <a href='014literal_string.cc.html#L82'>slurp_quoted_comment_aware</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
 <span id="L38" class="LineNr"> 38 </span>  <span class="Normal">else</span>
@@ -106,7 +106,7 @@ if ('onhashchange' in window) {
 <span id="L43" class="LineNr"> 43 </span><span class="Comment">// A string is a code string (ignores comments when scanning for matching</span>
 <span id="L44" class="LineNr"> 44 </span><span class="Comment">// brackets) if it contains a newline at the start before any non-whitespace.</span>
 <span id="L45" class="LineNr"> 45 </span><span class="Normal">bool</span> <a href='014literal_string.cc.html#L45'>is_code_string</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L46" class="LineNr"> 46 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L46" class="LineNr"> 46 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L47" class="LineNr"> 47 </span>  <span class="Conceal">¦</span> <span class="Normal">char</span> c = in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
 <span id="L48" class="LineNr"> 48 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!isspace<span class="Delimiter">(</span>c<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L49" class="LineNr"> 49 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> in<span class="Delimiter">.</span>putback<span class="Delimiter">(</span>c<span class="Delimiter">);</span>
@@ -124,7 +124,7 @@ if ('onhashchange' in window) {
 <span id="L61" class="LineNr"> 61 </span><span class="Comment">// strings.</span>
 <span id="L62" class="LineNr"> 62 </span><span class="Normal">void</span> <a href='014literal_string.cc.html#L62'>slurp_quoted_comment_oblivious</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L63" class="LineNr"> 63 </span>  <span class="Normal">int</span> brace_depth = <span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L64" class="LineNr"> 64 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L64" class="LineNr"> 64 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L65" class="LineNr"> 65 </span>  <span class="Conceal">¦</span> <span class="Normal">char</span> c = in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
 <span id="L66" class="LineNr"> 66 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="cSpecial">'\\'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L67" class="LineNr"> 67 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='014literal_string.cc.html#L148'>slurp_one_past_backslashes</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
@@ -151,7 +151,7 @@ if ('onhashchange' in window) {
 <span id="L88" class="LineNr"> 88 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L89" class="LineNr"> 89 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="Constant">'#'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L90" class="LineNr"> 90 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> out &lt;&lt; c<span class="Delimiter">;</span>
-<span id="L91" class="LineNr"> 91 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Normal">static_cast</span>&lt;<span class="Normal">char</span>&gt;<span class="Delimiter">(</span>in<span class="Delimiter">.</span>get<span class="Delimiter">());</span>
+<span id="L91" class="LineNr"> 91 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Normal">static_cast</span>&lt;<span class="Normal">char</span>&gt;<span class="Delimiter">(</span>in<span class="Delimiter">.</span>get<span class="Delimiter">());</span>
 <span id="L92" class="LineNr"> 92 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L93" class="LineNr"> 93 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L94" class="LineNr"> 94 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="Constant">'['</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
@@ -223,7 +223,7 @@ if ('onhashchange' in window) {
 <span id="L160" class="LineNr">160 </span>  <span class="Comment">// special characters. So Mu doesn't follow C's approach of overloading</span>
 <span id="L161" class="LineNr">161 </span>  <span class="Comment">// backslashes both to escape quote characters and also as a notation for</span>
 <span id="L162" class="LineNr">162 </span>  <span class="Comment">// unprintable characters like '\n'.</span>
-<span id="L163" class="LineNr">163 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L163" class="LineNr">163 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L164" class="LineNr">164 </span>  <span class="Conceal">¦</span> <span class="Normal">char</span> c = in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
 <span id="L165" class="LineNr">165 </span>  <span class="Conceal">¦</span> out &lt;&lt; c<span class="Delimiter">;</span>
 <span id="L166" class="LineNr">166 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>c != <span class="cSpecial">'\\'</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
diff --git a/html/016dilated_reagent.cc.html b/html/016dilated_reagent.cc.html
index 80345d79..3a5278d8 100644
--- a/html/016dilated_reagent.cc.html
+++ b/html/016dilated_reagent.cc.html
@@ -183,7 +183,7 @@ if ('onhashchange' in window) {
 <span id="L118" class="LineNr">118 </span>  <span class="Conceal">¦</span> type = <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>type_names<span class="Delimiter">);</span>
 <span id="L119" class="LineNr">119 </span>  <span class="Conceal">¦</span> <span class="Normal">delete</span> type_names<span class="Delimiter">;</span>
 <span id="L120" class="LineNr">120 </span>  <span class="Delimiter">}</span>
-<span id="L121" class="LineNr">121 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L121" class="LineNr">121 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L122" class="LineNr">122 </span>  <span class="Conceal">¦</span> string key = <a href='016dilated_reagent.cc.html#L139'>slurp_key</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L123" class="LineNr">123 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>key<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L124" class="LineNr">124 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>key == <span class="Constant">&quot;}&quot;</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
diff --git a/html/017parse_tree.cc.html b/html/017parse_tree.cc.html
index cb0e91da..85b264e3 100644
--- a/html/017parse_tree.cc.html
+++ b/html/017parse_tree.cc.html
@@ -123,7 +123,7 @@ if ('onhashchange' in window) {
 <span id="L59" class="LineNr"> 59 </span>  string_tree** curr = &amp;result<span class="Delimiter">;</span>
 <span id="L60" class="LineNr"> 60 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L61" class="LineNr"> 61 </span>  <span class="Conceal">¦</span> skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L62" class="LineNr"> 62 </span>  <span class="Conceal">¦</span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">));</span>
+<span id="L62" class="LineNr"> 62 </span>  <span class="Conceal">¦</span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">));</span>
 <span id="L63" class="LineNr"> 63 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">')'</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L64" class="LineNr"> 64 </span>  <span class="Conceal">¦</span> *curr = <span class="Normal">new</span> string_tree<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">);</span>
 <span id="L65" class="LineNr"> 65 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">'('</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
diff --git a/html/018type_abbreviations.cc.html b/html/018type_abbreviations.cc.html
index dd6954b0..01a8d73f 100644
--- a/html/018type_abbreviations.cc.html
+++ b/html/018type_abbreviations.cc.html
@@ -86,13 +86,13 @@ if ('onhashchange' in window) {
 <span id="L21" class="LineNr"> 21 </span><span class="Delimiter">:(code)</span>
 <span id="L22" class="LineNr"> 22 </span><span class="Normal">void</span> <a href='018type_abbreviations.cc.html#L22'>load_type_abbreviations</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L23" class="LineNr"> 23 </span>  string new_type_name = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L24" class="LineNr"> 24 </span>  assert<span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> || !new_type_name<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L24" class="LineNr"> 24 </span>  assert<span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> || !new_type_name<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
 <span id="L25" class="LineNr"> 25 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">)</span> || new_type_name<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L26" class="LineNr"> 26 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'type' statement; must be of the form 'type &lt;new type name&gt; = &lt;type expression&gt;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L27" class="LineNr"> 27 </span>  <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L28" class="LineNr"> 28 </span>  <span class="Delimiter">}</span>
 <span id="L29" class="LineNr"> 29 </span>  string arrow = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L30" class="LineNr"> 30 </span>  assert<span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> || !arrow<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L30" class="LineNr"> 30 </span>  assert<span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> || !arrow<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
 <span id="L31" class="LineNr"> 31 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>arrow<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L32" class="LineNr"> 32 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'type' statement 'type &quot;</span> &lt;&lt; new_type_name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L33" class="LineNr"> 33 </span>  <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
diff --git a/html/020run.cc.html b/html/020run.cc.html
index d288c1ef..48ff966f 100644
--- a/html/020run.cc.html
+++ b/html/020run.cc.html
@@ -130,9 +130,9 @@ if ('onhashchange' in window) {
 <span id="L63" class="LineNr"> 63 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='073scheduler.cc.html#L28'>should_continue_running</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">))</span> <span class="Delimiter">{</span>  <span class="Comment">// beware: may modify Current_routine</span>
 <span id="L64" class="LineNr"> 64 </span>  <span class="Conceal">¦</span> <span class="Comment">// Running One Instruction</span>
 <span id="L65" class="LineNr"> 65 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>is_label<span class="Delimiter">)</span> <span class="Delimiter">{</span> ++current_step_index<span class="Delimiter">();</span>  <span class="Identifier">continue</span><span class="Delimiter">;</span> <span class="Delimiter">}</span>
-<span id="L66" class="LineNr"> 66 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span>Initial_callstack_depth + Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L66" class="LineNr"> 66 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span>Initial_callstack_depth + Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L67" class="LineNr"> 67 </span><span class="CommentedCode">//?     if (Foo) cerr &lt;&lt; &quot;run: &quot; &lt;&lt; to_string(current_instruction()) &lt;&lt; '\n';</span>
-<span id="L68" class="LineNr"> 68 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">)</span> != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L68" class="LineNr"> 68 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">)</span> != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L69" class="LineNr"> 69 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;something wrote to location 0; this should never happen</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L70" class="LineNr"> 70 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L71" class="LineNr"> 71 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
@@ -362,7 +362,7 @@ if ('onhashchange' in window) {
 <span id="L295" class="LineNr">295 </span>  <span class="Comment">// End Preprocess read_memory(x)</span>
 <span id="L296" class="LineNr">296 </span>  <span class="Normal">int</span> size = size_of<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
 <span id="L297" class="LineNr">297 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> offset = <span class="Constant">0</span><span class="Delimiter">;</span>  offset &lt; size<span class="Delimiter">;</span>  ++offset<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L298" class="LineNr">298 </span>  <span class="Conceal">¦</span> <span class="Normal">double</span> val = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value+offset<span class="Delimiter">);</span>
+<span id="L298" class="LineNr">298 </span>  <span class="Conceal">¦</span> <span class="Normal">double</span> val = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value+offset<span class="Delimiter">);</span>
 <span id="L299" class="LineNr">299 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;location &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>value+offset &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>val<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L300" class="LineNr">300 </span>  <span class="Conceal">¦</span> result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>val<span class="Delimiter">);</span>
 <span id="L301" class="LineNr">301 </span>  <span class="Delimiter">}</span>
@@ -373,7 +373,7 @@ if ('onhashchange' in window) {
 <span id="L306" class="LineNr">306 </span>  assert<span class="Delimiter">(</span>Current_routine<span class="Delimiter">);</span>  <span class="Comment">// run-time only</span>
 <span id="L307" class="LineNr">307 </span>  <span class="Comment">// Begin Preprocess write_memory(x, data)</span>
 <span id="L308" class="LineNr">308 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L309" class="LineNr">309 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;can't write to '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'; no type</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L309" class="LineNr">309 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;can't write to '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'; no type</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L310" class="LineNr">310 </span>  <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L311" class="LineNr">311 </span>  <span class="Delimiter">}</span>
 <span id="L312" class="LineNr">312 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
@@ -411,7 +411,7 @@ if ('onhashchange' in window) {
 <span id="L344" class="LineNr">344 </span>  <span class="Delimiter">}</span>
 <span id="L345" class="LineNr">345 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
 <span id="L346" class="LineNr">346 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L347" class="LineNr">347 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L347" class="LineNr">347 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L348" class="LineNr">348 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
 <span id="L349" class="LineNr">349 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L350" class="LineNr">350 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
diff --git a/html/021check_instruction.cc.html b/html/021check_instruction.cc.html
index 2c6d23af..1bb63476 100644
--- a/html/021check_instruction.cc.html
+++ b/html/021check_instruction.cc.html
@@ -271,7 +271,7 @@ if ('onhashchange' in window) {
 <span id="L208" class="LineNr">208 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>type<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
 <span id="L209" class="LineNr">209 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
 <span id="L210" class="LineNr">210 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L211" class="LineNr">211 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L211" class="LineNr">211 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L212" class="LineNr">212 </span>  <span class="Conceal">¦</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
 <span id="L213" class="LineNr">213 </span>  <span class="Delimiter">}</span>
 <span id="L214" class="LineNr">214 </span>  <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;array&quot;</span><span class="Delimiter">);</span>
@@ -286,7 +286,7 @@ if ('onhashchange' in window) {
 <span id="L223" class="LineNr">223 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>type<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
 <span id="L224" class="LineNr">224 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
 <span id="L225" class="LineNr">225 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L226" class="LineNr">226 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L226" class="LineNr">226 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L227" class="LineNr">227 </span>  <span class="Conceal">¦</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
 <span id="L228" class="LineNr">228 </span>  <span class="Delimiter">}</span>
 <span id="L229" class="LineNr">229 </span>  <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">);</span>
diff --git a/html/026call.cc.html b/html/026call.cc.html
index 096383c6..35004151 100644
--- a/html/026call.cc.html
+++ b/html/026call.cc.html
@@ -269,6 +269,21 @@ if ('onhashchange' in window) {
 <span id="L203" class="LineNr">203 </span>  <span class="Comment">// todo: fail if no products returned</span>
 <span id="L204" class="LineNr">204 </span>  ++current_step_index<span class="Delimiter">();</span>
 <span id="L205" class="LineNr">205 </span><span class="Delimiter">}</span>
+<span id="L206" class="LineNr">206 </span>
+<span id="L207" class="LineNr">207 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L208" class="LineNr">208 </span>_DUMP_CALL_STACK<span class="Delimiter">,</span>
+<span id="L209" class="LineNr">209 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L210" class="LineNr">210 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;$dump-call-stack&quot;</span><span class="Delimiter">,</span> _DUMP_CALL_STACK<span class="Delimiter">);</span>
+<span id="L211" class="LineNr">211 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L212" class="LineNr">212 </span><span class="Normal">case</span> _DUMP_CALL_STACK: <span class="Delimiter">{</span>
+<span id="L213" class="LineNr">213 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L214" class="LineNr">214 </span><span class="Delimiter">}</span>
+<span id="L215" class="LineNr">215 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L216" class="LineNr">216 </span><span class="Normal">case</span> _DUMP_CALL_STACK: <span class="Delimiter">{</span>
+<span id="L217" class="LineNr">217 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::const_reverse_iterator p = Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>rbegin<span class="Delimiter">();</span> p != Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>rend<span class="Delimiter">();</span> ++p<span class="Delimiter">)</span>
+<span id="L218" class="LineNr">218 </span>  <span class="Conceal">¦</span> cerr &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;:&quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>running_step_index &lt;&lt; <span class="Constant">&quot; -- &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L86'>to_instruction</a><span class="Delimiter">(</span>*p<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L219" class="LineNr">219 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L220" class="LineNr">220 </span><span class="Delimiter">}</span>
 </pre>
 </body>
 </html>
diff --git a/html/027call_ingredient.cc.html b/html/027call_ingredient.cc.html
index 3353aadb..8137161c 100644
--- a/html/027call_ingredient.cc.html
+++ b/html/027call_ingredient.cc.html
@@ -103,152 +103,155 @@ if ('onhashchange' in window) {
 <span id="L40" class="LineNr"> 40 </span>NEXT_INGREDIENT<span class="Delimiter">,</span>
 <span id="L41" class="LineNr"> 41 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
 <span id="L42" class="LineNr"> 42 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;next-ingredient&quot;</span><span class="Delimiter">,</span> NEXT_INGREDIENT<span class="Delimiter">);</span>
-<span id="L43" class="LineNr"> 43 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L44" class="LineNr"> 44 </span><span class="Normal">case</span> NEXT_INGREDIENT: <span class="Delimiter">{</span>
-<span id="L45" class="LineNr"> 45 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L46" class="LineNr"> 46 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'next-ingredient' didn't expect any ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L47" class="LineNr"> 47 </span>  <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L48" class="LineNr"> 48 </span>  <span class="Delimiter">}</span>
-<span id="L49" class="LineNr"> 49 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L50" class="LineNr"> 50 </span><span class="Delimiter">}</span>
-<span id="L51" class="LineNr"> 51 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L52" class="LineNr"> 52 </span><span class="Normal">case</span> NEXT_INGREDIENT: <span class="Delimiter">{</span>
-<span id="L53" class="LineNr"> 53 </span>  assert<span class="Delimiter">(</span>!Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L54" class="LineNr"> 54 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L55" class="LineNr"> 55 </span>  <span class="Conceal">¦</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> product = <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L56" class="LineNr"> 56 </span>  <span class="Conceal">¦</span> <span class="Comment">// End Preprocess NEXT_INGREDIENT product</span>
-<span id="L57" class="LineNr"> 57 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">()</span> == <span class="Constant">&quot;main&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L58" class="LineNr"> 58 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// no ingredient types since the call might be implicit; assume ingredients are always strings</span>
-<span id="L59" class="LineNr"> 59 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// todo: how to test this?</span>
-<span id="L60" class="LineNr"> 60 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_text<span class="Delimiter">(</span>product<span class="Delimiter">))</span>
-<span id="L61" class="LineNr"> 61 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;main: wrong type for ingredient '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L62" class="LineNr"> 62 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L63" class="LineNr"> 63 </span>  <span class="Conceal">¦</span> <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>product<span class="Delimiter">,</span>
-<span id="L64" class="LineNr"> 64 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span>         <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L65" class="LineNr"> 65 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;wrong type for ingredient '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L66" class="LineNr"> 66 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// End next-ingredient Type Mismatch Error</span>
-<span id="L67" class="LineNr"> 67 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L68" class="LineNr"> 68 </span>  <span class="Conceal">¦</span> products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>
-<span id="L69" class="LineNr"> 69 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">));</span>
-<span id="L70" class="LineNr"> 70 </span>  <span class="Conceal">¦</span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>products<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">);</span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>  <span class="Comment">// push a new vector</span>
-<span id="L71" class="LineNr"> 71 </span>  <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L72" class="LineNr"> 72 </span>  <span class="Conceal">¦</span> ++current_call<span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">;</span>
-<span id="L73" class="LineNr"> 73 </span>  <span class="Delimiter">}</span>
-<span id="L74" class="LineNr"> 74 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L75" class="LineNr"> 75 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">)</span> &lt; <span class="Constant">2</span><span class="Delimiter">)</span>
-<span id="L76" class="LineNr"> 76 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;no ingredient to save in '&quot;</span> &lt;&lt; current_instruction<span class="Delimiter">().</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L77" class="LineNr"> 77 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L78" class="LineNr"> 78 </span>  <span class="Conceal">¦</span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L79" class="LineNr"> 79 </span>  <span class="Conceal">¦</span> <span class="Comment">// pad the first product with sufficient zeros to match its type</span>
-<span id="L80" class="LineNr"> 80 </span>  <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>resize<span class="Delimiter">(</span>size_of<span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)));</span>
-<span id="L81" class="LineNr"> 81 </span>  <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L82" class="LineNr"> 82 </span>  <span class="Delimiter">}</span>
-<span id="L83" class="LineNr"> 83 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L84" class="LineNr"> 84 </span><span class="Delimiter">}</span>
-<span id="L85" class="LineNr"> 85 </span>
-<span id="L86" class="LineNr"> 86 </span><span class="Delimiter">:(scenario next_ingredient_fail_on_missing)</span>
-<span id="L87" class="LineNr"> 87 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L88" class="LineNr"> 88 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L89" class="LineNr"> 89 </span>  f
-<span id="L90" class="LineNr"> 90 </span>]
-<span id="L91" class="LineNr"> 91 </span><span class="muRecipe">def</span> f [
-<span id="L92" class="LineNr"> 92 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>next-ingredient
-<span id="L93" class="LineNr"> 93 </span>]
-<span id="L94" class="LineNr"> 94 </span><span class="traceContains">+error: f: no ingredient to save in '11:num'</span>
-<span id="L95" class="LineNr"> 95 </span>
-<span id="L96" class="LineNr"> 96 </span><span class="Delimiter">:(scenario rewind_ingredients)</span>
-<span id="L97" class="LineNr"> 97 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L98" class="LineNr"> 98 </span>  f <span class="Constant">2</span>
-<span id="L99" class="LineNr"> 99 </span>]
-<span id="L100" class="LineNr">100 </span><span class="muRecipe">def</span> f [
-<span id="L101" class="LineNr">101 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>next-ingredient  <span class="Comment"># consume ingredient</span>
-<span id="L102" class="LineNr">102 </span>  _<span class="Delimiter">,</span> <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>next-ingredient  <span class="Comment"># will not find any ingredients</span>
-<span id="L103" class="LineNr">103 </span>  rewind-ingredients
-<span id="L104" class="LineNr">104 </span>  <span class="Constant">13</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>next-ingredient  <span class="Comment"># will find ingredient again</span>
-<span id="L105" class="LineNr">105 </span>]
-<span id="L106" class="LineNr">106 </span><span class="traceContains">+mem: storing 2 in location 12</span>
-<span id="L107" class="LineNr">107 </span><span class="traceContains">+mem: storing 0 in location 1</span>
-<span id="L108" class="LineNr">108 </span><span class="traceContains">+mem: storing 2 in location 13</span>
-<span id="L109" class="LineNr">109 </span><span class="traceContains">+mem: storing 1 in location 2</span>
-<span id="L110" class="LineNr">110 </span>
-<span id="L111" class="LineNr">111 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L112" class="LineNr">112 </span>REWIND_INGREDIENTS<span class="Delimiter">,</span>
-<span id="L113" class="LineNr">113 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L114" class="LineNr">114 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;rewind-ingredients&quot;</span><span class="Delimiter">,</span> REWIND_INGREDIENTS<span class="Delimiter">);</span>
-<span id="L115" class="LineNr">115 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L116" class="LineNr">116 </span><span class="Normal">case</span> REWIND_INGREDIENTS: <span class="Delimiter">{</span>
-<span id="L117" class="LineNr">117 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L118" class="LineNr">118 </span><span class="Delimiter">}</span>
-<span id="L119" class="LineNr">119 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L120" class="LineNr">120 </span><span class="Normal">case</span> REWIND_INGREDIENTS: <span class="Delimiter">{</span>
-<span id="L121" class="LineNr">121 </span>  <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L122" class="LineNr">122 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L123" class="LineNr">123 </span><span class="Delimiter">}</span>
-<span id="L124" class="LineNr">124 </span>
-<span id="L125" class="LineNr">125 </span><span class="Delimiter">:(scenario ingredient)</span>
-<span id="L126" class="LineNr">126 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L127" class="LineNr">127 </span>  f <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">2</span>
-<span id="L128" class="LineNr">128 </span>]
-<span id="L129" class="LineNr">129 </span><span class="muRecipe">def</span> f [
-<span id="L130" class="LineNr">130 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>ingredient <span class="Constant">1</span>  <span class="Comment"># consume second ingredient first</span>
-<span id="L131" class="LineNr">131 </span>  <span class="Constant">13</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>next-ingredient  <span class="Comment"># next-ingredient tries to scan past that</span>
-<span id="L132" class="LineNr">132 </span>]
-<span id="L133" class="LineNr">133 </span><span class="traceContains">+mem: storing 2 in location 12</span>
-<span id="L134" class="LineNr">134 </span><span class="traceContains">+mem: storing 0 in location 1</span>
-<span id="L135" class="LineNr">135 </span>
-<span id="L136" class="LineNr">136 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L137" class="LineNr">137 </span>INGREDIENT<span class="Delimiter">,</span>
-<span id="L138" class="LineNr">138 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L139" class="LineNr">139 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;ingredient&quot;</span><span class="Delimiter">,</span> INGREDIENT<span class="Delimiter">);</span>
-<span id="L140" class="LineNr">140 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L141" class="LineNr">141 </span><span class="Normal">case</span> INGREDIENT: <span class="Delimiter">{</span>
-<span id="L142" class="LineNr">142 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L143" class="LineNr">143 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'ingredient' expects exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L144" class="LineNr">144 </span>  <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L145" class="LineNr">145 </span>  <span class="Delimiter">}</span>
-<span id="L146" class="LineNr">146 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L147" class="LineNr">147 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'ingredient' expects a literal ingredient, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L148" class="LineNr">148 </span>  <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L149" class="LineNr">149 </span>  <span class="Delimiter">}</span>
-<span id="L150" class="LineNr">150 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L151" class="LineNr">151 </span><span class="Delimiter">}</span>
-<span id="L152" class="LineNr">152 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L153" class="LineNr">153 </span><span class="Normal">case</span> INGREDIENT: <span class="Delimiter">{</span>
-<span id="L154" class="LineNr">154 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L155" class="LineNr">155 </span>  <span class="Conceal">¦</span> <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L156" class="LineNr">156 </span>  <span class="Conceal">¦</span> products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>
-<span id="L157" class="LineNr">157 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">));</span>
-<span id="L158" class="LineNr">158 </span>  <span class="Conceal">¦</span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>products<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">);</span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>  <span class="Comment">// push a new vector</span>
-<span id="L159" class="LineNr">159 </span>  <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L160" class="LineNr">160 </span>  <span class="Conceal">¦</span> ++current_call<span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">;</span>
-<span id="L161" class="LineNr">161 </span>  <span class="Delimiter">}</span>
-<span id="L162" class="LineNr">162 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L163" class="LineNr">163 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L164" class="LineNr">164 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L165" class="LineNr">165 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>  <span class="Comment">// todo: will fail noisily if we try to read a compound value</span>
-<span id="L166" class="LineNr">166 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L167" class="LineNr">167 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L168" class="LineNr">168 </span>  <span class="Delimiter">}</span>
-<span id="L169" class="LineNr">169 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L170" class="LineNr">170 </span><span class="Delimiter">}</span>
-<span id="L171" class="LineNr">171 </span>
-<span id="L172" class="LineNr">172 </span><span class="Comment">//: a particularly common array type is the text, or address:array:character</span>
-<span id="L173" class="LineNr">173 </span><span class="Delimiter">:(code)</span>
-<span id="L174" class="LineNr">174 </span><span class="Normal">bool</span> <a href='027call_ingredient.cc.html#L174'>is_mu_text</a><span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L175" class="LineNr">175 </span>  <span class="Comment">// End Preprocess is_mu_text(reagent x)</span>
-<span id="L176" class="LineNr">176 </span>  <span class="Identifier">return</span> x<span class="Delimiter">.</span>type
-<span id="L177" class="LineNr">177 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom
-<span id="L178" class="LineNr">178 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom
-<span id="L179" class="LineNr">179 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">)</span>
-<span id="L180" class="LineNr">180 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right
-<span id="L181" class="LineNr">181 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom
-<span id="L182" class="LineNr">182 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom
-<span id="L183" class="LineNr">183 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;array&quot;</span><span class="Delimiter">)</span>
-<span id="L184" class="LineNr">184 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right
-<span id="L185" class="LineNr">185 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom
-<span id="L186" class="LineNr">186 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;character&quot;</span><span class="Delimiter">)</span>
-<span id="L187" class="LineNr">187 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L188" class="LineNr">188 </span><span class="Delimiter">}</span>
+<span id="L43" class="LineNr"> 43 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;next-input&quot;</span><span class="Delimiter">,</span> NEXT_INGREDIENT<span class="Delimiter">);</span>
+<span id="L44" class="LineNr"> 44 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L45" class="LineNr"> 45 </span><span class="Normal">case</span> NEXT_INGREDIENT: <span class="Delimiter">{</span>
+<span id="L46" class="LineNr"> 46 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L47" class="LineNr"> 47 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'next-ingredient' didn't expect any ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L48" class="LineNr"> 48 </span>  <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L49" class="LineNr"> 49 </span>  <span class="Delimiter">}</span>
+<span id="L50" class="LineNr"> 50 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L51" class="LineNr"> 51 </span><span class="Delimiter">}</span>
+<span id="L52" class="LineNr"> 52 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L53" class="LineNr"> 53 </span><span class="Normal">case</span> NEXT_INGREDIENT: <span class="Delimiter">{</span>
+<span id="L54" class="LineNr"> 54 </span>  assert<span class="Delimiter">(</span>!Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L55" class="LineNr"> 55 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L56" class="LineNr"> 56 </span>  <span class="Conceal">¦</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> product = <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L57" class="LineNr"> 57 </span>  <span class="Conceal">¦</span> <span class="Comment">// End Preprocess NEXT_INGREDIENT product</span>
+<span id="L58" class="LineNr"> 58 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">()</span> == <span class="Constant">&quot;main&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L59" class="LineNr"> 59 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// no ingredient types since the call might be implicit; assume ingredients are always strings</span>
+<span id="L60" class="LineNr"> 60 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// todo: how to test this?</span>
+<span id="L61" class="LineNr"> 61 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_text<span class="Delimiter">(</span>product<span class="Delimiter">))</span>
+<span id="L62" class="LineNr"> 62 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;main: wrong type for ingredient '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L63" class="LineNr"> 63 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L64" class="LineNr"> 64 </span>  <span class="Conceal">¦</span> <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>product<span class="Delimiter">,</span>
+<span id="L65" class="LineNr"> 65 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span>         <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L66" class="LineNr"> 66 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;wrong type for ingredient '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L67" class="LineNr"> 67 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// End next-ingredient Type Mismatch Error</span>
+<span id="L68" class="LineNr"> 68 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L69" class="LineNr"> 69 </span>  <span class="Conceal">¦</span> products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>
+<span id="L70" class="LineNr"> 70 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">));</span>
+<span id="L71" class="LineNr"> 71 </span>  <span class="Conceal">¦</span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>products<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">);</span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>  <span class="Comment">// push a new vector</span>
+<span id="L72" class="LineNr"> 72 </span>  <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L73" class="LineNr"> 73 </span>  <span class="Conceal">¦</span> ++current_call<span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">;</span>
+<span id="L74" class="LineNr"> 74 </span>  <span class="Delimiter">}</span>
+<span id="L75" class="LineNr"> 75 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L76" class="LineNr"> 76 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">)</span> &lt; <span class="Constant">2</span><span class="Delimiter">)</span>
+<span id="L77" class="LineNr"> 77 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;no ingredient to save in '&quot;</span> &lt;&lt; current_instruction<span class="Delimiter">().</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L78" class="LineNr"> 78 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L79" class="LineNr"> 79 </span>  <span class="Conceal">¦</span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
+<span id="L80" class="LineNr"> 80 </span>  <span class="Conceal">¦</span> <span class="Comment">// pad the first product with sufficient zeros to match its type</span>
+<span id="L81" class="LineNr"> 81 </span>  <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>resize<span class="Delimiter">(</span>size_of<span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)));</span>
+<span id="L82" class="LineNr"> 82 </span>  <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L83" class="LineNr"> 83 </span>  <span class="Delimiter">}</span>
+<span id="L84" class="LineNr"> 84 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L85" class="LineNr"> 85 </span><span class="Delimiter">}</span>
+<span id="L86" class="LineNr"> 86 </span>
+<span id="L87" class="LineNr"> 87 </span><span class="Delimiter">:(scenario next_ingredient_fail_on_missing)</span>
+<span id="L88" class="LineNr"> 88 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L89" class="LineNr"> 89 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L90" class="LineNr"> 90 </span>  f
+<span id="L91" class="LineNr"> 91 </span>]
+<span id="L92" class="LineNr"> 92 </span><span class="muRecipe">def</span> f [
+<span id="L93" class="LineNr"> 93 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>next-ingredient
+<span id="L94" class="LineNr"> 94 </span>]
+<span id="L95" class="LineNr"> 95 </span><span class="traceContains">+error: f: no ingredient to save in '11:num'</span>
+<span id="L96" class="LineNr"> 96 </span>
+<span id="L97" class="LineNr"> 97 </span><span class="Delimiter">:(scenario rewind_ingredients)</span>
+<span id="L98" class="LineNr"> 98 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L99" class="LineNr"> 99 </span>  f <span class="Constant">2</span>
+<span id="L100" class="LineNr">100 </span>]
+<span id="L101" class="LineNr">101 </span><span class="muRecipe">def</span> f [
+<span id="L102" class="LineNr">102 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>next-ingredient  <span class="Comment"># consume ingredient</span>
+<span id="L103" class="LineNr">103 </span>  _<span class="Delimiter">,</span> <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>next-ingredient  <span class="Comment"># will not find any ingredients</span>
+<span id="L104" class="LineNr">104 </span>  rewind-ingredients
+<span id="L105" class="LineNr">105 </span>  <span class="Constant">13</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>next-ingredient  <span class="Comment"># will find ingredient again</span>
+<span id="L106" class="LineNr">106 </span>]
+<span id="L107" class="LineNr">107 </span><span class="traceContains">+mem: storing 2 in location 12</span>
+<span id="L108" class="LineNr">108 </span><span class="traceContains">+mem: storing 0 in location 1</span>
+<span id="L109" class="LineNr">109 </span><span class="traceContains">+mem: storing 2 in location 13</span>
+<span id="L110" class="LineNr">110 </span><span class="traceContains">+mem: storing 1 in location 2</span>
+<span id="L111" class="LineNr">111 </span>
+<span id="L112" class="LineNr">112 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L113" class="LineNr">113 </span>REWIND_INGREDIENTS<span class="Delimiter">,</span>
+<span id="L114" class="LineNr">114 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L115" class="LineNr">115 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;rewind-ingredients&quot;</span><span class="Delimiter">,</span> REWIND_INGREDIENTS<span class="Delimiter">);</span>
+<span id="L116" class="LineNr">116 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;rewind-inputs&quot;</span><span class="Delimiter">,</span> REWIND_INGREDIENTS<span class="Delimiter">);</span>
+<span id="L117" class="LineNr">117 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L118" class="LineNr">118 </span><span class="Normal">case</span> REWIND_INGREDIENTS: <span class="Delimiter">{</span>
+<span id="L119" class="LineNr">119 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L120" class="LineNr">120 </span><span class="Delimiter">}</span>
+<span id="L121" class="LineNr">121 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L122" class="LineNr">122 </span><span class="Normal">case</span> REWIND_INGREDIENTS: <span class="Delimiter">{</span>
+<span id="L123" class="LineNr">123 </span>  <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L124" class="LineNr">124 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L125" class="LineNr">125 </span><span class="Delimiter">}</span>
+<span id="L126" class="LineNr">126 </span>
+<span id="L127" class="LineNr">127 </span><span class="Delimiter">:(scenario ingredient)</span>
+<span id="L128" class="LineNr">128 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L129" class="LineNr">129 </span>  f <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">2</span>
+<span id="L130" class="LineNr">130 </span>]
+<span id="L131" class="LineNr">131 </span><span class="muRecipe">def</span> f [
+<span id="L132" class="LineNr">132 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>ingredient <span class="Constant">1</span>  <span class="Comment"># consume second ingredient first</span>
+<span id="L133" class="LineNr">133 </span>  <span class="Constant">13</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>next-ingredient  <span class="Comment"># next-ingredient tries to scan past that</span>
+<span id="L134" class="LineNr">134 </span>]
+<span id="L135" class="LineNr">135 </span><span class="traceContains">+mem: storing 2 in location 12</span>
+<span id="L136" class="LineNr">136 </span><span class="traceContains">+mem: storing 0 in location 1</span>
+<span id="L137" class="LineNr">137 </span>
+<span id="L138" class="LineNr">138 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L139" class="LineNr">139 </span>INGREDIENT<span class="Delimiter">,</span>
+<span id="L140" class="LineNr">140 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L141" class="LineNr">141 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;ingredient&quot;</span><span class="Delimiter">,</span> INGREDIENT<span class="Delimiter">);</span>
+<span id="L142" class="LineNr">142 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;input&quot;</span><span class="Delimiter">,</span> INGREDIENT<span class="Delimiter">);</span>
+<span id="L143" class="LineNr">143 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L144" class="LineNr">144 </span><span class="Normal">case</span> INGREDIENT: <span class="Delimiter">{</span>
+<span id="L145" class="LineNr">145 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L146" class="LineNr">146 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'ingredient' expects exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L147" class="LineNr">147 </span>  <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L148" class="LineNr">148 </span>  <span class="Delimiter">}</span>
+<span id="L149" class="LineNr">149 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L150" class="LineNr">150 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'ingredient' expects a literal ingredient, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L151" class="LineNr">151 </span>  <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L152" class="LineNr">152 </span>  <span class="Delimiter">}</span>
+<span id="L153" class="LineNr">153 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L154" class="LineNr">154 </span><span class="Delimiter">}</span>
+<span id="L155" class="LineNr">155 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L156" class="LineNr">156 </span><span class="Normal">case</span> INGREDIENT: <span class="Delimiter">{</span>
+<span id="L157" class="LineNr">157 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L158" class="LineNr">158 </span>  <span class="Conceal">¦</span> <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L159" class="LineNr">159 </span>  <span class="Conceal">¦</span> products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>
+<span id="L160" class="LineNr">160 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">));</span>
+<span id="L161" class="LineNr">161 </span>  <span class="Conceal">¦</span> assert<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>products<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">);</span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>  <span class="Comment">// push a new vector</span>
+<span id="L162" class="LineNr">162 </span>  <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L163" class="LineNr">163 </span>  <span class="Conceal">¦</span> ++current_call<span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">;</span>
+<span id="L164" class="LineNr">164 </span>  <span class="Delimiter">}</span>
+<span id="L165" class="LineNr">165 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L166" class="LineNr">166 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L167" class="LineNr">167 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
+<span id="L168" class="LineNr">168 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>  <span class="Comment">// todo: will fail noisily if we try to read a compound value</span>
+<span id="L169" class="LineNr">169 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L170" class="LineNr">170 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L171" class="LineNr">171 </span>  <span class="Delimiter">}</span>
+<span id="L172" class="LineNr">172 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L173" class="LineNr">173 </span><span class="Delimiter">}</span>
+<span id="L174" class="LineNr">174 </span>
+<span id="L175" class="LineNr">175 </span><span class="Comment">//: a particularly common array type is the text, or address:array:character</span>
+<span id="L176" class="LineNr">176 </span><span class="Delimiter">:(code)</span>
+<span id="L177" class="LineNr">177 </span><span class="Normal">bool</span> <a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L178" class="LineNr">178 </span>  <span class="Comment">// End Preprocess is_mu_text(reagent x)</span>
+<span id="L179" class="LineNr">179 </span>  <span class="Identifier">return</span> x<span class="Delimiter">.</span>type
+<span id="L180" class="LineNr">180 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom
+<span id="L181" class="LineNr">181 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom
+<span id="L182" class="LineNr">182 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">)</span>
+<span id="L183" class="LineNr">183 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right
+<span id="L184" class="LineNr">184 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom
+<span id="L185" class="LineNr">185 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom
+<span id="L186" class="LineNr">186 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;array&quot;</span><span class="Delimiter">)</span>
+<span id="L187" class="LineNr">187 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right
+<span id="L188" class="LineNr">188 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom
+<span id="L189" class="LineNr">189 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;character&quot;</span><span class="Delimiter">)</span>
+<span id="L190" class="LineNr">190 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L191" class="LineNr">191 </span><span class="Delimiter">}</span>
 </pre>
 </body>
 </html>
diff --git a/html/028call_return.cc.html b/html/028call_return.cc.html
index b5a3306c..493c5e24 100644
--- a/html/028call_return.cc.html
+++ b/html/028call_return.cc.html
@@ -92,151 +92,152 @@ if ('onhashchange' in window) {
 <span id="L29" class="LineNr"> 29 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
 <span id="L30" class="LineNr"> 30 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;return&quot;</span><span class="Delimiter">,</span> RETURN<span class="Delimiter">);</span>
 <span id="L31" class="LineNr"> 31 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;reply&quot;</span><span class="Delimiter">,</span> RETURN<span class="Delimiter">);</span>  <span class="Comment">// synonym while teaching</span>
-<span id="L32" class="LineNr"> 32 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L33" class="LineNr"> 33 </span><span class="Normal">case</span> RETURN: <span class="Delimiter">{</span>
-<span id="L34" class="LineNr"> 34 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// checks will be performed by a transform below</span>
-<span id="L35" class="LineNr"> 35 </span><span class="Delimiter">}</span>
-<span id="L36" class="LineNr"> 36 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L37" class="LineNr"> 37 </span><span class="Normal">case</span> RETURN: <span class="Delimiter">{</span>
-<span id="L38" class="LineNr"> 38 </span>  <span class="Comment">// Begin Return</span>
-<span id="L39" class="LineNr"> 39 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L40" class="LineNr"> 40 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>name &lt;&lt; <span class="Constant">&quot;: decrementing callstack depth from &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L41" class="LineNr"> 41 </span>  <span class="Conceal">¦</span> --Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">;</span>
-<span id="L42" class="LineNr"> 42 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L43" class="LineNr"> 43 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L44" class="LineNr"> 44 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">goto</span> stop_running_current_routine<span class="Delimiter">;</span>
-<span id="L45" class="LineNr"> 45 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L46" class="LineNr"> 46 </span>  <span class="Delimiter">}</span>
-<span id="L47" class="LineNr"> 47 </span>  Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>pop_front<span class="Delimiter">();</span>
-<span id="L48" class="LineNr"> 48 </span>  <span class="Comment">// just in case 'main' returns a value, drop it for now</span>
-<span id="L49" class="LineNr"> 49 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">goto</span> stop_running_current_routine<span class="Delimiter">;</span>
-<span id="L50" class="LineNr"> 50 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L51" class="LineNr"> 51 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;result &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L52" class="LineNr"> 52 </span>  <span class="Comment">// make return products available to caller</span>
-<span id="L53" class="LineNr"> 53 </span>  copy<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span>begin<span class="Delimiter">()));</span>
-<span id="L54" class="LineNr"> 54 </span>  <span class="Comment">// End Return</span>
-<span id="L55" class="LineNr"> 55 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// continue to process rest of *caller* instruction</span>
-<span id="L56" class="LineNr"> 56 </span><span class="Delimiter">}</span>
-<span id="L57" class="LineNr"> 57 </span>
-<span id="L58" class="LineNr"> 58 </span><span class="Comment">//: Types in return instructions are checked ahead of time.</span>
-<span id="L59" class="LineNr"> 59 </span>
-<span id="L60" class="LineNr"> 60 </span><span class="Delimiter">:(before &quot;End Checks&quot;)</span>
-<span id="L61" class="LineNr"> 61 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='028call_return.cc.html#L63'>check_types_of_return_instructions</a><span class="Delimiter">);</span>  <span class="Comment">// idempotent</span>
-<span id="L62" class="LineNr"> 62 </span><span class="Delimiter">:(code)</span>
-<span id="L63" class="LineNr"> 63 </span><span class="Normal">void</span> <a href='028call_return.cc.html#L63'>check_types_of_return_instructions</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L64" class="LineNr"> 64 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L65" class="LineNr"> 65 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- check types of return instructions in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L66" class="LineNr"> 66 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L67" class="LineNr"> 67 </span>  <span class="Conceal">¦</span> <span class="Normal">const</span> instruction&amp; caller_instruction = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L68" class="LineNr"> 68 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>is_label<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L69" class="LineNr"> 69 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L70" class="LineNr"> 70 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='028call_return.cc.html#L114'>is_primitive</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L71" class="LineNr"> 71 </span>  <span class="Conceal">¦</span> <span class="Normal">const</span> recipe&amp; callee = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> caller_instruction<span class="Delimiter">.</span>operation<span class="Delimiter">);</span>
-<span id="L72" class="LineNr"> 72 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L73" class="LineNr"> 73 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">const</span> instruction&amp; return_inst = callee<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L74" class="LineNr"> 74 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>operation != RETURN<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L75" class="LineNr"> 75 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// check types with the caller</span>
-<span id="L76" class="LineNr"> 76 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L77" class="LineNr"> 77 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too few values returned from &quot;</span> &lt;&lt; callee<span class="Delimiter">.</span>name &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L78" class="LineNr"> 78 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L79" class="LineNr"> 79 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L80" class="LineNr"> 80 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L81" class="LineNr"> 81 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> lhs = return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L82" class="LineNr"> 82 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> rhs = caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L83" class="LineNr"> 83 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// End Check RETURN Copy(lhs, rhs)</span>
-<span id="L84" class="LineNr"> 84 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>rhs<span class="Delimiter">,</span> lhs<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L85" class="LineNr"> 85 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; return_inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; ingredient '&quot;</span> &lt;&lt; lhs<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' can't be saved in '&quot;</span> &lt;&lt; rhs<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L86" class="LineNr"> 86 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;  ['&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>lhs<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' vs '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>rhs<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;']</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L87" class="LineNr"> 87 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">goto</span> finish_return_check<span class="Delimiter">;</span>
-<span id="L88" class="LineNr"> 88 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L89" class="LineNr"> 89 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L90" class="LineNr"> 90 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// check that any return ingredients with /same-as-ingredient connect up</span>
-<span id="L91" class="LineNr"> 91 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// the corresponding ingredient and product in the caller.</span>
-<span id="L92" class="LineNr"> 92 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L93" class="LineNr"> 93 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot;same-as-ingredient&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L94" class="LineNr"> 94 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> string_tree* tmp = property<span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot;same-as-ingredient&quot;</span><span class="Delimiter">);</span>
-<span id="L95" class="LineNr"> 95 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!tmp || !tmp<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L96" class="LineNr"> 96 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'same-as-ingredient' metadata should take exactly one value in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>return_inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L97" class="LineNr"> 97 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">goto</span> finish_return_check<span class="Delimiter">;</span>
-<span id="L98" class="LineNr"> 98 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L99" class="LineNr"> 99 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">int</span> ingredient_index = <a href='002test.cc.html#L91'>to_integer</a><span class="Delimiter">(</span>tmp<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
-<span id="L100" class="LineNr">100 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>ingredient_index &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L101" class="LineNr">101 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too few ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L102" class="LineNr">102 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">goto</span> finish_return_check<span class="Delimiter">;</span>
-<span id="L103" class="LineNr">103 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L104" class="LineNr">104 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_dummy<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &amp;&amp; !is_literal<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">))</span> &amp;&amp; caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name != caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">).</span>name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L105" class="LineNr">105 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' should write to '&quot;</span> &lt;&lt; caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;' rather than '&quot;</span> &lt;&lt; caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L106" class="LineNr">106 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L107" class="LineNr">107 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L108" class="LineNr">108 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L109" class="LineNr">109 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">finish_return_check</span>:<span class="Delimiter">;</span>
-<span id="L110" class="LineNr">110 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L111" class="LineNr">111 </span>  <span class="Delimiter">}</span>
-<span id="L112" class="LineNr">112 </span><span class="Delimiter">}</span>
-<span id="L113" class="LineNr">113 </span>
-<span id="L114" class="LineNr">114 </span><span class="Normal">bool</span> <a href='028call_return.cc.html#L114'>is_primitive</a><span class="Delimiter">(</span><a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L115" class="LineNr">115 </span>  <span class="Identifier">return</span> r &lt; <a href='010vm.cc.html#L191'>MAX_PRIMITIVE_RECIPES</a><span class="Delimiter">;</span>
-<span id="L116" class="LineNr">116 </span><span class="Delimiter">}</span>
-<span id="L117" class="LineNr">117 </span>
-<span id="L118" class="LineNr">118 </span><span class="Delimiter">:(scenario return_type_mismatch)</span>
-<span id="L119" class="LineNr">119 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L120" class="LineNr">120 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L121" class="LineNr">121 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>f <span class="Constant">2</span>
-<span id="L122" class="LineNr">122 </span>]
-<span id="L123" class="LineNr">123 </span><span class="muRecipe">def</span> f [
-<span id="L124" class="LineNr">124 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>next-ingredient
-<span id="L125" class="LineNr">125 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L126" class="LineNr">126 </span>  <span class="Constant">14</span>:point<span class="Special"> &lt;- </span>copy <span class="Constant">12</span>:point/<span class="Special">raw</span>
-<span id="L127" class="LineNr">127 </span>  <span class="Identifier">return</span> <span class="Constant">14</span>:point
-<span id="L128" class="LineNr">128 </span>]
-<span id="L129" class="LineNr">129 </span><span class="traceContains">+error: f: return ingredient '14:point' can't be saved in '3:num'</span>
-<span id="L130" class="LineNr">130 </span>
-<span id="L131" class="LineNr">131 </span><span class="Comment">//: In Mu we'd like to assume that any instruction doesn't modify its</span>
-<span id="L132" class="LineNr">132 </span><span class="Comment">//: ingredients unless they're also products. The /same-as-ingredient inside</span>
-<span id="L133" class="LineNr">133 </span><span class="Comment">//: the recipe's 'return' indicates that an ingredient is intended to be</span>
-<span id="L134" class="LineNr">134 </span><span class="Comment">//: modified in place, and will help catch accidental misuse of such</span>
-<span id="L135" class="LineNr">135 </span><span class="Comment">//: 'ingredient-products' (sometimes called in-out parameters in other</span>
-<span id="L136" class="LineNr">136 </span><span class="Comment">//: languages).</span>
-<span id="L137" class="LineNr">137 </span>
-<span id="L138" class="LineNr">138 </span><span class="Delimiter">:(scenario return_same_as_ingredient)</span>
-<span id="L139" class="LineNr">139 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L140" class="LineNr">140 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L141" class="LineNr">141 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L142" class="LineNr">142 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>test1 <span class="Constant">1</span>:num  <span class="Comment"># call with different ingredient and product</span>
-<span id="L143" class="LineNr">143 </span>]
-<span id="L144" class="LineNr">144 </span><span class="muRecipe">def</span> test1 [
-<span id="L145" class="LineNr">145 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>next-ingredient
-<span id="L146" class="LineNr">146 </span>  <span class="Identifier">return</span> <span class="Constant">10</span>:num/same-as-ingredient:<span class="Constant">0</span>
-<span id="L147" class="LineNr">147 </span>]
-<span id="L148" class="LineNr">148 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: '2:num &lt;- test1 1:num' should write to '1:num' rather than '2:num'</span>
-<span id="L149" class="LineNr">149 </span>
-<span id="L150" class="LineNr">150 </span><span class="Delimiter">:(scenario return_same_as_ingredient_dummy)</span>
-<span id="L151" class="LineNr">151 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L152" class="LineNr">152 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L153" class="LineNr">153 </span>  _<span class="Special"> &lt;- </span>test1 <span class="Constant">1</span>:num  <span class="Comment"># call with different ingredient and product</span>
-<span id="L154" class="LineNr">154 </span>]
-<span id="L155" class="LineNr">155 </span><span class="muRecipe">def</span> test1 [
-<span id="L156" class="LineNr">156 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>next-ingredient
-<span id="L157" class="LineNr">157 </span>  <span class="Identifier">return</span> <span class="Constant">10</span>:num/same-as-ingredient:<span class="Constant">0</span>
-<span id="L158" class="LineNr">158 </span>]
-<span id="L159" class="LineNr">159 </span>$error: <span class="Constant">0</span>
-<span id="L160" class="LineNr">160 </span>
-<span id="L161" class="LineNr">161 </span><span class="Delimiter">:(code)</span>
-<span id="L162" class="LineNr">162 </span>string <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> vector&lt;<span class="Normal">double</span>&gt;&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L163" class="LineNr">163 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">&quot;[]&quot;</span><span class="Delimiter">;</span>
-<span id="L164" class="LineNr">164 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L165" class="LineNr">165 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L166" class="LineNr">166 </span>  <span class="Conceal">¦</span> out &lt;&lt; no_scientific<span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L167" class="LineNr">167 </span>  <span class="Conceal">¦</span> <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L168" class="LineNr">168 </span>  <span class="Delimiter">}</span>
-<span id="L169" class="LineNr">169 </span>  out &lt;&lt; <span class="Constant">&quot;[&quot;</span><span class="Delimiter">;</span>
-<span id="L170" class="LineNr">170 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L171" class="LineNr">171 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">0</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">&quot;, &quot;</span><span class="Delimiter">;</span>
-<span id="L172" class="LineNr">172 </span>  <span class="Conceal">¦</span> out &lt;&lt; no_scientific<span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
-<span id="L173" class="LineNr">173 </span>  <span class="Delimiter">}</span>
-<span id="L174" class="LineNr">174 </span>  out &lt;&lt; <span class="Constant">&quot;]&quot;</span><span class="Delimiter">;</span>
-<span id="L175" class="LineNr">175 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L176" class="LineNr">176 </span><span class="Delimiter">}</span>
+<span id="L32" class="LineNr"> 32 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;output&quot;</span><span class="Delimiter">,</span> RETURN<span class="Delimiter">);</span>  <span class="Comment">// experiment</span>
+<span id="L33" class="LineNr"> 33 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L34" class="LineNr"> 34 </span><span class="Normal">case</span> RETURN: <span class="Delimiter">{</span>
+<span id="L35" class="LineNr"> 35 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// checks will be performed by a transform below</span>
+<span id="L36" class="LineNr"> 36 </span><span class="Delimiter">}</span>
+<span id="L37" class="LineNr"> 37 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L38" class="LineNr"> 38 </span><span class="Normal">case</span> RETURN: <span class="Delimiter">{</span>
+<span id="L39" class="LineNr"> 39 </span>  <span class="Comment">// Begin Return</span>
+<span id="L40" class="LineNr"> 40 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L41" class="LineNr"> 41 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>name &lt;&lt; <span class="Constant">&quot;: decrementing callstack depth from &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L42" class="LineNr"> 42 </span>  <span class="Conceal">¦</span> --Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">;</span>
+<span id="L43" class="LineNr"> 43 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L44" class="LineNr"> 44 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L45" class="LineNr"> 45 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">goto</span> stop_running_current_routine<span class="Delimiter">;</span>
+<span id="L46" class="LineNr"> 46 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L47" class="LineNr"> 47 </span>  <span class="Delimiter">}</span>
+<span id="L48" class="LineNr"> 48 </span>  Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>pop_front<span class="Delimiter">();</span>
+<span id="L49" class="LineNr"> 49 </span>  <span class="Comment">// just in case 'main' returns a value, drop it for now</span>
+<span id="L50" class="LineNr"> 50 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">goto</span> stop_running_current_routine<span class="Delimiter">;</span>
+<span id="L51" class="LineNr"> 51 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L52" class="LineNr"> 52 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;result &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L53" class="LineNr"> 53 </span>  <span class="Comment">// make return products available to caller</span>
+<span id="L54" class="LineNr"> 54 </span>  copy<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span>begin<span class="Delimiter">()));</span>
+<span id="L55" class="LineNr"> 55 </span>  <span class="Comment">// End Return</span>
+<span id="L56" class="LineNr"> 56 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// continue to process rest of *caller* instruction</span>
+<span id="L57" class="LineNr"> 57 </span><span class="Delimiter">}</span>
+<span id="L58" class="LineNr"> 58 </span>
+<span id="L59" class="LineNr"> 59 </span><span class="Comment">//: Types in return instructions are checked ahead of time.</span>
+<span id="L60" class="LineNr"> 60 </span>
+<span id="L61" class="LineNr"> 61 </span><span class="Delimiter">:(before &quot;End Checks&quot;)</span>
+<span id="L62" class="LineNr"> 62 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='028call_return.cc.html#L64'>check_types_of_return_instructions</a><span class="Delimiter">);</span>  <span class="Comment">// idempotent</span>
+<span id="L63" class="LineNr"> 63 </span><span class="Delimiter">:(code)</span>
+<span id="L64" class="LineNr"> 64 </span><span class="Normal">void</span> <a href='028call_return.cc.html#L64'>check_types_of_return_instructions</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L65" class="LineNr"> 65 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
+<span id="L66" class="LineNr"> 66 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- check types of return instructions in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L67" class="LineNr"> 67 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L68" class="LineNr"> 68 </span>  <span class="Conceal">¦</span> <span class="Normal">const</span> instruction&amp; caller_instruction = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L69" class="LineNr"> 69 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>is_label<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L70" class="LineNr"> 70 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L71" class="LineNr"> 71 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='028call_return.cc.html#L115'>is_primitive</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L72" class="LineNr"> 72 </span>  <span class="Conceal">¦</span> <span class="Normal">const</span> recipe&amp; callee = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> caller_instruction<span class="Delimiter">.</span>operation<span class="Delimiter">);</span>
+<span id="L73" class="LineNr"> 73 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L74" class="LineNr"> 74 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">const</span> instruction&amp; return_inst = callee<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L75" class="LineNr"> 75 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>operation != RETURN<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L76" class="LineNr"> 76 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// check types with the caller</span>
+<span id="L77" class="LineNr"> 77 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L78" class="LineNr"> 78 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too few values returned from &quot;</span> &lt;&lt; callee<span class="Delimiter">.</span>name &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L79" class="LineNr"> 79 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L80" class="LineNr"> 80 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L81" class="LineNr"> 81 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L82" class="LineNr"> 82 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> lhs = return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L83" class="LineNr"> 83 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> rhs = caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L84" class="LineNr"> 84 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// End Check RETURN Copy(lhs, rhs)</span>
+<span id="L85" class="LineNr"> 85 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>rhs<span class="Delimiter">,</span> lhs<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L86" class="LineNr"> 86 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; return_inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; ingredient '&quot;</span> &lt;&lt; lhs<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' can't be saved in '&quot;</span> &lt;&lt; rhs<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L87" class="LineNr"> 87 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;  ['&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>lhs<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' vs '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>rhs<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;']</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L88" class="LineNr"> 88 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">goto</span> finish_return_check<span class="Delimiter">;</span>
+<span id="L89" class="LineNr"> 89 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L90" class="LineNr"> 90 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L91" class="LineNr"> 91 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// check that any return ingredients with /same-as-ingredient connect up</span>
+<span id="L92" class="LineNr"> 92 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// the corresponding ingredient and product in the caller.</span>
+<span id="L93" class="LineNr"> 93 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L94" class="LineNr"> 94 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot;same-as-ingredient&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L95" class="LineNr"> 95 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> string_tree* tmp = property<span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot;same-as-ingredient&quot;</span><span class="Delimiter">);</span>
+<span id="L96" class="LineNr"> 96 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!tmp || !tmp<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L97" class="LineNr"> 97 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'same-as-ingredient' metadata should take exactly one value in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>return_inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L98" class="LineNr"> 98 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">goto</span> finish_return_check<span class="Delimiter">;</span>
+<span id="L99" class="LineNr"> 99 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L100" class="LineNr">100 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">int</span> ingredient_index = <a href='002test.cc.html#L91'>to_integer</a><span class="Delimiter">(</span>tmp<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
+<span id="L101" class="LineNr">101 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>ingredient_index &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L102" class="LineNr">102 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too few ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L103" class="LineNr">103 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">goto</span> finish_return_check<span class="Delimiter">;</span>
+<span id="L104" class="LineNr">104 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L105" class="LineNr">105 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_dummy<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &amp;&amp; !is_literal<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">))</span> &amp;&amp; caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name != caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">).</span>name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L106" class="LineNr">106 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' should write to '&quot;</span> &lt;&lt; caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;' rather than '&quot;</span> &lt;&lt; caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L107" class="LineNr">107 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L108" class="LineNr">108 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L109" class="LineNr">109 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L110" class="LineNr">110 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">finish_return_check</span>:<span class="Delimiter">;</span>
+<span id="L111" class="LineNr">111 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L112" class="LineNr">112 </span>  <span class="Delimiter">}</span>
+<span id="L113" class="LineNr">113 </span><span class="Delimiter">}</span>
+<span id="L114" class="LineNr">114 </span>
+<span id="L115" class="LineNr">115 </span><span class="Normal">bool</span> <a href='028call_return.cc.html#L115'>is_primitive</a><span class="Delimiter">(</span><a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L116" class="LineNr">116 </span>  <span class="Identifier">return</span> r &lt; <a href='010vm.cc.html#L191'>MAX_PRIMITIVE_RECIPES</a><span class="Delimiter">;</span>
+<span id="L117" class="LineNr">117 </span><span class="Delimiter">}</span>
+<span id="L118" class="LineNr">118 </span>
+<span id="L119" class="LineNr">119 </span><span class="Delimiter">:(scenario return_type_mismatch)</span>
+<span id="L120" class="LineNr">120 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L121" class="LineNr">121 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L122" class="LineNr">122 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>f <span class="Constant">2</span>
+<span id="L123" class="LineNr">123 </span>]
+<span id="L124" class="LineNr">124 </span><span class="muRecipe">def</span> f [
+<span id="L125" class="LineNr">125 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>next-ingredient
+<span id="L126" class="LineNr">126 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L127" class="LineNr">127 </span>  <span class="Constant">14</span>:point<span class="Special"> &lt;- </span>copy <span class="Constant">12</span>:point/<span class="Special">raw</span>
+<span id="L128" class="LineNr">128 </span>  <span class="Identifier">return</span> <span class="Constant">14</span>:point
+<span id="L129" class="LineNr">129 </span>]
+<span id="L130" class="LineNr">130 </span><span class="traceContains">+error: f: return ingredient '14:point' can't be saved in '3:num'</span>
+<span id="L131" class="LineNr">131 </span>
+<span id="L132" class="LineNr">132 </span><span class="Comment">//: In Mu we'd like to assume that any instruction doesn't modify its</span>
+<span id="L133" class="LineNr">133 </span><span class="Comment">//: ingredients unless they're also products. The /same-as-ingredient inside</span>
+<span id="L134" class="LineNr">134 </span><span class="Comment">//: the recipe's 'return' indicates that an ingredient is intended to be</span>
+<span id="L135" class="LineNr">135 </span><span class="Comment">//: modified in place, and will help catch accidental misuse of such</span>
+<span id="L136" class="LineNr">136 </span><span class="Comment">//: 'ingredient-products' (sometimes called in-out parameters in other</span>
+<span id="L137" class="LineNr">137 </span><span class="Comment">//: languages).</span>
+<span id="L138" class="LineNr">138 </span>
+<span id="L139" class="LineNr">139 </span><span class="Delimiter">:(scenario return_same_as_ingredient)</span>
+<span id="L140" class="LineNr">140 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L141" class="LineNr">141 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L142" class="LineNr">142 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L143" class="LineNr">143 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>test1 <span class="Constant">1</span>:num  <span class="Comment"># call with different ingredient and product</span>
+<span id="L144" class="LineNr">144 </span>]
+<span id="L145" class="LineNr">145 </span><span class="muRecipe">def</span> test1 [
+<span id="L146" class="LineNr">146 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>next-ingredient
+<span id="L147" class="LineNr">147 </span>  <span class="Identifier">return</span> <span class="Constant">10</span>:num/same-as-ingredient:<span class="Constant">0</span>
+<span id="L148" class="LineNr">148 </span>]
+<span id="L149" class="LineNr">149 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: '2:num &lt;- test1 1:num' should write to '1:num' rather than '2:num'</span>
+<span id="L150" class="LineNr">150 </span>
+<span id="L151" class="LineNr">151 </span><span class="Delimiter">:(scenario return_same_as_ingredient_dummy)</span>
+<span id="L152" class="LineNr">152 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L153" class="LineNr">153 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L154" class="LineNr">154 </span>  _<span class="Special"> &lt;- </span>test1 <span class="Constant">1</span>:num  <span class="Comment"># call with different ingredient and product</span>
+<span id="L155" class="LineNr">155 </span>]
+<span id="L156" class="LineNr">156 </span><span class="muRecipe">def</span> test1 [
+<span id="L157" class="LineNr">157 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>next-ingredient
+<span id="L158" class="LineNr">158 </span>  <span class="Identifier">return</span> <span class="Constant">10</span>:num/same-as-ingredient:<span class="Constant">0</span>
+<span id="L159" class="LineNr">159 </span>]
+<span id="L160" class="LineNr">160 </span>$error: <span class="Constant">0</span>
+<span id="L161" class="LineNr">161 </span>
+<span id="L162" class="LineNr">162 </span><span class="Delimiter">:(code)</span>
+<span id="L163" class="LineNr">163 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> vector&lt;<span class="Normal">double</span>&gt;&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L164" class="LineNr">164 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">&quot;[]&quot;</span><span class="Delimiter">;</span>
+<span id="L165" class="LineNr">165 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L166" class="LineNr">166 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L167" class="LineNr">167 </span>  <span class="Conceal">¦</span> out &lt;&lt; no_scientific<span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L168" class="LineNr">168 </span>  <span class="Conceal">¦</span> <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L169" class="LineNr">169 </span>  <span class="Delimiter">}</span>
+<span id="L170" class="LineNr">170 </span>  out &lt;&lt; <span class="Constant">&quot;[&quot;</span><span class="Delimiter">;</span>
+<span id="L171" class="LineNr">171 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L172" class="LineNr">172 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">0</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">&quot;, &quot;</span><span class="Delimiter">;</span>
+<span id="L173" class="LineNr">173 </span>  <span class="Conceal">¦</span> out &lt;&lt; no_scientific<span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L174" class="LineNr">174 </span>  <span class="Delimiter">}</span>
+<span id="L175" class="LineNr">175 </span>  out &lt;&lt; <span class="Constant">&quot;]&quot;</span><span class="Delimiter">;</span>
+<span id="L176" class="LineNr">176 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L177" class="LineNr">177 </span><span class="Delimiter">}</span>
 </pre>
 </body>
 </html>
diff --git a/html/030container.cc.html b/html/030container.cc.html
index 4008d4bd..0482bdaf 100644
--- a/html/030container.cc.html
+++ b/html/030container.cc.html
@@ -70,7 +70,7 @@ if ('onhashchange' in window) {
 <span id="L3" class="LineNr">  3 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
 <span id="L4" class="LineNr">  4 </span><span class="Comment">//: We'll use this container as a running example in scenarios below.</span>
 <span id="L5" class="LineNr">  5 </span><a href='010vm.cc.html#L123'>type_ordinal</a> point = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;point&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
-<span id="L6" class="LineNr">  6 </span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point<span class="Delimiter">);</span>  <span class="Comment">// initialize</span>
+<span id="L6" class="LineNr">  6 </span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point<span class="Delimiter">);</span>  <span class="Comment">// initialize</span>
 <span id="L7" class="LineNr">  7 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point<span class="Delimiter">).</span>kind = <a href='010vm.cc.html#L173'>CONTAINER</a><span class="Delimiter">;</span>
 <span id="L8" class="LineNr">  8 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point<span class="Delimiter">).</span>name = <span class="Constant">&quot;point&quot;</span><span class="Delimiter">;</span>
 <span id="L9" class="LineNr">  9 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point<span class="Delimiter">).</span>elements<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span><span class="Constant">&quot;x:number&quot;</span><span class="Delimiter">));</span>
@@ -103,7 +103,7 @@ if ('onhashchange' in window) {
 <span id="L36" class="LineNr"> 36 </span><span class="Comment">// A more complex example container, containing another container as one of</span>
 <span id="L37" class="LineNr"> 37 </span><span class="Comment">// its elements.</span>
 <span id="L38" class="LineNr"> 38 </span><a href='010vm.cc.html#L123'>type_ordinal</a> point_number = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;point-number&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
-<span id="L39" class="LineNr"> 39 </span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point_number<span class="Delimiter">);</span>  <span class="Comment">// initialize</span>
+<span id="L39" class="LineNr"> 39 </span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point_number<span class="Delimiter">);</span>  <span class="Comment">// initialize</span>
 <span id="L40" class="LineNr"> 40 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point_number<span class="Delimiter">).</span>kind = <a href='010vm.cc.html#L173'>CONTAINER</a><span class="Delimiter">;</span>
 <span id="L41" class="LineNr"> 41 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point_number<span class="Delimiter">).</span>name = <span class="Constant">&quot;point-number&quot;</span><span class="Delimiter">;</span>
 <span id="L42" class="LineNr"> 42 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point_number<span class="Delimiter">).</span>elements<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span><span class="Constant">&quot;xy:point&quot;</span><span class="Delimiter">));</span>
@@ -243,7 +243,7 @@ if ('onhashchange' in window) {
 <span id="L176" class="LineNr">176 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- compute container sizes for &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L177" class="LineNr">177 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L178" class="LineNr">178 </span>  <span class="Conceal">¦</span> instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L179" class="LineNr">179 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;- compute container sizes for &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L179" class="LineNr">179 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;- compute container sizes for &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L180" class="LineNr">180 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
 <span id="L181" class="LineNr">181 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> compute_container_sizes<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot; in '&quot;</span>+to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span>+<span class="Constant">&quot;'&quot;</span><span class="Delimiter">);</span>
 <span id="L182" class="LineNr">182 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
@@ -264,13 +264,13 @@ if ('onhashchange' in window) {
 <span id="L197" class="LineNr">197 </span>
 <span id="L198" class="LineNr">198 </span><span class="Normal">void</span> compute_container_sizes<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">,</span> set&lt;type_tree&gt;&amp; pending_metadata<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; location_for_error_messages<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L199" class="LineNr">199 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L200" class="LineNr">200 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;compute container sizes for &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L200" class="LineNr">200 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;compute container sizes for &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L201" class="LineNr">201 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> type<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L202" class="LineNr">202 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>pending_metadata<span class="Delimiter">,</span> *type<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L203" class="LineNr">203 </span>  pending_metadata<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>*type<span class="Delimiter">);</span>
 <span id="L204" class="LineNr">204 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L205" class="LineNr">205 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L206" class="LineNr">206 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; location_for_error_messages &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L206" class="LineNr">206 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; location_for_error_messages &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L207" class="LineNr">207 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L208" class="LineNr">208 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L209" class="LineNr">209 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;address&quot;</span><span class="Delimiter">)</span>
@@ -741,7 +741,7 @@ if ('onhashchange' in window) {
 <span id="L674" class="LineNr">674 </span>  <span class="Delimiter">}</span>
 <span id="L675" class="LineNr">675 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;type number: &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L676" class="LineNr">676 </span>  <a href='030container.cc.html#L733'>skip_bracket</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> <span class="Constant">&quot;'&quot;</span>+command+<span class="Constant">&quot;' must begin with '['&quot;</span><span class="Delimiter">);</span>
-<span id="L677" class="LineNr">677 </span>  type_info&amp; info = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">));</span>
+<span id="L677" class="LineNr">677 </span>  type_info&amp; info = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">));</span>
 <span id="L678" class="LineNr">678 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>info<span class="Delimiter">.</span>Num_calls_to_transform_all_at_first_definition == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L679" class="LineNr">679 </span>  <span class="Conceal">¦</span> <span class="Comment">// initial definition of this container</span>
 <span id="L680" class="LineNr">680 </span>  <span class="Conceal">¦</span> info<span class="Delimiter">.</span>Num_calls_to_transform_all_at_first_definition = Num_calls_to_transform_all<span class="Delimiter">;</span>
@@ -753,7 +753,7 @@ if ('onhashchange' in window) {
 <span id="L686" class="LineNr">686 </span>  <span class="Delimiter">}</span>
 <span id="L687" class="LineNr">687 </span>  info<span class="Delimiter">.</span>name = name<span class="Delimiter">;</span>
 <span id="L688" class="LineNr">688 </span>  info<span class="Delimiter">.</span>kind = kind<span class="Delimiter">;</span>
-<span id="L689" class="LineNr">689 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L689" class="LineNr">689 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L690" class="LineNr">690 </span>  <span class="Conceal">¦</span> <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L691" class="LineNr">691 </span>  <span class="Conceal">¦</span> string element = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L692" class="LineNr">692 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>element<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
@@ -765,7 +765,7 @@ if ('onhashchange' in window) {
 <span id="L698" class="LineNr">698 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L699" class="LineNr">699 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; command &lt;&lt; <span class="Constant">&quot; '&quot;</span> &lt;&lt; name &lt;&lt; <span class="Constant">&quot;' contains multiple elements on a single line. Containers and exclusive containers must only contain elements, one to a line, no code.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L700" class="LineNr">700 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// skip rest of container declaration</span>
-<span id="L701" class="LineNr">701 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L701" class="LineNr">701 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L702" class="LineNr">702 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L703" class="LineNr">703 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> == <span class="Constant">&quot;]&quot;</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L704" class="LineNr">704 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
@@ -774,7 +774,7 @@ if ('onhashchange' in window) {
 <span id="L707" class="LineNr">707 </span>  <span class="Conceal">¦</span> info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span>element<span class="Delimiter">));</span>
 <span id="L708" class="LineNr">708 </span>  <span class="Conceal">¦</span> expand_type_abbreviations<span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">().</span>type<span class="Delimiter">);</span>  <span class="Comment">// todo: use abbreviation before declaration</span>
 <span id="L709" class="LineNr">709 </span>  <span class="Conceal">¦</span> <a href='030container.cc.html#L715'>replace_unknown_types_with_unique_ordinals</a><span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">().</span>type<span class="Delimiter">,</span> info<span class="Delimiter">);</span>
-<span id="L710" class="LineNr">710 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  element: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">())</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L710" class="LineNr">710 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  element: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">())</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L711" class="LineNr">711 </span>  <span class="Conceal">¦</span> <span class="Comment">// End Load Container Element Definition</span>
 <span id="L712" class="LineNr">712 </span>  <span class="Delimiter">}</span>
 <span id="L713" class="LineNr">713 </span><span class="Delimiter">}</span>
@@ -828,7 +828,7 @@ if ('onhashchange' in window) {
 <span id="L761" class="LineNr">761 </span><span class="Delimiter">:(code)</span>
 <span id="L762" class="LineNr">762 </span><span class="Comment">// extremely inefficient; we process all types over and over again, once for every single recipe</span>
 <span id="L763" class="LineNr">763 </span><span class="Comment">// but it doesn't seem to cause any noticeable slowdown</span>
-<span id="L764" class="LineNr">764 </span><span class="Normal">void</span> <a href='030container.cc.html#L764'>expand_type_abbreviations_in_containers</a><span class="Delimiter">(</span><a href='001help.cc.html#L258'>unused</a> <span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L764" class="LineNr">764 </span><span class="Normal">void</span> <a href='030container.cc.html#L764'>expand_type_abbreviations_in_containers</a><span class="Delimiter">(</span><a href='001help.cc.html#L259'>unused</a> <span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L765" class="LineNr">765 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;type_ordinal<span class="Delimiter">,</span> type_info&gt;::iterator p = Type<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Type<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L766" class="LineNr">766 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">.</span>elements<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
 <span id="L767" class="LineNr">767 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> expand_type_abbreviations<span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
diff --git a/html/031merge.cc.html b/html/031merge.cc.html
index be3d7a8a..8901967a 100644
--- a/html/031merge.cc.html
+++ b/html/031merge.cc.html
@@ -226,7 +226,7 @@ if ('onhashchange' in window) {
 <span id="L161" class="LineNr">161 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>top<span class="Delimiter">().</span>container_element_index == <span class="Constant">0</span> &amp;&amp; <a href='021check_instruction.cc.html#L115'>types_coercible</a><span class="Delimiter">(</span>container<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">)))</span>
 <span id="L162" class="LineNr">162 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L163" class="LineNr">163 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">const</span> reagent&amp; expected_ingredient = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>container<span class="Delimiter">.</span>type<span class="Delimiter">,</span> state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>top<span class="Delimiter">().</span>container_element_index<span class="Delimiter">);</span>
-<span id="L164" class="LineNr">164 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking container &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>container<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; || &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>expected_ingredient<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; vs ingredient &quot;</span> &lt;&lt; ingredient_index &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L164" class="LineNr">164 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking container &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>container<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; || &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>expected_ingredient<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; vs ingredient &quot;</span> &lt;&lt; ingredient_index &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L165" class="LineNr">165 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// if the current element is the ingredient we expect, move on to the next element/ingredient</span>
 <span id="L166" class="LineNr">166 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='021check_instruction.cc.html#L115'>types_coercible</a><span class="Delimiter">(</span>expected_ingredient<span class="Delimiter">,</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
 <span id="L167" class="LineNr">167 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> ++ingredient_index<span class="Delimiter">;</span>
diff --git a/html/032array.cc.html b/html/032array.cc.html
index 1ae8a45f..66e5c949 100644
--- a/html/032array.cc.html
+++ b/html/032array.cc.html
@@ -185,7 +185,7 @@ if ('onhashchange' in window) {
 <span id="L120" class="LineNr">120 </span>  <span class="Conceal">¦</span> <span class="Comment">// get size from type</span>
 <span id="L121" class="LineNr">121 </span>  <span class="Conceal">¦</span> <span class="Identifier">return</span> <a href='002test.cc.html#L91'>to_integer</a><span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
 <span id="L122" class="LineNr">122 </span>  <span class="Delimiter">}</span>
-<span id="L123" class="LineNr">123 </span>  cerr &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L123" class="LineNr">123 </span>  cerr &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
 <span id="L124" class="LineNr">124 </span>  assert<span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">);</span>
 <span id="L125" class="LineNr">125 </span><span class="Delimiter">}</span>
 <span id="L126" class="LineNr">126 </span>
@@ -424,7 +424,7 @@ if ('onhashchange' in window) {
 <span id="L359" class="LineNr">359 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> index = <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L360" class="LineNr">360 </span>  <span class="Comment">// Update INDEX index in Run</span>
 <span id="L361" class="LineNr">361 </span>  vector&lt;<span class="Normal">double</span>&gt; index_val<span class="Delimiter">(</span>read_memory<span class="Delimiter">(</span>index<span class="Delimiter">));</span>
-<span id="L362" class="LineNr">362 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt; <span class="Constant">0</span> || index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &gt;= <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L362" class="LineNr">362 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt; <span class="Constant">0</span> || index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &gt;= <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L363" class="LineNr">363 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;invalid index &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot; in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L364" class="LineNr">364 </span>  <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L365" class="LineNr">365 </span>  <span class="Delimiter">}</span>
@@ -432,7 +432,7 @@ if ('onhashchange' in window) {
 <span id="L367" class="LineNr">367 </span>  element<span class="Delimiter">.</span>type = <a href='032array.cc.html#L377'>copy_array_element</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
 <span id="L368" class="LineNr">368 </span>  element<span class="Delimiter">.</span><a href='010vm.cc.html#L65'>set_value</a><span class="Delimiter">(</span>base_address + <span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span> + index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span>*size_of<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
 <span id="L369" class="LineNr">369 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;address to copy is &quot;</span> &lt;&lt; element<span class="Delimiter">.</span>value &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L370" class="LineNr">370 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;its type is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L370" class="LineNr">370 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;its type is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L371" class="LineNr">371 </span>  <span class="Comment">// Read element</span>
 <span id="L372" class="LineNr">372 </span>  products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>read_memory<span class="Delimiter">(</span>element<span class="Delimiter">));</span>
 <span id="L373" class="LineNr">373 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -468,7 +468,7 @@ if ('onhashchange' in window) {
 <span id="L403" class="LineNr">403 </span>  <span class="Conceal">¦</span> <span class="Identifier">return</span> <a href='002test.cc.html#L91'>to_integer</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
 <span id="L404" class="LineNr">404 </span>  <span class="Delimiter">}</span>
 <span id="L405" class="LineNr">405 </span>  <span class="Comment">// this should never happen at transform time</span>
-<span id="L406" class="LineNr">406 </span>  <span class="Identifier">return</span> <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
+<span id="L406" class="LineNr">406 </span>  <span class="Identifier">return</span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
 <span id="L407" class="LineNr">407 </span><span class="Delimiter">}</span>
 <span id="L408" class="LineNr">408 </span>
 <span id="L409" class="LineNr">409 </span><span class="Delimiter">:(before &quot;End Unit Tests&quot;)</span>
@@ -614,7 +614,7 @@ if ('onhashchange' in window) {
 <span id="L549" class="LineNr">549 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> index = <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L550" class="LineNr">550 </span>  <span class="Comment">// Update PUT_INDEX index in Run</span>
 <span id="L551" class="LineNr">551 </span>  vector&lt;<span class="Normal">double</span>&gt; index_val<span class="Delimiter">(</span>read_memory<span class="Delimiter">(</span>index<span class="Delimiter">));</span>
-<span id="L552" class="LineNr">552 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt; <span class="Constant">0</span> || index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &gt;= <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L552" class="LineNr">552 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt; <span class="Constant">0</span> || index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &gt;= <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L553" class="LineNr">553 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;invalid index &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot; in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L554" class="LineNr">554 </span>  <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L555" class="LineNr">555 </span>  <span class="Delimiter">}</span>
@@ -711,7 +711,7 @@ if ('onhashchange' in window) {
 <span id="L646" class="LineNr">646 </span>  <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L647" class="LineNr">647 </span>  <span class="Delimiter">}</span>
 <span id="L648" class="LineNr">648 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L649" class="LineNr">649 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> array<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
+<span id="L649" class="LineNr">649 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> array<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
 <span id="L650" class="LineNr">650 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L651" class="LineNr">651 </span><span class="Delimiter">}</span>
 <span id="L652" class="LineNr">652 </span>
diff --git a/html/033exclusive_container.cc.html b/html/033exclusive_container.cc.html
index ae11dfd7..6c5e11d2 100644
--- a/html/033exclusive_container.cc.html
+++ b/html/033exclusive_container.cc.html
@@ -73,7 +73,7 @@ if ('onhashchange' in window) {
 <span id="L8" class="LineNr">  8 </span><span class="Comment">//: We'll use this container as a running example, with two number elements.</span>
 <span id="L9" class="LineNr">  9 </span><span class="Delimiter">{</span>
 <span id="L10" class="LineNr"> 10 </span><a href='010vm.cc.html#L123'>type_ordinal</a> tmp = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;number-or-point&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
-<span id="L11" class="LineNr"> 11 </span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> tmp<span class="Delimiter">);</span>  <span class="Comment">// initialize</span>
+<span id="L11" class="LineNr"> 11 </span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> tmp<span class="Delimiter">);</span>  <span class="Comment">// initialize</span>
 <span id="L12" class="LineNr"> 12 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> tmp<span class="Delimiter">).</span>kind = <a href='010vm.cc.html#L174'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">;</span>
 <span id="L13" class="LineNr"> 13 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> tmp<span class="Delimiter">).</span>name = <span class="Constant">&quot;number-or-point&quot;</span><span class="Delimiter">;</span>
 <span id="L14" class="LineNr"> 14 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> tmp<span class="Delimiter">).</span>elements<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span><span class="Constant">&quot;i:number&quot;</span><span class="Delimiter">));</span>
@@ -199,7 +199,7 @@ if ('onhashchange' in window) {
 <span id="L134" class="LineNr">134 </span>  <span class="Delimiter">}</span>
 <span id="L135" class="LineNr">135 </span>  <span class="Normal">const</span> reagent&amp; variant = variant_type<span class="Delimiter">(</span>base<span class="Delimiter">,</span> offset<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
 <span id="L136" class="LineNr">136 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>product<span class="Delimiter">,</span> variant<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L137" class="LineNr">137 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'maybe-convert &quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;' should write to &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' has type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>product<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L137" class="LineNr">137 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'maybe-convert &quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;' should write to &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' has type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>product<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L138" class="LineNr">138 </span>  <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L139" class="LineNr">139 </span>  <span class="Delimiter">}</span>
 <span id="L140" class="LineNr">140 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> status = inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
@@ -226,14 +226,14 @@ if ('onhashchange' in window) {
 <span id="L161" class="LineNr">161 </span>  <span class="Comment">// Update MAYBE_CONVERT status in Run</span>
 <span id="L162" class="LineNr">162 </span>  <span class="Comment">// optimization: directly write results to only update first product when necessary</span>
 <span id="L163" class="LineNr">163 </span>  write_products = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L164" class="LineNr">164 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>tag == <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L164" class="LineNr">164 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>tag == <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
 <span id="L165" class="LineNr">165 </span>  <span class="Conceal">¦</span> <span class="Normal">const</span> reagent&amp; variant = variant_type<span class="Delimiter">(</span>base<span class="Delimiter">,</span> tag<span class="Delimiter">);</span>
 <span id="L166" class="LineNr">166 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 1 in location &quot;</span> &lt;&lt; status<span class="Delimiter">.</span>value &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L167" class="LineNr">167 </span>  <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> status<span class="Delimiter">.</span>value<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L168" class="LineNr">168 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_dummy<span class="Delimiter">(</span>product<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L169" class="LineNr">169 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// Write Memory in Successful MAYBE_CONVERT in Run</span>
 <span id="L170" class="LineNr">170 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; size_of<span class="Delimiter">(</span>variant<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L171" class="LineNr">171 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">double</span> val = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address+<span class="Comment">/*</span><span class="Comment">skip tag</span><span class="Comment">*/</span><span class="Constant">1</span>+i<span class="Delimiter">);</span>
+<span id="L171" class="LineNr">171 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">double</span> val = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address+<span class="Comment">/*</span><span class="Comment">skip tag</span><span class="Comment">*/</span><span class="Constant">1</span>+i<span class="Delimiter">);</span>
 <span id="L172" class="LineNr">172 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>val<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; product<span class="Delimiter">.</span>value+i &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L173" class="LineNr">173 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> product<span class="Delimiter">.</span>value+i<span class="Delimiter">,</span> val<span class="Delimiter">);</span>
 <span id="L174" class="LineNr">174 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
@@ -383,7 +383,7 @@ if ('onhashchange' in window) {
 <span id="L318" class="LineNr">318 </span><span class="Delimiter">:(before &quot;End <a href='031merge.cc.html#L142'>check_merge_call</a> Special-cases&quot;)</span>
 <span id="L319" class="LineNr">319 </span><span class="Normal">case</span> <a href='010vm.cc.html#L174'>EXCLUSIVE_CONTAINER</a>: <span class="Delimiter">{</span>
 <span id="L320" class="LineNr">320 </span>  assert<span class="Delimiter">(</span>state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>top<span class="Delimiter">().</span>container_element_index == <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L321" class="LineNr">321 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking exclusive container &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>container<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; vs ingredient &quot;</span> &lt;&lt; ingredient_index &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L321" class="LineNr">321 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking exclusive container &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>container<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; vs ingredient &quot;</span> &lt;&lt; ingredient_index &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L322" class="LineNr">322 </span>  <span class="Comment">// easy case: exact match</span>
 <span id="L323" class="LineNr">323 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>types_strictly_match<span class="Delimiter">(</span>container<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">)))</span>
 <span id="L324" class="LineNr">324 </span>  <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
diff --git a/html/034address.cc.html b/html/034address.cc.html
index 83e47f3e..6f4d708e 100644
--- a/html/034address.cc.html
+++ b/html/034address.cc.html
@@ -271,7 +271,7 @@ if ('onhashchange' in window) {
 <span id="L207" class="LineNr">207 </span><span class="Normal">void</span> drop_from_type<span class="Delimiter">(</span>reagent&amp; r<span class="Delimiter">,</span> string expected_type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L208" class="LineNr">208 </span>  assert<span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
 <span id="L209" class="LineNr">209 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name != expected_type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L210" class="LineNr">210 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;can't drop2 &quot;</span> &lt;&lt; expected_type &lt;&lt; <span class="Constant">&quot; from '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L210" class="LineNr">210 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;can't drop2 &quot;</span> &lt;&lt; expected_type &lt;&lt; <span class="Constant">&quot; from '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L211" class="LineNr">211 </span>  <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L212" class="LineNr">212 </span>  <span class="Delimiter">}</span>
 <span id="L213" class="LineNr">213 </span>  <span class="Comment">// r.type = r.type-&gt;right</span>
diff --git a/html/035lookup.cc.html b/html/035lookup.cc.html
index d888828a..e7fdca04 100644
--- a/html/035lookup.cc.html
+++ b/html/035lookup.cc.html
@@ -164,8 +164,8 @@ if ('onhashchange' in window) {
 <span id="L99" class="LineNr"> 99 </span>
 <span id="L100" class="LineNr">100 </span><span class="Normal">void</span> lookup_memory_core<span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">bool</span> check_for_null<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L101" class="LineNr">101 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>value == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L102" class="LineNr">102 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;location &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L103" class="LineNr">103 </span>  x<span class="Delimiter">.</span><a href='010vm.cc.html#L65'>set_value</a><span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
+<span id="L102" class="LineNr">102 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;location &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L103" class="LineNr">103 </span>  x<span class="Delimiter">.</span><a href='010vm.cc.html#L65'>set_value</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
 <span id="L104" class="LineNr">104 </span>  drop_from_type<span class="Delimiter">(</span>x<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">);</span>
 <span id="L105" class="LineNr">105 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>value<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L106" class="LineNr">106 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;skipping refcount at &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>value &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
@@ -239,7 +239,7 @@ if ('onhashchange' in window) {
 <span id="L174" class="LineNr">174 </span><span class="Normal">bool</span> canonize_type<span class="Delimiter">(</span>reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L175" class="LineNr">175 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;lookup&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L176" class="LineNr">176 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type || r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom || !r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left || !r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom || r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value != get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L177" class="LineNr">177 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;cannot perform lookup on '&quot;</span> &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' because it has non-address type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L177" class="LineNr">177 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;cannot perform lookup on '&quot;</span> &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' because it has non-address type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L178" class="LineNr">178 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
 <span id="L179" class="LineNr">179 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L180" class="LineNr">180 </span>  <span class="Conceal">¦</span> drop_from_type<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">);</span>
@@ -578,7 +578,7 @@ if ('onhashchange' in window) {
 <span id="L513" class="LineNr">513 </span><span class="Normal">case</span> _DUMP: <span class="Delimiter">{</span>
 <span id="L514" class="LineNr">514 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> after_canonize = <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L515" class="LineNr">515 </span>  canonize<span class="Delimiter">(</span>after_canonize<span class="Delimiter">);</span>
-<span id="L516" class="LineNr">516 </span>  cerr &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">' '</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>value<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; =&gt; &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>after_canonize<span class="Delimiter">.</span>value<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; =&gt; &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> after_canonize<span class="Delimiter">.</span>value<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L516" class="LineNr">516 </span>  cerr &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">' '</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>value<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; =&gt; &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>after_canonize<span class="Delimiter">.</span>value<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; =&gt; &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> after_canonize<span class="Delimiter">.</span>value<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
 <span id="L517" class="LineNr">517 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L518" class="LineNr">518 </span><span class="Delimiter">}</span>
 <span id="L519" class="LineNr">519 </span>
@@ -593,7 +593,7 @@ if ('onhashchange' in window) {
 <span id="L528" class="LineNr">528 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L529" class="LineNr">529 </span><span class="Normal">case</span> _BAR: <span class="Delimiter">{</span>
 <span id="L530" class="LineNr">530 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L531" class="LineNr">531 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Bar != -<span class="Constant">1</span><span class="Delimiter">)</span> cerr &lt;&lt; Bar &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> Bar<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L531" class="LineNr">531 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Bar != -<span class="Constant">1</span><span class="Delimiter">)</span> cerr &lt;&lt; Bar &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> Bar<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
 <span id="L532" class="LineNr">532 </span>  <span class="Conceal">¦</span> <span class="Normal">else</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
 <span id="L533" class="LineNr">533 </span>  <span class="Delimiter">}</span>
 <span id="L534" class="LineNr">534 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
diff --git a/html/036refcount.cc.html b/html/036refcount.cc.html
index 8cb40e7a..e0d525af 100644
--- a/html/036refcount.cc.html
+++ b/html/036refcount.cc.html
@@ -83,7 +83,7 @@ if ('onhashchange' in window) {
 <span id="L18" class="LineNr">  18 </span><span class="traceContains">+mem: decrementing refcount of 1000: 1 -&gt; 0</span>
 <span id="L19" class="LineNr">  19 </span>
 <span id="L20" class="LineNr">  20 </span><span class="Delimiter">:(after &quot;Writing Instruction Product(i)&quot;)</span>
-<span id="L21" class="LineNr">  21 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='028call_return.cc.html#L114'>is_primitive</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>operation<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L21" class="LineNr">  21 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='028call_return.cc.html#L115'>is_primitive</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>operation<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L22" class="LineNr">  22 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> tmp = <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L23" class="LineNr">  23 </span>  canonize<span class="Delimiter">(</span>tmp<span class="Delimiter">);</span>
 <span id="L24" class="LineNr">  24 </span>  <a href='036refcount.cc.html#L35'>update_any_refcounts</a><span class="Delimiter">(</span>tmp<span class="Delimiter">,</span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
@@ -116,7 +116,7 @@ if ('onhashchange' in window) {
 <span id="L51" class="LineNr">  51 </span>  assert<span class="Delimiter">(</span>new_address &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L52" class="LineNr">  52 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>new_address == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L53" class="LineNr">  53 </span>  ++Total_refcount_updates<span class="Delimiter">;</span>
-<span id="L54" class="LineNr">  54 </span>  <span class="Normal">int</span> new_refcount = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> new_address<span class="Delimiter">);</span>
+<span id="L54" class="LineNr">  54 </span>  <span class="Normal">int</span> new_refcount = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> new_address<span class="Delimiter">);</span>
 <span id="L55" class="LineNr">  55 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;incrementing refcount of &quot;</span> &lt;&lt; new_address &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; new_refcount &lt;&lt; <span class="Constant">&quot; -&gt; &quot;</span> &lt;&lt; new_refcount+<span class="Constant">1</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L56" class="LineNr">  56 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> new_address<span class="Delimiter">,</span> new_refcount+<span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L57" class="LineNr">  57 </span><span class="Delimiter">}</span>
@@ -125,7 +125,7 @@ if ('onhashchange' in window) {
 <span id="L60" class="LineNr">  60 </span>  <span class="Comment">// Begin Decrement Refcounts(canonized_x)</span>
 <span id="L61" class="LineNr">  61 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>canonized_x<span class="Delimiter">)</span> &amp;&amp; canonized_x<span class="Delimiter">.</span>value != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L62" class="LineNr">  62 </span>  <span class="Conceal">¦</span> assert<span class="Delimiter">(</span>!canonized_x<span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>size<span class="Delimiter">);</span>
-<span id="L63" class="LineNr">  63 </span>  <span class="Conceal">¦</span> <a href='036refcount.cc.html#L68'>decrement_refcount</a><span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> canonized_x<span class="Delimiter">.</span>value<span class="Delimiter">),</span> <a href='030container.cc.html#L238'>payload_type</a><span class="Delimiter">(</span>canonized_x<span class="Delimiter">.</span>type<span class="Delimiter">),</span> <a href='036refcount.cc.html#L89'>payload_size</a><span class="Delimiter">(</span>canonized_x<span class="Delimiter">));</span>
+<span id="L63" class="LineNr">  63 </span>  <span class="Conceal">¦</span> <a href='036refcount.cc.html#L68'>decrement_refcount</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> canonized_x<span class="Delimiter">.</span>value<span class="Delimiter">),</span> <a href='030container.cc.html#L238'>payload_type</a><span class="Delimiter">(</span>canonized_x<span class="Delimiter">.</span>type<span class="Delimiter">),</span> <a href='036refcount.cc.html#L89'>payload_size</a><span class="Delimiter">(</span>canonized_x<span class="Delimiter">));</span>
 <span id="L64" class="LineNr">  64 </span>  <span class="Delimiter">}</span>
 <span id="L65" class="LineNr">  65 </span>  <span class="Comment">// End Decrement Refcounts(canonized_x)</span>
 <span id="L66" class="LineNr">  66 </span><span class="Delimiter">}</span>
@@ -134,7 +134,7 @@ if ('onhashchange' in window) {
 <span id="L69" class="LineNr">  69 </span>  assert<span class="Delimiter">(</span>old_address &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L70" class="LineNr">  70 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>old_address == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L71" class="LineNr">  71 </span>  ++Total_refcount_updates<span class="Delimiter">;</span>
-<span id="L72" class="LineNr">  72 </span>  <span class="Normal">int</span> old_refcount = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> old_address<span class="Delimiter">);</span>
+<span id="L72" class="LineNr">  72 </span>  <span class="Normal">int</span> old_refcount = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> old_address<span class="Delimiter">);</span>
 <span id="L73" class="LineNr">  73 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;decrementing refcount of &quot;</span> &lt;&lt; old_address &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; old_refcount &lt;&lt; <span class="Constant">&quot; -&gt; &quot;</span> &lt;&lt; old_refcount-<span class="Constant">1</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L74" class="LineNr">  74 </span>  --old_refcount<span class="Delimiter">;</span>
 <span id="L75" class="LineNr">  75 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> old_address<span class="Delimiter">,</span> old_refcount<span class="Delimiter">);</span>
@@ -257,7 +257,7 @@ if ('onhashchange' in window) {
 <span id="L192" class="LineNr"> 192 </span><span class="Comment">// todo: double-check data here as well</span>
 <span id="L193" class="LineNr"> 193 </span>vector&lt;<span class="Normal">double</span>&gt; data<span class="Delimiter">;</span>
 <span id="L194" class="LineNr"> 194 </span><span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; size_of<span class="Delimiter">(</span>product<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L195" class="LineNr"> 195 </span>  data<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address+<span class="Comment">/*</span><span class="Comment">skip tag</span><span class="Comment">*/</span><span class="Constant">1</span>+i<span class="Delimiter">));</span>
+<span id="L195" class="LineNr"> 195 </span>  data<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address+<span class="Comment">/*</span><span class="Comment">skip tag</span><span class="Comment">*/</span><span class="Constant">1</span>+i<span class="Delimiter">));</span>
 <span id="L196" class="LineNr"> 196 </span><a href='036refcount.cc.html#L35'>update_any_refcounts</a><span class="Delimiter">(</span>product<span class="Delimiter">,</span> data<span class="Delimiter">);</span>
 <span id="L197" class="LineNr"> 197 </span>
 <span id="L198" class="LineNr"> 198 </span><span class="SalientComment">//:: manage refcounts in instructions that copy multiple locations at a time</span>
@@ -377,7 +377,7 @@ if ('onhashchange' in window) {
 <span id="L312" class="LineNr"> 312 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- compute <a href='043space.cc.html#L82'>address</a> offsets for &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L313" class="LineNr"> 313 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L314" class="LineNr"> 314 </span>  <span class="Conceal">¦</span> instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L315" class="LineNr"> 315 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;- compute <a href='043space.cc.html#L82'>address</a> offsets for &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L315" class="LineNr"> 315 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;- compute <a href='043space.cc.html#L82'>address</a> offsets for &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L316" class="LineNr"> 316 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
 <span id="L317" class="LineNr"> 317 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> compute_container_address_offsets<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot; in '&quot;</span>+inst<span class="Delimiter">.</span>original_string+<span class="Constant">&quot;'&quot;</span><span class="Delimiter">);</span>
 <span id="L318" class="LineNr"> 318 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
@@ -398,7 +398,7 @@ if ('onhashchange' in window) {
 <span id="L333" class="LineNr"> 333 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L334" class="LineNr"> 334 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L335" class="LineNr"> 335 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L336" class="LineNr"> 336 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; location_for_error_messages &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L336" class="LineNr"> 336 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; location_for_error_messages &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L337" class="LineNr"> 337 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L338" class="LineNr"> 338 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L339" class="LineNr"> 339 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;address&quot;</span><span class="Delimiter">)</span>
@@ -438,7 +438,7 @@ if ('onhashchange' in window) {
 <span id="L373" class="LineNr"> 373 </span>
 <span id="L374" class="LineNr"> 374 </span><span class="Normal">void</span> <a href='036refcount.cc.html#L374'>append_addresses</a><span class="Delimiter">(</span><span class="Normal">int</span> base_offset<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* type<span class="Delimiter">,</span> map&lt;set&lt;tag_condition_info&gt;<span class="Delimiter">,</span> set&lt;address_element_info&gt; &gt;&amp; out<span class="Delimiter">,</span> <span class="Normal">const</span> set&lt;tag_condition_info&gt;&amp; key<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; location_for_error_messages<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L375" class="LineNr"> 375 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>type<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L376" class="LineNr"> 376 </span>  <span class="Conceal">¦</span> <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>out<span class="Delimiter">,</span> key<span class="Delimiter">).</span>insert<span class="Delimiter">(</span>address_element_info<span class="Delimiter">(</span>base_offset<span class="Delimiter">,</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*payload_type<span class="Delimiter">(</span>type<span class="Delimiter">))));</span>
+<span id="L376" class="LineNr"> 376 </span>  <span class="Conceal">¦</span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>out<span class="Delimiter">,</span> key<span class="Delimiter">).</span>insert<span class="Delimiter">(</span>address_element_info<span class="Delimiter">(</span>base_offset<span class="Delimiter">,</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*payload_type<span class="Delimiter">(</span>type<span class="Delimiter">))));</span>
 <span id="L377" class="LineNr"> 377 </span>  <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L378" class="LineNr"> 378 </span>  <span class="Delimiter">}</span>
 <span id="L379" class="LineNr"> 379 </span>  <span class="Normal">const</span> type_tree* base_type = type<span class="Delimiter">;</span>
@@ -451,7 +451,7 @@ if ('onhashchange' in window) {
 <span id="L386" class="LineNr"> 386 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// Compute Container Address Offset(element)</span>
 <span id="L387" class="LineNr"> 387 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>element<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L388" class="LineNr"> 388 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;address at offset &quot;</span> &lt;&lt; curr_offset &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L389" class="LineNr"> 389 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>out<span class="Delimiter">,</span> key<span class="Delimiter">).</span>insert<span class="Delimiter">(</span>address_element_info<span class="Delimiter">(</span>curr_offset<span class="Delimiter">,</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*payload_type<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">))));</span>
+<span id="L389" class="LineNr"> 389 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>out<span class="Delimiter">,</span> key<span class="Delimiter">).</span>insert<span class="Delimiter">(</span>address_element_info<span class="Delimiter">(</span>curr_offset<span class="Delimiter">,</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*payload_type<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">))));</span>
 <span id="L390" class="LineNr"> 390 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> ++curr_offset<span class="Delimiter">;</span>
 <span id="L391" class="LineNr"> 391 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L392" class="LineNr"> 392 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_array<span class="Delimiter">(</span>element<span class="Delimiter">))</span> <span class="Delimiter">{</span>
@@ -794,7 +794,7 @@ if ('onhashchange' in window) {
 <span id="L729" class="LineNr"> 729 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;set&lt;tag_condition_info&gt;<span class="Delimiter">,</span> set&lt;address_element_info&gt; &gt;::const_iterator p = metadata<span class="Delimiter">.</span><a href='043space.cc.html#L82'>address</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != metadata<span class="Delimiter">.</span><a href='043space.cc.html#L82'>address</a><span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L730" class="LineNr"> 730 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!all_match<span class="Delimiter">(</span>data<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L731" class="LineNr"> 731 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span>set&lt;address_element_info&gt;::const_iterator info = p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  info != p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>  ++info<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L732" class="LineNr"> 732 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">int</span> element_address = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> canonized_x<span class="Delimiter">.</span>value + info<span class="Delimiter">-&gt;</span>offset<span class="Delimiter">);</span>
+<span id="L732" class="LineNr"> 732 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">int</span> element_address = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> canonized_x<span class="Delimiter">.</span>value + info<span class="Delimiter">-&gt;</span>offset<span class="Delimiter">);</span>
 <span id="L733" class="LineNr"> 733 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> reagent<span class="Comment">/*</span><span class="Comment">local</span><span class="Comment">*/</span> element<span class="Delimiter">;</span>
 <span id="L734" class="LineNr"> 734 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> element<span class="Delimiter">.</span><a href='010vm.cc.html#L65'>set_value</a><span class="Delimiter">(</span>element_address+<span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L735" class="LineNr"> 735 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> element<span class="Delimiter">.</span>type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*info<span class="Delimiter">-&gt;</span><a href='030container.cc.html#L238'>payload_type</a><span class="Delimiter">);</span>
@@ -1138,7 +1138,7 @@ if ('onhashchange' in window) {
 <span id="L1073" class="LineNr">1073 </span><span class="Normal">void</span> <a href='036refcount.cc.html#L1073'>dump_recipe_profile</a><span class="Delimiter">(</span><a href='010vm.cc.html#L14'>recipe_ordinal</a> ridx<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; r<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L1074" class="LineNr">1074 </span>  out &lt;&lt; <span class="Constant">&quot;recipe &quot;</span> &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
 <span id="L1075" class="LineNr">1075 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L1076" class="LineNr">1076 </span>  <span class="Conceal">¦</span> out &lt;&lt; std::setw<span class="Delimiter">(</span><span class="Constant">6</span><span class="Delimiter">)</span> &lt;&lt; Num_refcount_updates[ridx][i] &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L1076" class="LineNr">1076 </span>  <span class="Conceal">¦</span> out &lt;&lt; std::setw<span class="Delimiter">(</span><span class="Constant">6</span><span class="Delimiter">)</span> &lt;&lt; Num_refcount_updates[ridx][i] &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
 <span id="L1077" class="LineNr">1077 </span>  <span class="Delimiter">}</span>
 <span id="L1078" class="LineNr">1078 </span>  out &lt;&lt; <span class="Constant">&quot;]</span><span class="cSpecial">\n\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
 <span id="L1079" class="LineNr">1079 </span><span class="Delimiter">}</span>
diff --git a/html/037abandon.cc.html b/html/037abandon.cc.html
index 848bbc41..c073c216 100644
--- a/html/037abandon.cc.html
+++ b/html/037abandon.cc.html
@@ -91,7 +91,7 @@ if ('onhashchange' in window) {
 <span id="L26" class="LineNr"> 26 </span>
 <span id="L27" class="LineNr"> 27 </span><span class="Delimiter">:(code)</span>
 <span id="L28" class="LineNr"> 28 </span><span class="Normal">void</span> <a href='037abandon.cc.html#L28'>abandon</a><span class="Delimiter">(</span><span class="Normal">int</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* <a href='030container.cc.html#L238'>payload_type</a><span class="Delimiter">,</span> <span class="Normal">int</span> <a href='036refcount.cc.html#L89'>payload_size</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L29" class="LineNr"> 29 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;abandon&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;updating refcounts inside &quot;</span> &lt;&lt; <a href='043space.cc.html#L82'>address</a> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><a href='030container.cc.html#L238'>payload_type</a><span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L29" class="LineNr"> 29 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;abandon&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;updating refcounts inside &quot;</span> &lt;&lt; <a href='043space.cc.html#L82'>address</a> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='030container.cc.html#L238'>payload_type</a><span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L30" class="LineNr"> 30 </span><span class="CommentedCode">//?   Total_free += size;</span>
 <span id="L31" class="LineNr"> 31 </span><span class="CommentedCode">//?   ++Num_free;</span>
 <span id="L32" class="LineNr"> 32 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;abandon: &quot; &lt;&lt; size &lt;&lt; '\n';</span>
@@ -99,7 +99,7 @@ if ('onhashchange' in window) {
 <span id="L34" class="LineNr"> 34 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_array<span class="Delimiter">(</span><a href='030container.cc.html#L238'>payload_type</a><span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L35" class="LineNr"> 35 </span>  <span class="Conceal">¦</span> reagent<span class="Comment">/*</span><span class="Comment">local</span><span class="Comment">*/</span> element<span class="Delimiter">;</span>
 <span id="L36" class="LineNr"> 36 </span>  <span class="Conceal">¦</span> element<span class="Delimiter">.</span>type = <a href='032array.cc.html#L377'>copy_array_element</a><span class="Delimiter">(</span><a href='030container.cc.html#L238'>payload_type</a><span class="Delimiter">);</span>
-<span id="L37" class="LineNr"> 37 </span>  <span class="Conceal">¦</span> <span class="Normal">int</span> <a href='032array.cc.html#L397'>array_length</a> = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> address+<span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L37" class="LineNr"> 37 </span>  <span class="Conceal">¦</span> <span class="Normal">int</span> <a href='032array.cc.html#L397'>array_length</a> = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> address+<span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L38" class="LineNr"> 38 </span>  <span class="Conceal">¦</span> assert<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name != <span class="Constant">&quot;array&quot;</span><span class="Delimiter">);</span>
 <span id="L39" class="LineNr"> 39 </span>  <span class="Conceal">¦</span> <span class="Normal">int</span> element_size = size_of<span class="Delimiter">(</span>element<span class="Delimiter">);</span>
 <span id="L40" class="LineNr"> 40 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='032array.cc.html#L397'>array_length</a><span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
@@ -118,19 +118,19 @@ if ('onhashchange' in window) {
 <span id="L53" class="LineNr"> 53 </span>  <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L54" class="LineNr"> 54 </span>  <span class="Comment">// append existing free list to address</span>
 <span id="L55" class="LineNr"> 55 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;abandon&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;saving &quot;</span> &lt;&lt; <a href='043space.cc.html#L82'>address</a> &lt;&lt; <span class="Constant">&quot; in free-list of size &quot;</span> &lt;&lt; <a href='036refcount.cc.html#L89'>payload_size</a> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L56" class="LineNr"> 56 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">,</span> <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> <a href='036refcount.cc.html#L89'>payload_size</a><span class="Delimiter">));</span>
+<span id="L56" class="LineNr"> 56 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">,</span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> <a href='036refcount.cc.html#L89'>payload_size</a><span class="Delimiter">));</span>
 <span id="L57" class="LineNr"> 57 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> <a href='036refcount.cc.html#L89'>payload_size</a><span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">);</span>
 <span id="L58" class="LineNr"> 58 </span><span class="Delimiter">}</span>
 <span id="L59" class="LineNr"> 59 </span>
 <span id="L60" class="LineNr"> 60 </span><span class="Delimiter">:(after &quot;Allocate Special-cases&quot;)</span>
-<span id="L61" class="LineNr"> 61 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> size<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L61" class="LineNr"> 61 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> size<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L62" class="LineNr"> 62 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;abandon&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;picking up space from free-list of size &quot;</span> &lt;&lt; size &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L63" class="LineNr"> 63 </span>  <span class="Normal">int</span> result = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> size<span class="Delimiter">);</span>
+<span id="L63" class="LineNr"> 63 </span>  <span class="Normal">int</span> result = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> size<span class="Delimiter">);</span>
 <span id="L64" class="LineNr"> 64 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;new alloc from free list: &quot;</span> &lt;&lt; result &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L65" class="LineNr"> 65 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> size<span class="Delimiter">,</span> <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> result<span class="Delimiter">));</span>
+<span id="L65" class="LineNr"> 65 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> size<span class="Delimiter">,</span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> result<span class="Delimiter">));</span>
 <span id="L66" class="LineNr"> 66 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> result<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L67" class="LineNr"> 67 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> curr = result<span class="Delimiter">;</span>  curr &lt; result+size<span class="Delimiter">;</span>  ++curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L68" class="LineNr"> 68 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)</span> != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L68" class="LineNr"> 68 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)</span> != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L69" class="LineNr"> 69 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;memory in free list was not zeroed out: &quot;</span> &lt;&lt; curr &lt;&lt; <span class="Constant">'/'</span> &lt;&lt; result &lt;&lt; <span class="Constant">&quot;; somebody wrote to us after free!!!</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L70" class="LineNr"> 70 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// always fatal</span>
 <span id="L71" class="LineNr"> 71 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
diff --git a/html/038new_text.cc.html b/html/038new_text.cc.html
index 6b422c40..ba71f478 100644
--- a/html/038new_text.cc.html
+++ b/html/038new_text.cc.html
@@ -146,13 +146,13 @@ if ('onhashchange' in window) {
 <span id="L81" class="LineNr"> 81 </span><span class="traceContains">+app: foo: abc</span>
 <span id="L82" class="LineNr"> 82 </span>
 <span id="L83" class="LineNr"> 83 </span><span class="Delimiter">:(before &quot;End inspect Special-cases(r, data)&quot;)</span>
-<span id="L84" class="LineNr"> 84 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L174'>is_mu_text</a><span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L84" class="LineNr"> 84 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L85" class="LineNr"> 85 </span>  assert<span class="Delimiter">(</span>scalar<span class="Delimiter">(</span>data<span class="Delimiter">));</span>
 <span id="L86" class="LineNr"> 86 </span>  <span class="Identifier">return</span> <a href='038new_text.cc.html#L143'>read_mu_text</a><span class="Delimiter">(</span>data<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
 <span id="L87" class="LineNr"> 87 </span><span class="Delimiter">}</span>
 <span id="L88" class="LineNr"> 88 </span>
 <span id="L89" class="LineNr"> 89 </span><span class="Delimiter">:(before &quot;End $print Special-cases&quot;)</span>
-<span id="L90" class="LineNr"> 90 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L174'>is_mu_text</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L90" class="LineNr"> 90 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
 <span id="L91" class="LineNr"> 91 </span>  cout &lt;&lt; <a href='038new_text.cc.html#L143'>read_mu_text</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
 <span id="L92" class="LineNr"> 92 </span><span class="Delimiter">}</span>
 <span id="L93" class="LineNr"> 93 </span>
@@ -208,7 +208,7 @@ if ('onhashchange' in window) {
 <span id="L143" class="LineNr">143 </span>string <a href='038new_text.cc.html#L143'>read_mu_text</a><span class="Delimiter">(</span><span class="Normal">int</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L144" class="LineNr">144 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='043space.cc.html#L82'>address</a> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
 <span id="L145" class="LineNr">145 </span>  ++address<span class="Delimiter">;</span>  <span class="Comment">// skip refcount</span>
-<span id="L146" class="LineNr">146 </span>  <span class="Normal">int</span> length = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">);</span>
+<span id="L146" class="LineNr">146 </span>  <span class="Normal">int</span> length = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">);</span>
 <span id="L147" class="LineNr">147 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>length == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
 <span id="L148" class="LineNr">148 </span>  <span class="Identifier">return</span> <a href='038new_text.cc.html#L151'>read_mu_characters</a><span class="Delimiter">(</span>address+<span class="Constant">1</span><span class="Delimiter">,</span> length<span class="Delimiter">);</span>
 <span id="L149" class="LineNr">149 </span><span class="Delimiter">}</span>
@@ -216,7 +216,7 @@ if ('onhashchange' in window) {
 <span id="L151" class="LineNr">151 </span>string <a href='038new_text.cc.html#L151'>read_mu_characters</a><span class="Delimiter">(</span><span class="Normal">int</span> start<span class="Delimiter">,</span> <span class="Normal">int</span> length<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L152" class="LineNr">152 </span>  ostringstream tmp<span class="Delimiter">;</span>
 <span id="L153" class="LineNr">153 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> curr = start<span class="Delimiter">;</span>  curr &lt; start+length<span class="Delimiter">;</span>  ++curr<span class="Delimiter">)</span>
-<span id="L154" class="LineNr">154 </span>  <span class="Conceal">¦</span> tmp &lt;&lt; to_unicode<span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">uint32_t</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)));</span>
+<span id="L154" class="LineNr">154 </span>  <span class="Conceal">¦</span> tmp &lt;&lt; to_unicode<span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">uint32_t</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)));</span>
 <span id="L155" class="LineNr">155 </span>  <span class="Identifier">return</span> tmp<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
 <span id="L156" class="LineNr">156 </span><span class="Delimiter">}</span>
 <span id="L157" class="LineNr">157 </span>
@@ -277,7 +277,7 @@ if ('onhashchange' in window) {
 <span id="L212" class="LineNr">212 </span><span class="Normal">case</span> _READ: <span class="Delimiter">{</span>
 <span id="L213" class="LineNr">213 </span>  <a href='038new_text.cc.html#L223'>skip_whitespace</a><span class="Delimiter">(</span>cin<span class="Delimiter">);</span>
 <span id="L214" class="LineNr">214 </span>  string result<span class="Delimiter">;</span>
-<span id="L215" class="LineNr">215 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>cin<span class="Delimiter">))</span>
+<span id="L215" class="LineNr">215 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>cin<span class="Delimiter">))</span>
 <span id="L216" class="LineNr">216 </span>  <span class="Conceal">¦</span> cin &gt;&gt; result<span class="Delimiter">;</span>
 <span id="L217" class="LineNr">217 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L218" class="LineNr">218 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='038new_text.cc.html#L38'>new_mu_text</a><span class="Delimiter">(</span>result<span class="Delimiter">));</span>
diff --git a/html/043space.cc.html b/html/043space.cc.html
index ac9c1f97..c7e94729 100644
--- a/html/043space.cc.html
+++ b/html/043space.cc.html
@@ -148,7 +148,7 @@ if ('onhashchange' in window) {
 <span id="L82" class="LineNr"> 82 </span><span class="Normal">int</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">(</span><span class="Normal">int</span> offset<span class="Delimiter">,</span> <span class="Normal">int</span> base<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L83" class="LineNr"> 83 </span>  assert<span class="Delimiter">(</span>offset &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L84" class="LineNr"> 84 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> offset<span class="Delimiter">;</span>  <span class="Comment">// raw</span>
-<span id="L85" class="LineNr"> 85 </span>  <span class="Normal">int</span> size = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base<span class="Delimiter">);</span>
+<span id="L85" class="LineNr"> 85 </span>  <span class="Normal">int</span> size = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base<span class="Delimiter">);</span>
 <span id="L86" class="LineNr"> 86 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>offset &gt;= size<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L87" class="LineNr"> 87 </span>  <span class="Conceal">¦</span> <span class="Comment">// todo: test</span>
 <span id="L88" class="LineNr"> 88 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot;: location &quot;</span> &lt;&lt; offset &lt;&lt; <span class="Constant">&quot; is out of bounds &quot;</span> &lt;&lt; size &lt;&lt; <span class="Constant">&quot; at &quot;</span> &lt;&lt; base &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
@@ -164,7 +164,7 @@ if ('onhashchange' in window) {
 <span id="L98" class="LineNr"> 98 </span><span class="Delimiter">:(after &quot;Begin Preprocess write_memory(x, data)&quot;)</span>
 <span id="L99" class="LineNr"> 99 </span><span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L100" class="LineNr">100 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!scalar<span class="Delimiter">(</span>data<span class="Delimiter">)</span> || !is_mu_space<span class="Delimiter">(</span>x<span class="Delimiter">))</span>
-<span id="L101" class="LineNr">101 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'default-space' should be of type <a href='043space.cc.html#L82'>address</a>:array:location, but is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L101" class="LineNr">101 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'default-space' should be of type <a href='043space.cc.html#L82'>address</a>:array:location, but is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L102" class="LineNr">102 </span>  <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>default_space = data<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L103" class="LineNr">103 </span>  <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L104" class="LineNr">104 </span><span class="Delimiter">}</span>
@@ -314,7 +314,7 @@ if ('onhashchange' in window) {
 <span id="L248" class="LineNr">248 </span><span class="Delimiter">}</span>
 <span id="L249" class="LineNr">249 </span><span class="Delimiter">:(after &quot;Begin Decrement Refcounts(canonized_x)&quot;)</span>
 <span id="L250" class="LineNr">250 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='043space.cc.html#L106'>is_mu_space</a><span class="Delimiter">(</span>canonized_x<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L251" class="LineNr">251 </span>  <span class="Normal">int</span> space_address = <span class="Delimiter">(</span>canonized_x<span class="Delimiter">.</span>name == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">)</span> ? <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>default_space : <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> canonized_x<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
+<span id="L251" class="LineNr">251 </span>  <span class="Normal">int</span> space_address = <span class="Delimiter">(</span>canonized_x<span class="Delimiter">.</span>name == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">)</span> ? <a href='026call.cc.html#L81'>current_call</a><span class="Delimiter">().</span>default_space : <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> canonized_x<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
 <span id="L252" class="LineNr">252 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>space_address == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L253" class="LineNr">253 </span>  <span class="Comment">// this branch relies on global state</span>
 <span id="L254" class="LineNr">254 </span>  string recipe_name<span class="Delimiter">;</span>
@@ -324,7 +324,7 @@ if ('onhashchange' in window) {
 <span id="L258" class="LineNr">258 </span>  <span class="Delimiter">}</span>
 <span id="L259" class="LineNr">259 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
 <span id="L260" class="LineNr">260 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>canonized_x<span class="Delimiter">.</span>name != <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">)</span>
-<span id="L261" class="LineNr">261 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> cerr &lt;&lt; <a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>canonized_x<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L261" class="LineNr">261 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> cerr &lt;&lt; <a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>canonized_x<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
 <span id="L262" class="LineNr">262 </span>  <span class="Conceal">¦</span> assert<span class="Delimiter">(</span>canonized_x<span class="Delimiter">.</span>name == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">);</span>
 <span id="L263" class="LineNr">263 </span>  <span class="Conceal">¦</span> recipe_name = <a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">();</span>
 <span id="L264" class="LineNr">264 </span>  <span class="Delimiter">}</span>
@@ -356,7 +356,7 @@ if ('onhashchange' in window) {
 <span id="L290" class="LineNr">290 </span><span class="traceContains">+mem: automatically abandoning 1000</span>
 <span id="L291" class="LineNr">291 </span>
 <span id="L292" class="LineNr">292 </span><span class="Delimiter">:(before &quot;Reclaim Space(space_address, space_recipe_ordinal, space_recipe)&quot;)</span>
-<span id="L293" class="LineNr">293 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> space_address<span class="Delimiter">)</span> &lt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L293" class="LineNr">293 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> space_address<span class="Delimiter">)</span> &lt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L294" class="LineNr">294 </span>  set&lt;string&gt; reclaimed_locals<span class="Delimiter">;</span>
 <span id="L295" class="LineNr">295 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;trying to reclaim locals&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L296" class="LineNr">296 </span>  <span class="Comment">// update any refcounts for variables in the space -- in the context of the space</span>
diff --git a/html/044space_surround.cc.html b/html/044space_surround.cc.html
index c6291f2e..312a9293 100644
--- a/html/044space_surround.cc.html
+++ b/html/044space_surround.cc.html
@@ -108,7 +108,7 @@ if ('onhashchange' in window) {
 <span id="L45" class="LineNr">45 </span><span class="Normal">int</span> <a href='043space.cc.html#L78'>space_base</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">int</span> space_index<span class="Delimiter">,</span> <span class="Normal">int</span> base<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L46" class="LineNr">46 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>space_index == <span class="Constant">0</span><span class="Delimiter">)</span>
 <span id="L47" class="LineNr">47 </span>  <span class="Conceal">¦</span> <span class="Identifier">return</span> base<span class="Delimiter">;</span>
-<span id="L48" class="LineNr">48 </span>  <span class="Normal">int</span> result = <a href='043space.cc.html#L78'>space_base</a><span class="Delimiter">(</span>x<span class="Delimiter">,</span> space_index-<span class="Constant">1</span><span class="Delimiter">,</span> <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base+<span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">))</span>+<span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L48" class="LineNr">48 </span>  <span class="Normal">int</span> result = <a href='043space.cc.html#L78'>space_base</a><span class="Delimiter">(</span>x<span class="Delimiter">,</span> space_index-<span class="Constant">1</span><span class="Delimiter">,</span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base+<span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">))</span>+<span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
 <span id="L49" class="LineNr">49 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
 <span id="L50" class="LineNr">50 </span><span class="Delimiter">}</span>
 <span id="L51" class="LineNr">51 </span>
diff --git a/html/045closure_name.cc.html b/html/045closure_name.cc.html
index 1740cdf2..579fb9ef 100644
--- a/html/045closure_name.cc.html
+++ b/html/045closure_name.cc.html
@@ -165,7 +165,7 @@ if ('onhashchange' in window) {
 <span id="L102" class="LineNr">102 </span><span class="Normal">int</span> lookup_name<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">,</span> set&lt;recipe_ordinal&gt;&amp; done<span class="Delimiter">,</span> vector&lt;recipe_ordinal&gt;&amp; path<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L103" class="LineNr">103 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Name[r]<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> Name[r][x<span class="Delimiter">.</span>name]<span class="Delimiter">;</span>
 <span id="L104" class="LineNr">104 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>done<span class="Delimiter">,</span> r<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L105" class="LineNr">105 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;can't compute address of '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' because</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L105" class="LineNr">105 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;can't compute address of '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' because</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L106" class="LineNr">106 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>path<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L107" class="LineNr">107 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; path<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i-<span class="Constant">1</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; requires computing names of &quot;</span> &lt;&lt; path<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L108" class="LineNr">108 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
diff --git a/html/050scenario.cc.html b/html/050scenario.cc.html
index e47925c1..0cffb879 100644
--- a/html/050scenario.cc.html
+++ b/html/050scenario.cc.html
@@ -499,9 +499,9 @@ if ('onhashchange' in window) {
 <span id="L432" class="LineNr">432 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>locations_checked<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">))</span>
 <span id="L433" class="LineNr">433 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;duplicate expectation for location '&quot;</span> &lt;&lt; address &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L434" class="LineNr">434 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking location &quot;</span> &lt;&lt; <a href='043space.cc.html#L82'>address</a> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L435" class="LineNr">435 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">)</span> != value<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L435" class="LineNr">435 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">)</span> != value<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L436" class="LineNr">436 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L437" class="LineNr">437 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;expected location '&quot;</span> &lt;&lt; address &lt;&lt; <span class="Constant">&quot;' to contain &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>value<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but saw &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L437" class="LineNr">437 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;expected location '&quot;</span> &lt;&lt; address &lt;&lt; <span class="Constant">&quot;' to contain &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>value<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but saw &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L438" class="LineNr">438 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
 <span id="L439" class="LineNr">439 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L440" class="LineNr">440 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
@@ -545,7 +545,7 @@ if ('onhashchange' in window) {
 <span id="L478" class="LineNr">478 </span>
 <span id="L479" class="LineNr">479 </span><span class="Normal">void</span> check_mu_text<span class="Delimiter">(</span><span class="Normal">int</span> start<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; literal<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L480" class="LineNr">480 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking text length at &quot;</span> &lt;&lt; start &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L481" class="LineNr">481 </span>  <span class="Normal">int</span> <a href='032array.cc.html#L397'>array_length</a> = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> start<span class="Delimiter">));</span>
+<span id="L481" class="LineNr">481 </span>  <span class="Normal">int</span> <a href='032array.cc.html#L397'>array_length</a> = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> start<span class="Delimiter">));</span>
 <span id="L482" class="LineNr">482 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='032array.cc.html#L397'>array_length</a> != <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>literal<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L483" class="LineNr">483 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
 <span id="L484" class="LineNr">484 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;expected location '&quot;</span> &lt;&lt; start &lt;&lt; <span class="Constant">&quot;' to contain length &quot;</span> &lt;&lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>literal<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; of text [&quot;</span> &lt;&lt; literal &lt;&lt; <span class="Constant">&quot;] but saw &quot;</span> &lt;&lt; <a href='032array.cc.html#L397'>array_length</a> &lt;&lt; <span class="Constant">&quot; (for text [&quot;</span> &lt;&lt; <a href='038new_text.cc.html#L151'>read_mu_characters</a><span class="Delimiter">(</span>start+<span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">,</span> <a href='032array.cc.html#L397'>array_length</a><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;])</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
@@ -555,9 +555,9 @@ if ('onhashchange' in window) {
 <span id="L488" class="LineNr">488 </span>  <span class="Normal">int</span> curr = start+<span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// now skip length</span>
 <span id="L489" class="LineNr">489 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>literal<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L490" class="LineNr">490 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking location &quot;</span> &lt;&lt; curr+i &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L491" class="LineNr">491 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr+i<span class="Delimiter">)</span> != literal<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L491" class="LineNr">491 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr+i<span class="Delimiter">)</span> != literal<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L492" class="LineNr">492 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L493" class="LineNr">493 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;expected location &quot;</span> &lt;&lt; <span class="Delimiter">(</span>curr+i<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; to contain &quot;</span> &lt;&lt; literal<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but saw &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr+i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L493" class="LineNr">493 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;expected location &quot;</span> &lt;&lt; <span class="Delimiter">(</span>curr+i<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; to contain &quot;</span> &lt;&lt; literal<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but saw &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr+i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L494" class="LineNr">494 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
 <span id="L495" class="LineNr">495 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L496" class="LineNr">496 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
diff --git a/html/053recipe_header.cc.html b/html/053recipe_header.cc.html
index 3d30ac4c..09471737 100644
--- a/html/053recipe_header.cc.html
+++ b/html/053recipe_header.cc.html
@@ -97,7 +97,7 @@ if ('onhashchange' in window) {
 <span id="L31" class="LineNr"> 31 </span><span class="Delimiter">:(code)</span>
 <span id="L32" class="LineNr"> 32 </span><span class="Normal">void</span> <a href='053recipe_header.cc.html#L32'>load_recipe_header</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> recipe&amp; result<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L33" class="LineNr"> 33 </span>  result<span class="Delimiter">.</span>has_header = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L34" class="LineNr"> 34 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="Constant">'['</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L34" class="LineNr"> 34 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="Constant">'['</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L35" class="LineNr"> 35 </span>  <span class="Conceal">¦</span> string s = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L36" class="LineNr"> 36 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>s<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L37" class="LineNr"> 37 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
@@ -111,7 +111,7 @@ if ('onhashchange' in window) {
 <span id="L45" class="LineNr"> 45 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;header ingredient: &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>back<span class="Delimiter">().</span>original_string &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L46" class="LineNr"> 46 </span>  <span class="Conceal">¦</span> skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L47" class="LineNr"> 47 </span>  <span class="Delimiter">}</span>
-<span id="L48" class="LineNr"> 48 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="Constant">'['</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L48" class="LineNr"> 48 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="Constant">'['</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L49" class="LineNr"> 49 </span>  <span class="Conceal">¦</span> string s = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L50" class="LineNr"> 50 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>s<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L51" class="LineNr"> 51 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
@@ -242,7 +242,7 @@ if ('onhashchange' in window) {
 <span id="L176" class="LineNr">176 </span><span class="Comment">//: Rewrite 'load-ingredients' to instructions to create all reagents in the header.</span>
 <span id="L177" class="LineNr">177 </span>
 <span id="L178" class="LineNr">178 </span><span class="Delimiter">:(before &quot;End Rewrite Instruction(curr, <a href='010vm.cc.html#L19'>recipe</a> result)&quot;)</span>
-<span id="L179" class="LineNr">179 </span><span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>name == <span class="Constant">&quot;load-ingredients&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L179" class="LineNr">179 </span><span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>name == <span class="Constant">&quot;load-ingredients&quot;</span> || curr<span class="Delimiter">.</span>name == <span class="Constant">&quot;load-inputs&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L180" class="LineNr">180 </span>  curr<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
 <span id="L181" class="LineNr">181 </span>  <a href='010vm.cc.html#L14'>recipe_ordinal</a> op = get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;next-ingredient-without-typechecking&quot;</span><span class="Delimiter">);</span>
 <span id="L182" class="LineNr">182 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
@@ -357,7 +357,7 @@ if ('onhashchange' in window) {
 <span id="L291" class="LineNr">291 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- type-check calls inside <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L292" class="LineNr">292 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L293" class="LineNr">293 </span>  <span class="Conceal">¦</span> <span class="Normal">const</span> instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L294" class="LineNr">294 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='028call_return.cc.html#L114'>is_primitive</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L294" class="LineNr">294 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='028call_return.cc.html#L115'>is_primitive</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L295" class="LineNr">295 </span>  <span class="Conceal">¦</span> <span class="Normal">const</span> recipe&amp; callee = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>operation<span class="Delimiter">);</span>
 <span id="L296" class="LineNr">296 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!callee<span class="Delimiter">.</span>has_header<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L297" class="LineNr">297 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">long</span> <span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
@@ -515,7 +515,7 @@ if ('onhashchange' in window) {
 <span id="L449" class="LineNr">449 </span>  <span class="Delimiter">}</span>
 <span id="L450" class="LineNr">450 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L451" class="LineNr">451 </span>  <span class="Conceal">¦</span> instruction&amp; inst = caller_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L452" class="LineNr">452 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L452" class="LineNr">452 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L453" class="LineNr">453 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L454" class="LineNr">454 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L455" class="LineNr">455 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>header_type<span class="Delimiter">.</span>find<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">)</span> == header_type<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">())</span>
@@ -525,7 +525,7 @@ if ('onhashchange' in window) {
 <span id="L459" class="LineNr">459 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;type of &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L460" class="LineNr">460 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L461" class="LineNr">461 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L462" class="LineNr">462 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  product: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L462" class="LineNr">462 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  product: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L463" class="LineNr">463 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L464" class="LineNr">464 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>header_type<span class="Delimiter">.</span>find<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">)</span> == header_type<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">())</span>
 <span id="L465" class="LineNr">465 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
diff --git a/html/054static_dispatch.cc.html b/html/054static_dispatch.cc.html
index a9e8e183..42003df2 100644
--- a/html/054static_dispatch.cc.html
+++ b/html/054static_dispatch.cc.html
@@ -105,7 +105,7 @@ if ('onhashchange' in window) {
 <span id="L39" class="LineNr"> 39 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// variant doesn't already exist</span>
 <span id="L40" class="LineNr"> 40 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> new_name = <a href='054static_dispatch.cc.html#L111'>next_unused_recipe_name</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
 <span id="L41" class="LineNr"> 41 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> new_name<span class="Delimiter">,</span> Next_recipe_ordinal++<span class="Delimiter">);</span>
-<span id="L42" class="LineNr"> 42 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> new_name<span class="Delimiter">));</span>
+<span id="L42" class="LineNr"> 42 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> new_name<span class="Delimiter">));</span>
 <span id="L43" class="LineNr"> 43 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L44" class="LineNr"> 44 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;load&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;switching &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; to &quot;</span> &lt;&lt; new_name &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L45" class="LineNr"> 45 </span>  <span class="Conceal">¦</span> result<span class="Delimiter">.</span>name = new_name<span class="Delimiter">;</span>
@@ -115,12 +115,12 @@ if ('onhashchange' in window) {
 <span id="L49" class="LineNr"> 49 </span><span class="Normal">else</span> <span class="Delimiter">{</span>
 <span id="L50" class="LineNr"> 50 </span>  <span class="Comment">// save first variant</span>
 <span id="L51" class="LineNr"> 51 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">,</span> Next_recipe_ordinal++<span class="Delimiter">);</span>
-<span id="L52" class="LineNr"> 52 </span>  <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
+<span id="L52" class="LineNr"> 52 </span>  <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
 <span id="L53" class="LineNr"> 53 </span><span class="Delimiter">}</span>
 <span id="L54" class="LineNr"> 54 </span>
 <span id="L55" class="LineNr"> 55 </span><span class="Delimiter">:(code)</span>
 <span id="L56" class="LineNr"> 56 </span>string <a href='054static_dispatch.cc.html#L56'>matching_variant_name</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; rr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L57" class="LineNr"> 57 </span>  <span class="Normal">const</span> vector&lt;recipe_ordinal&gt;&amp; variants = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> rr<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
+<span id="L57" class="LineNr"> 57 </span>  <span class="Normal">const</span> vector&lt;recipe_ordinal&gt;&amp; variants = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> rr<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
 <span id="L58" class="LineNr"> 58 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variants<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L59" class="LineNr"> 59 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L60" class="LineNr"> 60 </span>  <span class="Conceal">¦</span> <span class="Normal">const</span> recipe&amp; candidate = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
@@ -232,7 +232,7 @@ if ('onhashchange' in window) {
 <span id="L166" class="LineNr">166 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span>  index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L167" class="LineNr">167 </span>  <span class="Conceal">¦</span> instruction&amp; inst = caller_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
 <span id="L168" class="LineNr">168 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>is_label<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L169" class="LineNr">169 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L366'>non_ghost_size</a><span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>name<span class="Delimiter">))</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L169" class="LineNr">169 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L366'>non_ghost_size</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>name<span class="Delimiter">))</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L170" class="LineNr">170 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction &quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L171" class="LineNr">171 </span>  <span class="Conceal">¦</span> Resolve_stack<span class="Delimiter">.</span>push_front<span class="Delimiter">(</span>call<span class="Delimiter">(</span>r<span class="Delimiter">));</span>
 <span id="L172" class="LineNr">172 </span>  <span class="Conceal">¦</span> Resolve_stack<span class="Delimiter">.</span>front<span class="Delimiter">().</span>running_step_index = index<span class="Delimiter">;</span>
@@ -646,10 +646,10 @@ if ('onhashchange' in window) {
 <span id="L580" class="LineNr">580 </span>  ostringstream out<span class="Delimiter">;</span>
 <span id="L581" class="LineNr">581 </span>  out &lt;&lt; <span class="Constant">&quot;recipe &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
 <span id="L582" class="LineNr">582 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L583" class="LineNr">583 </span>  <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L583" class="LineNr">583 </span>  <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
 <span id="L584" class="LineNr">584 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> out &lt;&lt; <span class="Constant">&quot; -&gt;&quot;</span><span class="Delimiter">;</span>
 <span id="L585" class="LineNr">585 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L586" class="LineNr">586 </span>  <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L586" class="LineNr">586 </span>  <span class="Conceal">¦</span> out &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
 <span id="L587" class="LineNr">587 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
 <span id="L588" class="LineNr">588 </span><span class="Delimiter">}</span>
 <span id="L589" class="LineNr">589 </span>
diff --git a/html/055shape_shifting_container.cc.html b/html/055shape_shifting_container.cc.html
index b7a86272..5fce35b6 100644
--- a/html/055shape_shifting_container.cc.html
+++ b/html/055shape_shifting_container.cc.html
@@ -100,7 +100,7 @@ if ('onhashchange' in window) {
 <span id="L34" class="LineNr"> 34 </span><span class="Normal">const</span> type_tree* get_base_type<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* t<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L35" class="LineNr"> 35 </span>  <span class="Normal">const</span> type_tree* result = t<span class="Delimiter">-&gt;</span>atom ? t : t<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
 <span id="L36" class="LineNr"> 36 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!result<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
-<span id="L37" class="LineNr"> 37 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>t<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L37" class="LineNr"> 37 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>t<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L38" class="LineNr"> 38 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
 <span id="L39" class="LineNr"> 39 </span><span class="Delimiter">}</span>
 <span id="L40" class="LineNr"> 40 </span>
@@ -240,14 +240,14 @@ if ('onhashchange' in window) {
 <span id="L174" class="LineNr">174 </span>  <span class="Comment">// we haven't seen this container before</span>
 <span id="L175" class="LineNr">175 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)</span> || get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span>
 <span id="L176" class="LineNr">176 </span>  <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
-<span id="L177" class="LineNr">177 </span>  type_info&amp; info = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">));</span>
+<span id="L177" class="LineNr">177 </span>  type_info&amp; info = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">));</span>
 <span id="L178" class="LineNr">178 </span>  info<span class="Delimiter">.</span>type_ingredient_names<span class="Delimiter">.</span>swap<span class="Delimiter">(</span>type_ingredient_names<span class="Delimiter">);</span>
 <span id="L179" class="LineNr">179 </span>  <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
 <span id="L180" class="LineNr">180 </span><span class="Delimiter">}</span>
 <span id="L181" class="LineNr">181 </span>
 <span id="L182" class="LineNr">182 </span><span class="Normal">bool</span> slurp_type_ingredients<span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> map&lt;string<span class="Delimiter">,</span> type_ordinal&gt;&amp; out<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; container_name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L183" class="LineNr">183 </span>  <span class="Normal">int</span> next_type_ordinal = START_TYPE_INGREDIENTS<span class="Delimiter">;</span>
-<span id="L184" class="LineNr">184 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L184" class="LineNr">184 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L185" class="LineNr">185 </span>  <span class="Conceal">¦</span> string curr = slurp_until<span class="Delimiter">(</span>in<span class="Delimiter">,</span> <span class="Constant">':'</span><span class="Delimiter">);</span>
 <span id="L186" class="LineNr">186 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L187" class="LineNr">187 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; container_name &lt;&lt; <span class="Constant">&quot;: empty type ingredients not permitted</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
@@ -494,7 +494,7 @@ if ('onhashchange' in window) {
 <span id="L428" class="LineNr">428 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
 <span id="L429" class="LineNr">429 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;x:foo:point&quot;</span><span class="Delimiter">);</span>
 <span id="L430" class="LineNr">430 </span>  reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L431" class="LineNr">431 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: </span><span class="cSpecial">\&quot;</span><span class="Constant">point</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
+<span id="L431" class="LineNr">431 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: </span><span class="cSpecial">\&quot;</span><span class="Constant">point</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
 <span id="L432" class="LineNr">432 </span><span class="Delimiter">}</span>
 <span id="L433" class="LineNr">433 </span>
 <span id="L434" class="LineNr">434 </span><span class="Normal">void</span> test_replace_type_ingredients_tail<span class="Delimiter">()</span> <span class="Delimiter">{</span>
@@ -506,7 +506,7 @@ if ('onhashchange' in window) {
 <span id="L440" class="LineNr">440 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
 <span id="L441" class="LineNr">441 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;x:bar:point&quot;</span><span class="Delimiter">);</span>
 <span id="L442" class="LineNr">442 </span>  reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L443" class="LineNr">443 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: (</span><span class="cSpecial">\&quot;</span><span class="Constant">foo</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">point</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
+<span id="L443" class="LineNr">443 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: (</span><span class="cSpecial">\&quot;</span><span class="Constant">foo</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">point</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
 <span id="L444" class="LineNr">444 </span><span class="Delimiter">}</span>
 <span id="L445" class="LineNr">445 </span>
 <span id="L446" class="LineNr">446 </span><span class="Normal">void</span> test_replace_type_ingredients_head_tail_multiple<span class="Delimiter">()</span> <span class="Delimiter">{</span>
@@ -518,7 +518,7 @@ if ('onhashchange' in window) {
 <span id="L452" class="LineNr">452 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
 <span id="L453" class="LineNr">453 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;x:bar:<a href='043space.cc.html#L82'>address</a>:array:character&quot;</span><span class="Delimiter">);</span>
 <span id="L454" class="LineNr">454 </span>  reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L455" class="LineNr">455 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: (</span><span class="cSpecial">\&quot;</span><span class="Constant">foo</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
+<span id="L455" class="LineNr">455 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: (</span><span class="cSpecial">\&quot;</span><span class="Constant">foo</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
 <span id="L456" class="LineNr">456 </span><span class="Delimiter">}</span>
 <span id="L457" class="LineNr">457 </span>
 <span id="L458" class="LineNr">458 </span><span class="Normal">void</span> test_replace_type_ingredients_head_middle<span class="Delimiter">()</span> <span class="Delimiter">{</span>
@@ -530,7 +530,7 @@ if ('onhashchange' in window) {
 <span id="L464" class="LineNr">464 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
 <span id="L465" class="LineNr">465 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;x:bar:address&quot;</span><span class="Delimiter">);</span>
 <span id="L466" class="LineNr">466 </span>  reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L467" class="LineNr">467 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: (</span><span class="cSpecial">\&quot;</span><span class="Constant">foo</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
+<span id="L467" class="LineNr">467 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: (</span><span class="cSpecial">\&quot;</span><span class="Constant">foo</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
 <span id="L468" class="LineNr">468 </span><span class="Delimiter">}</span>
 <span id="L469" class="LineNr">469 </span>
 <span id="L470" class="LineNr">470 </span><span class="Normal">void</span> test_replace_last_type_ingredient_with_multiple<span class="Delimiter">()</span> <span class="Delimiter">{</span>
@@ -540,9 +540,9 @@ if ('onhashchange' in window) {
 <span id="L474" class="LineNr">474 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
 <span id="L475" class="LineNr">475 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;{f: (foo number (address array character))}&quot;</span><span class="Delimiter">);</span>
 <span id="L476" class="LineNr">476 </span>  reagent element1 = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L477" class="LineNr">477 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element1<span class="Delimiter">),</span> <span class="Constant">&quot;{x: </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
+<span id="L477" class="LineNr">477 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element1<span class="Delimiter">),</span> <span class="Constant">&quot;{x: </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
 <span id="L478" class="LineNr">478 </span>  reagent element2 = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L479" class="LineNr">479 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element2<span class="Delimiter">),</span> <span class="Constant">&quot;{y: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
+<span id="L479" class="LineNr">479 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element2<span class="Delimiter">),</span> <span class="Constant">&quot;{y: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
 <span id="L480" class="LineNr">480 </span><span class="Delimiter">}</span>
 <span id="L481" class="LineNr">481 </span>
 <span id="L482" class="LineNr">482 </span><span class="Normal">void</span> test_replace_last_type_ingredient_inside_compound<span class="Delimiter">()</span> <span class="Delimiter">{</span>
@@ -562,11 +562,11 @@ if ('onhashchange' in window) {
 <span id="L496" class="LineNr">496 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
 <span id="L497" class="LineNr">497 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;{f: (foo number (address array character) boolean)}&quot;</span><span class="Delimiter">);</span>
 <span id="L498" class="LineNr">498 </span>  reagent element1 = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L499" class="LineNr">499 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element1<span class="Delimiter">),</span> <span class="Constant">&quot;{x: </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
+<span id="L499" class="LineNr">499 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element1<span class="Delimiter">),</span> <span class="Constant">&quot;{x: </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
 <span id="L500" class="LineNr">500 </span>  reagent element2 = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L501" class="LineNr">501 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element2<span class="Delimiter">),</span> <span class="Constant">&quot;{y: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
+<span id="L501" class="LineNr">501 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element2<span class="Delimiter">),</span> <span class="Constant">&quot;{y: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
 <span id="L502" class="LineNr">502 </span>  reagent element3 = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L503" class="LineNr">503 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element3<span class="Delimiter">),</span> <span class="Constant">&quot;{z: </span><span class="cSpecial">\&quot;</span><span class="Constant">boolean</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
+<span id="L503" class="LineNr">503 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element3<span class="Delimiter">),</span> <span class="Constant">&quot;{z: </span><span class="cSpecial">\&quot;</span><span class="Constant">boolean</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
 <span id="L504" class="LineNr">504 </span><span class="Delimiter">}</span>
 <span id="L505" class="LineNr">505 </span>
 <span id="L506" class="LineNr">506 </span><span class="Normal">void</span> test_replace_middle_type_ingredient_with_multiple2<span class="Delimiter">()</span> <span class="Delimiter">{</span>
@@ -576,7 +576,7 @@ if ('onhashchange' in window) {
 <span id="L510" class="LineNr">510 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
 <span id="L511" class="LineNr">511 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;{f: (foo (address array character) number)}&quot;</span><span class="Delimiter">);</span>
 <span id="L512" class="LineNr">512 </span>  reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L513" class="LineNr">513 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{key: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
+<span id="L513" class="LineNr">513 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{key: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
 <span id="L514" class="LineNr">514 </span><span class="Delimiter">}</span>
 <span id="L515" class="LineNr">515 </span>
 <span id="L516" class="LineNr">516 </span><span class="Normal">void</span> test_replace_middle_type_ingredient_with_multiple3<span class="Delimiter">()</span> <span class="Delimiter">{</span>
@@ -590,7 +590,7 @@ if ('onhashchange' in window) {
 <span id="L524" class="LineNr">524 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
 <span id="L525" class="LineNr">525 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;{f: (foo_table (address array character) number)}&quot;</span><span class="Delimiter">);</span>
 <span id="L526" class="LineNr">526 </span>  reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L527" class="LineNr">527 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{data: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">foo_table_row</span><span class="cSpecial">\&quot;</span><span class="Constant"> (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">) </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
+<span id="L527" class="LineNr">527 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{data: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">foo_table_row</span><span class="cSpecial">\&quot;</span><span class="Constant"> (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L82'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">) </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
 <span id="L528" class="LineNr">528 </span><span class="Delimiter">}</span>
 <span id="L529" class="LineNr">529 </span>
 <span id="L530" class="LineNr">530 </span><span class="Delimiter">:(code)</span>
diff --git a/html/056shape_shifting_recipe.cc.html b/html/056shape_shifting_recipe.cc.html
index b1de6ae2..c087b354 100644
--- a/html/056shape_shifting_recipe.cc.html
+++ b/html/056shape_shifting_recipe.cc.html
@@ -285,7 +285,7 @@ if ('onhashchange' in window) {
 <span id="L218" class="LineNr"> 218 </span>  <span class="Identifier">return</span> contains_type_ingredient_name<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">)</span> || contains_type_ingredient_name<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
 <span id="L219" class="LineNr"> 219 </span><span class="Delimiter">}</span>
 <span id="L220" class="LineNr"> 220 </span>
-<span id="L221" class="LineNr"> 221 </span><span class="Normal">int</span> number_of_concrete_type_names<span class="Delimiter">(</span><a href='001help.cc.html#L258'>unused</a> <span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L221" class="LineNr"> 221 </span><span class="Normal">int</span> number_of_concrete_type_names<span class="Delimiter">(</span><a href='001help.cc.html#L259'>unused</a> <span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L222" class="LineNr"> 222 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
 <span id="L223" class="LineNr"> 223 </span>  <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
 <span id="L224" class="LineNr"> 224 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
@@ -303,7 +303,7 @@ if ('onhashchange' in window) {
 <span id="L236" class="LineNr"> 236 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span>+ number_of_concrete_type_names<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
 <span id="L237" class="LineNr"> 237 </span><span class="Delimiter">}</span>
 <span id="L238" class="LineNr"> 238 </span>
-<span id="L239" class="LineNr"> 239 </span><span class="Normal">int</span> number_of_type_ingredients<span class="Delimiter">(</span><a href='001help.cc.html#L258'>unused</a> <span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L239" class="LineNr"> 239 </span><span class="Normal">int</span> number_of_type_ingredients<span class="Delimiter">(</span><a href='001help.cc.html#L259'>unused</a> <span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L240" class="LineNr"> 240 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
 <span id="L241" class="LineNr"> 241 </span>  <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
 <span id="L242" class="LineNr"> 242 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
@@ -368,7 +368,7 @@ if ('onhashchange' in window) {
 <span id="L301" class="LineNr"> 301 </span>  <span class="Conceal">¦</span> <a href='056shape_shifting_recipe.cc.html#L312'>save_or_deduce_type_name</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> type_names<span class="Delimiter">,</span> variant<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
 <span id="L302" class="LineNr"> 302 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L303" class="LineNr"> 303 </span>  <span class="Conceal">¦</span> instruction&amp; inst = variant<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L304" class="LineNr"> 304 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  <a href='010vm.cc.html#L32'>instruction</a>: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L304" class="LineNr"> 304 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  <a href='010vm.cc.html#L32'>instruction</a>: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L305" class="LineNr"> 305 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> in = <span class="Constant">0</span><span class="Delimiter">;</span>  in &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++in<span class="Delimiter">)</span>
 <span id="L306" class="LineNr"> 306 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='056shape_shifting_recipe.cc.html#L312'>save_or_deduce_type_name</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>in<span class="Delimiter">),</span> type_names<span class="Delimiter">,</span> variant<span class="Delimiter">,</span> <span class="Constant">&quot; in '&quot;</span> + to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> + <span class="Constant">&quot;'&quot;</span><span class="Delimiter">);</span>
 <span id="L307" class="LineNr"> 307 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> out = <span class="Constant">0</span><span class="Delimiter">;</span>  out &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++out<span class="Delimiter">)</span>
@@ -377,7 +377,7 @@ if ('onhashchange' in window) {
 <span id="L310" class="LineNr"> 310 </span><span class="Delimiter">}</span>
 <span id="L311" class="LineNr"> 311 </span>
 <span id="L312" class="LineNr"> 312 </span><span class="Normal">void</span> <a href='056shape_shifting_recipe.cc.html#L312'>save_or_deduce_type_name</a><span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">,</span> map&lt;string<span class="Delimiter">,</span> type_tree*&gt;&amp; type<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; variant<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; context<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L313" class="LineNr"> 313 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9994</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;    checking &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L313" class="LineNr"> 313 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9994</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;    checking &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L314" class="LineNr"> 314 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type &amp;&amp; contains_key<span class="Delimiter">(</span>type<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L315" class="LineNr"> 315 </span>  <span class="Conceal">¦</span> x<span class="Delimiter">.</span>type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*get<span class="Delimiter">(</span>type<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
 <span id="L316" class="LineNr"> 316 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9994</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;    deducing type to &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
@@ -440,7 +440,7 @@ if ('onhashchange' in window) {
 <span id="L373" class="LineNr"> 373 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> curr_refinement_type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*refinement_type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">);</span>
 <span id="L374" class="LineNr"> 374 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L375" class="LineNr"> 375 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> exemplar_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L376" class="LineNr"> 376 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;adding mapping from &quot;</span> &lt;&lt; exemplar_type<span class="Delimiter">-&gt;</span>name &lt;&lt; <span class="Constant">&quot; to &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>curr_refinement_type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L376" class="LineNr"> 376 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;adding mapping from &quot;</span> &lt;&lt; exemplar_type<span class="Delimiter">-&gt;</span>name &lt;&lt; <span class="Constant">&quot; to &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>curr_refinement_type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L377" class="LineNr"> 377 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> exemplar_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">,</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*curr_refinement_type<span class="Delimiter">));</span>
 <span id="L378" class="LineNr"> 378 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L379" class="LineNr"> 379 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">else</span> <span class="Delimiter">{</span>
@@ -492,7 +492,7 @@ if ('onhashchange' in window) {
 <span id="L425" class="LineNr"> 425 </span><span class="Delimiter">}</span>
 <span id="L426" class="LineNr"> 426 </span>
 <span id="L427" class="LineNr"> 427 </span><span class="Normal">void</span> replace_type_ingredients<span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree*&gt;&amp; mappings<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L428" class="LineNr"> 428 </span>  string before = <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
+<span id="L428" class="LineNr"> 428 </span>  string before = <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
 <span id="L429" class="LineNr"> 429 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;replacing in ingredient &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L430" class="LineNr"> 430 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L431" class="LineNr"> 431 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;specializing &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>original_name &lt;&lt; <span class="Constant">&quot;: missing type for '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
diff --git a/html/059to_text.mu.html b/html/059to_text.mu.html
index 9f51fded..e4d0da79 100644
--- a/html/059to_text.mu.html
+++ b/html/059to_text.mu.html
@@ -67,14 +67,14 @@ if ('onhashchange' in window) {
 <span id="L8" class="LineNr"> 8 </span><span class="Comment"># define it to be identical to 'to-text' by default</span>
 <span id="L9" class="LineNr"> 9 </span><span class="muRecipe">def</span> to-text-line x:_elem<span class="muRecipe"> -&gt; </span>y:text [
 <span id="L10" class="LineNr">10 </span>  <span class="Constant">local-scope</span>
-<span id="L11" class="LineNr">11 </span>  <span class="Constant">load-ingredients</span>
+<span id="L11" class="LineNr">11 </span>  <span class="Constant">load-inputs</span>
 <span id="L12" class="LineNr">12 </span>  y <span class="Special">&lt;-</span> to-text x
 <span id="L13" class="LineNr">13 </span>]
 <span id="L14" class="LineNr">14 </span>
 <span id="L15" class="LineNr">15 </span><span class="Comment"># variant for arrays (since we can't pass them around otherwise)</span>
 <span id="L16" class="LineNr">16 </span><span class="muRecipe">def</span> <a href='059to_text.mu.html#L16'>array-to-text-line</a> x:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>y:text [
 <span id="L17" class="LineNr">17 </span>  <span class="Constant">local-scope</span>
-<span id="L18" class="LineNr">18 </span>  <span class="Constant">load-ingredients</span>
+<span id="L18" class="LineNr">18 </span>  <span class="Constant">load-inputs</span>
 <span id="L19" class="LineNr">19 </span>  y <span class="Special">&lt;-</span> to-text *x
 <span id="L20" class="LineNr">20 </span>]
 <span id="L21" class="LineNr">21 </span>
@@ -92,7 +92,7 @@ if ('onhashchange' in window) {
 <span id="L33" class="LineNr">33 </span><span class="Comment"># finally, a specialization for single characters</span>
 <span id="L34" class="LineNr">34 </span><span class="muRecipe">def</span> to-text c:char<span class="muRecipe"> -&gt; </span>y:text [
 <span id="L35" class="LineNr">35 </span>  <span class="Constant">local-scope</span>
-<span id="L36" class="LineNr">36 </span>  <span class="Constant">load-ingredients</span>
+<span id="L36" class="LineNr">36 </span>  <span class="Constant">load-inputs</span>
 <span id="L37" class="LineNr">37 </span>  y <span class="Special">&lt;-</span> new <span class="Constant">character:type</span>, <span class="Constant">1/capacity</span>
 <span id="L38" class="LineNr">38 </span>  *y <span class="Special">&lt;-</span> put-index *y,<span class="Constant"> 0</span>, c
 <span id="L39" class="LineNr">39 </span>]
diff --git a/html/061text.mu.html b/html/061text.mu.html
index f8cb25e4..cb9ca6d3 100644
--- a/html/061text.mu.html
+++ b/html/061text.mu.html
@@ -64,7 +64,7 @@ if ('onhashchange' in window) {
 <span id="L2" class="LineNr">   2 </span>
 <span id="L3" class="LineNr">   3 </span><span class="muRecipe">def</span> equal a:text, b:text<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L4" class="LineNr">   4 </span>  <span class="Constant">local-scope</span>
-<span id="L5" class="LineNr">   5 </span>  <span class="Constant">load-ingredients</span>
+<span id="L5" class="LineNr">   5 </span>  <span class="Constant">load-inputs</span>
 <span id="L6" class="LineNr">   6 </span>  an:num, bn:num <span class="Special">&lt;-</span> copy a, b
 <span id="L7" class="LineNr">   7 </span>  address-equal?:boolean <span class="Special">&lt;-</span> equal an, bn
 <span id="L8" class="LineNr">   8 </span>  <span class="muControl">return-if</span> address-equal?, <span class="Constant">1/true</span>
@@ -186,7 +186,7 @@ if ('onhashchange' in window) {
 <span id="L124" class="LineNr"> 124 </span>
 <span id="L125" class="LineNr"> 125 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L125'>new-buffer</a> <a href='075channel.mu.html#L399'>capacity</a>:num<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='061text.mu.html#L120'>buffer</a>:_elem [
 <span id="L126" class="LineNr"> 126 </span>  <span class="Constant">local-scope</span>
-<span id="L127" class="LineNr"> 127 </span>  <span class="Constant">load-ingredients</span>
+<span id="L127" class="LineNr"> 127 </span>  <span class="Constant">load-inputs</span>
 <span id="L128" class="LineNr"> 128 </span>  result <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(buffer _elem): type<span class="Delimiter">}</span>
 <span id="L129" class="LineNr"> 129 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">length:offset</span>,<span class="Constant"> 0</span>
 <span id="L130" class="LineNr"> 130 </span>  <span class="Delimiter">{</span>
@@ -201,7 +201,7 @@ if ('onhashchange' in window) {
 <span id="L139" class="LineNr"> 139 </span>
 <span id="L140" class="LineNr"> 140 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L140'>grow-buffer</a> buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:_elem<span class="muRecipe"> -&gt; </span>buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:_elem [
 <span id="L141" class="LineNr"> 141 </span>  <span class="Constant">local-scope</span>
-<span id="L142" class="LineNr"> 142 </span>  <span class="Constant">load-ingredients</span>
+<span id="L142" class="LineNr"> 142 </span>  <span class="Constant">load-inputs</span>
 <span id="L143" class="LineNr"> 143 </span>  <span class="Comment"># double buffer size</span>
 <span id="L144" class="LineNr"> 144 </span>  olddata:&amp;:@:_elem <span class="Special">&lt;-</span> get *buf, <span class="Constant">data:offset</span>
 <span id="L145" class="LineNr"> 145 </span>  oldlen:num <span class="Special">&lt;-</span> length *olddata
@@ -222,7 +222,7 @@ if ('onhashchange' in window) {
 <span id="L160" class="LineNr"> 160 </span>
 <span id="L161" class="LineNr"> 161 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L161'>buffer-full?</a> in:&amp;:<a href='061text.mu.html#L120'>buffer</a>:_elem<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L162" class="LineNr"> 162 </span>  <span class="Constant">local-scope</span>
-<span id="L163" class="LineNr"> 163 </span>  <span class="Constant">load-ingredients</span>
+<span id="L163" class="LineNr"> 163 </span>  <span class="Constant">load-inputs</span>
 <span id="L164" class="LineNr"> 164 </span>  len:num <span class="Special">&lt;-</span> get *in, <span class="Constant">length:offset</span>
 <span id="L165" class="LineNr"> 165 </span>  s:&amp;:@:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant">data:offset</span>
 <span id="L166" class="LineNr"> 166 </span>  <a href='075channel.mu.html#L399'>capacity</a>:num <span class="Special">&lt;-</span> length *s
@@ -232,7 +232,7 @@ if ('onhashchange' in window) {
 <span id="L170" class="LineNr"> 170 </span><span class="Comment"># most broadly applicable definition of append to a buffer</span>
 <span id="L171" class="LineNr"> 171 </span><span class="muRecipe">def</span> append buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:_elem, x:_elem<span class="muRecipe"> -&gt; </span>buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:_elem [
 <span id="L172" class="LineNr"> 172 </span>  <span class="Constant">local-scope</span>
-<span id="L173" class="LineNr"> 173 </span>  <span class="Constant">load-ingredients</span>
+<span id="L173" class="LineNr"> 173 </span>  <span class="Constant">load-inputs</span>
 <span id="L174" class="LineNr"> 174 </span>  len:num <span class="Special">&lt;-</span> get *buf, <span class="Constant">length:offset</span>
 <span id="L175" class="LineNr"> 175 </span>  <span class="Delimiter">{</span>
 <span id="L176" class="LineNr"> 176 </span>  <span class="Conceal">¦</span> <span class="Comment"># grow buffer if necessary</span>
@@ -250,7 +250,7 @@ if ('onhashchange' in window) {
 <span id="L188" class="LineNr"> 188 </span><span class="Comment"># call to-text</span>
 <span id="L189" class="LineNr"> 189 </span><span class="muRecipe">def</span> append buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char, x:_elem<span class="muRecipe"> -&gt; </span>buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char [
 <span id="L190" class="LineNr"> 190 </span>  <span class="Constant">local-scope</span>
-<span id="L191" class="LineNr"> 191 </span>  <span class="Constant">load-ingredients</span>
+<span id="L191" class="LineNr"> 191 </span>  <span class="Constant">load-inputs</span>
 <span id="L192" class="LineNr"> 192 </span>  text:text <span class="Special">&lt;-</span> to-text x
 <span id="L193" class="LineNr"> 193 </span>  buf <span class="Special">&lt;-</span> append buf, text
 <span id="L194" class="LineNr"> 194 </span>]
@@ -258,7 +258,7 @@ if ('onhashchange' in window) {
 <span id="L196" class="LineNr"> 196 </span><span class="Comment"># specialization for characters that is backspace-aware</span>
 <span id="L197" class="LineNr"> 197 </span><span class="muRecipe">def</span> append buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char, c:char<span class="muRecipe"> -&gt; </span>buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char [
 <span id="L198" class="LineNr"> 198 </span>  <span class="Constant">local-scope</span>
-<span id="L199" class="LineNr"> 199 </span>  <span class="Constant">load-ingredients</span>
+<span id="L199" class="LineNr"> 199 </span>  <span class="Constant">load-inputs</span>
 <span id="L200" class="LineNr"> 200 </span>  len:num <span class="Special">&lt;-</span> get *buf, <span class="Constant">length:offset</span>
 <span id="L201" class="LineNr"> 201 </span>  <span class="Delimiter">{</span>
 <span id="L202" class="LineNr"> 202 </span>  <span class="Conceal">¦</span> <span class="Comment"># backspace? just drop last character if it exists and return</span>
@@ -284,7 +284,7 @@ if ('onhashchange' in window) {
 <span id="L222" class="LineNr"> 222 </span>
 <span id="L223" class="LineNr"> 223 </span><span class="muRecipe">def</span> append buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:_elem, t:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:_elem [
 <span id="L224" class="LineNr"> 224 </span>  <span class="Constant">local-scope</span>
-<span id="L225" class="LineNr"> 225 </span>  <span class="Constant">load-ingredients</span>
+<span id="L225" class="LineNr"> 225 </span>  <span class="Constant">load-inputs</span>
 <span id="L226" class="LineNr"> 226 </span>  len:num <span class="Special">&lt;-</span> length *t
 <span id="L227" class="LineNr"> 227 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L228" class="LineNr"> 228 </span>  <span class="Delimiter">{</span>
@@ -399,7 +399,7 @@ if ('onhashchange' in window) {
 <span id="L337" class="LineNr"> 337 </span>
 <span id="L338" class="LineNr"> 338 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L338'>buffer-to-array</a> in:&amp;:<a href='061text.mu.html#L120'>buffer</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:@:_elem [
 <span id="L339" class="LineNr"> 339 </span>  <span class="Constant">local-scope</span>
-<span id="L340" class="LineNr"> 340 </span>  <span class="Constant">load-ingredients</span>
+<span id="L340" class="LineNr"> 340 </span>  <span class="Constant">load-inputs</span>
 <span id="L341" class="LineNr"> 341 </span>  <span class="Comment"># propagate null buffer</span>
 <span id="L342" class="LineNr"> 342 </span>  <span class="muControl">return-unless</span> in,<span class="Constant"> 0</span>
 <span id="L343" class="LineNr"> 343 </span>  len:num <span class="Special">&lt;-</span> get *in, <span class="Constant">length:offset</span>
@@ -419,7 +419,7 @@ if ('onhashchange' in window) {
 <span id="L357" class="LineNr"> 357 </span>
 <span id="L358" class="LineNr"> 358 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L358'>blank?</a> x:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L359" class="LineNr"> 359 </span>  <span class="Constant">local-scope</span>
-<span id="L360" class="LineNr"> 360 </span>  <span class="Constant">load-ingredients</span>
+<span id="L360" class="LineNr"> 360 </span>  <span class="Constant">load-inputs</span>
 <span id="L361" class="LineNr"> 361 </span>  <span class="muControl">return-unless</span> x, <span class="Constant">1/true</span>
 <span id="L362" class="LineNr"> 362 </span>  len:num <span class="Special">&lt;-</span> length *x
 <span id="L363" class="LineNr"> 363 </span>  result <span class="Special">&lt;-</span> equal len,<span class="Constant"> 0</span>
@@ -435,16 +435,16 @@ if ('onhashchange' in window) {
 <span id="L373" class="LineNr"> 373 </span><span class="Comment"># will never ever get used.</span>
 <span id="L374" class="LineNr"> 374 </span><span class="muRecipe">def</span> append first:text<span class="muRecipe"> -&gt; </span>result:text [
 <span id="L375" class="LineNr"> 375 </span>  <span class="Constant">local-scope</span>
-<span id="L376" class="LineNr"> 376 </span>  <span class="Constant">load-ingredients</span>
+<span id="L376" class="LineNr"> 376 </span>  <span class="Constant">load-inputs</span>
 <span id="L377" class="LineNr"> 377 </span>  buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 30</span>
-<span id="L378" class="LineNr"> 378 </span>  <span class="Comment"># append first ingredient</span>
+<span id="L378" class="LineNr"> 378 </span>  <span class="Comment"># append first input</span>
 <span id="L379" class="LineNr"> 379 </span>  <span class="Delimiter">{</span>
 <span id="L380" class="LineNr"> 380 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> first
 <span id="L381" class="LineNr"> 381 </span>  <span class="Conceal">¦</span> buf <span class="Special">&lt;-</span> append buf, first
 <span id="L382" class="LineNr"> 382 </span>  <span class="Delimiter">}</span>
-<span id="L383" class="LineNr"> 383 </span>  <span class="Comment"># append remaining ingredients</span>
+<span id="L383" class="LineNr"> 383 </span>  <span class="Comment"># append remaining inputs</span>
 <span id="L384" class="LineNr"> 384 </span>  <span class="Delimiter">{</span>
-<span id="L385" class="LineNr"> 385 </span>  <span class="Conceal">¦</span> arg:text, arg-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L385" class="LineNr"> 385 </span>  <span class="Conceal">¦</span> arg:text, arg-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L386" class="LineNr"> 386 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> arg-found?
 <span id="L387" class="LineNr"> 387 </span>  <span class="Conceal">¦</span> <span class="muControl">loop-unless</span> arg
 <span id="L388" class="LineNr"> 388 </span>  <span class="Conceal">¦</span> buf <span class="Special">&lt;-</span> append buf, arg
@@ -520,7 +520,7 @@ if ('onhashchange' in window) {
 <span id="L458" class="LineNr"> 458 </span>
 <span id="L459" class="LineNr"> 459 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L459'>replace</a> s:text, oldc:char, newc:char, from:num/optional<span class="muRecipe"> -&gt; </span>s:text [
 <span id="L460" class="LineNr"> 460 </span>  <span class="Constant">local-scope</span>
-<span id="L461" class="LineNr"> 461 </span>  <span class="Constant">load-ingredients</span>
+<span id="L461" class="LineNr"> 461 </span>  <span class="Constant">load-inputs</span>
 <span id="L462" class="LineNr"> 462 </span>  len:num <span class="Special">&lt;-</span> length *s
 <span id="L463" class="LineNr"> 463 </span>  i:num <span class="Special">&lt;-</span> find-next s, oldc, from
 <span id="L464" class="LineNr"> 464 </span>  done?:bool <span class="Special">&lt;-</span> greater-or-equal i, len
@@ -581,13 +581,13 @@ if ('onhashchange' in window) {
 <span id="L519" class="LineNr"> 519 </span><span class="Comment"># replace underscores in first with remaining args</span>
 <span id="L520" class="LineNr"> 520 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L520'>interpolate</a> template:text<span class="muRecipe"> -&gt; </span>result:text [
 <span id="L521" class="LineNr"> 521 </span>  <span class="Constant">local-scope</span>
-<span id="L522" class="LineNr"> 522 </span>  <span class="Constant">load-ingredients</span>  <span class="Comment"># consume just the template</span>
+<span id="L522" class="LineNr"> 522 </span>  <span class="Constant">load-inputs</span>  <span class="Comment"># consume just the template</span>
 <span id="L523" class="LineNr"> 523 </span>  <span class="Comment"># compute result-len, space to allocate for result</span>
 <span id="L524" class="LineNr"> 524 </span>  tem-len:num <span class="Special">&lt;-</span> length *template
 <span id="L525" class="LineNr"> 525 </span>  result-len:num <span class="Special">&lt;-</span> copy tem-len
 <span id="L526" class="LineNr"> 526 </span>  <span class="Delimiter">{</span>
-<span id="L527" class="LineNr"> 527 </span>  <span class="Conceal">¦</span> <span class="Comment"># while ingredients remain</span>
-<span id="L528" class="LineNr"> 528 </span>  <span class="Conceal">¦</span> a:text, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L527" class="LineNr"> 527 </span>  <span class="Conceal">¦</span> <span class="Comment"># while inputs remain</span>
+<span id="L528" class="LineNr"> 528 </span>  <span class="Conceal">¦</span> a:text, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L529" class="LineNr"> 529 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> arg-received?
 <span id="L530" class="LineNr"> 530 </span>  <span class="Conceal">¦</span> <span class="Comment"># result-len = result-len + arg.length - 1 (for the 'underscore' being replaced)</span>
 <span id="L531" class="LineNr"> 531 </span>  <span class="Conceal">¦</span> a-len:num <span class="Special">&lt;-</span> length *a
@@ -595,15 +595,15 @@ if ('onhashchange' in window) {
 <span id="L533" class="LineNr"> 533 </span>  <span class="Conceal">¦</span> result-len <span class="Special">&lt;-</span> subtract result-len,<span class="Constant"> 1</span>
 <span id="L534" class="LineNr"> 534 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
 <span id="L535" class="LineNr"> 535 </span>  <span class="Delimiter">}</span>
-<span id="L536" class="LineNr"> 536 </span>  <span class="Constant">rewind-ingredients</span>
-<span id="L537" class="LineNr"> 537 </span>  _ <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>  <span class="Comment"># skip template</span>
+<span id="L536" class="LineNr"> 536 </span>  <span class="Constant">rewind-inputs</span>
+<span id="L537" class="LineNr"> 537 </span>  _ <span class="Special">&lt;-</span> <span class="Constant">next-input</span>  <span class="Comment"># skip template</span>
 <span id="L538" class="LineNr"> 538 </span>  result <span class="Special">&lt;-</span> new <span class="Constant">character:type</span>, result-len
 <span id="L539" class="LineNr"> 539 </span>  <span class="Comment"># repeatedly copy sections of template and 'holes' into result</span>
 <span id="L540" class="LineNr"> 540 </span>  result-idx:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L541" class="LineNr"> 541 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L542" class="LineNr"> 542 </span>  <span class="Delimiter">{</span>
 <span id="L543" class="LineNr"> 543 </span>  <span class="Conceal">¦</span> <span class="Comment"># while arg received</span>
-<span id="L544" class="LineNr"> 544 </span>  <span class="Conceal">¦</span> a:text, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L544" class="LineNr"> 544 </span>  <span class="Conceal">¦</span> a:text, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L545" class="LineNr"> 545 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> arg-received?
 <span id="L546" class="LineNr"> 546 </span>  <span class="Conceal">¦</span> <span class="Comment"># copy template into result until '_'</span>
 <span id="L547" class="LineNr"> 547 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
@@ -695,7 +695,7 @@ if ('onhashchange' in window) {
 <span id="L633" class="LineNr"> 633 </span><span class="Comment"># result:bool &lt;- space? c:char</span>
 <span id="L634" class="LineNr"> 634 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L634'>space?</a> c:char<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L635" class="LineNr"> 635 </span>  <span class="Constant">local-scope</span>
-<span id="L636" class="LineNr"> 636 </span>  <span class="Constant">load-ingredients</span>
+<span id="L636" class="LineNr"> 636 </span>  <span class="Constant">load-inputs</span>
 <span id="L637" class="LineNr"> 637 </span>  <span class="Comment"># most common case first</span>
 <span id="L638" class="LineNr"> 638 </span>  result <span class="Special">&lt;-</span> equal c, <span class="Constant">32/space</span>
 <span id="L639" class="LineNr"> 639 </span>  <span class="muControl">return-if</span> result
@@ -756,7 +756,7 @@ if ('onhashchange' in window) {
 <span id="L694" class="LineNr"> 694 </span>
 <span id="L695" class="LineNr"> 695 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L695'>trim</a> s:text<span class="muRecipe"> -&gt; </span>result:text [
 <span id="L696" class="LineNr"> 696 </span>  <span class="Constant">local-scope</span>
-<span id="L697" class="LineNr"> 697 </span>  <span class="Constant">load-ingredients</span>
+<span id="L697" class="LineNr"> 697 </span>  <span class="Constant">load-inputs</span>
 <span id="L698" class="LineNr"> 698 </span>  len:num <span class="Special">&lt;-</span> length *s
 <span id="L699" class="LineNr"> 699 </span>  <span class="Comment"># left trim: compute start</span>
 <span id="L700" class="LineNr"> 700 </span>  start:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
@@ -866,7 +866,7 @@ if ('onhashchange' in window) {
 <span id="L804" class="LineNr"> 804 </span>
 <span id="L805" class="LineNr"> 805 </span><span class="muRecipe">def</span> find-next text:text, pattern:char, idx:num<span class="muRecipe"> -&gt; </span>next-index:num [
 <span id="L806" class="LineNr"> 806 </span>  <span class="Constant">local-scope</span>
-<span id="L807" class="LineNr"> 807 </span>  <span class="Constant">load-ingredients</span>
+<span id="L807" class="LineNr"> 807 </span>  <span class="Constant">load-inputs</span>
 <span id="L808" class="LineNr"> 808 </span>  len:num <span class="Special">&lt;-</span> length *text
 <span id="L809" class="LineNr"> 809 </span>  <span class="Delimiter">{</span>
 <span id="L810" class="LineNr"> 810 </span>  <span class="Conceal">¦</span> eof?:bool <span class="Special">&lt;-</span> greater-or-equal idx, len
@@ -972,7 +972,7 @@ if ('onhashchange' in window) {
 <span id="L910" class="LineNr"> 910 </span><span class="Comment"># fairly dumb algorithm</span>
 <span id="L911" class="LineNr"> 911 </span><span class="muRecipe">def</span> find-next text:text, pattern:text, idx:num<span class="muRecipe"> -&gt; </span>next-index:num [
 <span id="L912" class="LineNr"> 912 </span>  <span class="Constant">local-scope</span>
-<span id="L913" class="LineNr"> 913 </span>  <span class="Constant">load-ingredients</span>
+<span id="L913" class="LineNr"> 913 </span>  <span class="Constant">load-inputs</span>
 <span id="L914" class="LineNr"> 914 </span>  first:char <span class="Special">&lt;-</span> index *pattern,<span class="Constant"> 0</span>
 <span id="L915" class="LineNr"> 915 </span>  <span class="Comment"># repeatedly check for match at current idx</span>
 <span id="L916" class="LineNr"> 916 </span>  len:num <span class="Special">&lt;-</span> length *text
@@ -1053,7 +1053,7 @@ if ('onhashchange' in window) {
 <span id="L991" class="LineNr"> 991 </span><span class="Comment"># checks if pattern matches at index 'idx'</span>
 <span id="L992" class="LineNr"> 992 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L992'>match-at</a> text:text, pattern:text, idx:num<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L993" class="LineNr"> 993 </span>  <span class="Constant">local-scope</span>
-<span id="L994" class="LineNr"> 994 </span>  <span class="Constant">load-ingredients</span>
+<span id="L994" class="LineNr"> 994 </span>  <span class="Constant">load-inputs</span>
 <span id="L995" class="LineNr"> 995 </span>  pattern-len:num <span class="Special">&lt;-</span> length *pattern
 <span id="L996" class="LineNr"> 996 </span>  <span class="Comment"># check that there's space left for the pattern</span>
 <span id="L997" class="LineNr"> 997 </span>  x:num <span class="Special">&lt;-</span> length *text
@@ -1184,7 +1184,7 @@ if ('onhashchange' in window) {
 <span id="L1122" class="LineNr">1122 </span>
 <span id="L1123" class="LineNr">1123 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L1123'>split</a> s:text, delim:char<span class="muRecipe"> -&gt; </span>result:&amp;:@:text [
 <span id="L1124" class="LineNr">1124 </span>  <span class="Constant">local-scope</span>
-<span id="L1125" class="LineNr">1125 </span>  <span class="Constant">load-ingredients</span>
+<span id="L1125" class="LineNr">1125 </span>  <span class="Constant">load-inputs</span>
 <span id="L1126" class="LineNr">1126 </span>  <span class="Comment"># empty text? return empty array</span>
 <span id="L1127" class="LineNr">1127 </span>  len:num <span class="Special">&lt;-</span> length *s
 <span id="L1128" class="LineNr">1128 </span>  <span class="Delimiter">{</span>
@@ -1316,7 +1316,7 @@ if ('onhashchange' in window) {
 <span id="L1254" class="LineNr">1254 </span>
 <span id="L1255" class="LineNr">1255 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L1255'>split-first</a> text:text, delim:char<span class="muRecipe"> -&gt; </span>x:text, y:text [
 <span id="L1256" class="LineNr">1256 </span>  <span class="Constant">local-scope</span>
-<span id="L1257" class="LineNr">1257 </span>  <span class="Constant">load-ingredients</span>
+<span id="L1257" class="LineNr">1257 </span>  <span class="Constant">load-inputs</span>
 <span id="L1258" class="LineNr">1258 </span>  <span class="Comment"># empty text? return empty texts</span>
 <span id="L1259" class="LineNr">1259 </span>  len:num <span class="Special">&lt;-</span> length *text
 <span id="L1260" class="LineNr">1260 </span>  <span class="Delimiter">{</span>
@@ -1348,7 +1348,7 @@ if ('onhashchange' in window) {
 <span id="L1286" class="LineNr">1286 </span>
 <span id="L1287" class="LineNr">1287 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L1287'>copy-range</a> buf:text, start:num, end:num<span class="muRecipe"> -&gt; </span>result:text [
 <span id="L1288" class="LineNr">1288 </span>  <span class="Constant">local-scope</span>
-<span id="L1289" class="LineNr">1289 </span>  <span class="Constant">load-ingredients</span>
+<span id="L1289" class="LineNr">1289 </span>  <span class="Constant">load-inputs</span>
 <span id="L1290" class="LineNr">1290 </span>  <span class="Comment"># if end is out of bounds, trim it</span>
 <span id="L1291" class="LineNr">1291 </span>  len:num <span class="Special">&lt;-</span> length *buf
 <span id="L1292" class="LineNr">1292 </span>  end:num <span class="Special">&lt;-</span> min len, end
@@ -1407,7 +1407,7 @@ if ('onhashchange' in window) {
 <span id="L1345" class="LineNr">1345 </span>
 <span id="L1346" class="LineNr">1346 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L1346'>parse-whole-number</a> in:text<span class="muRecipe"> -&gt; </span>out:num, error?:bool [
 <span id="L1347" class="LineNr">1347 </span>  <span class="Constant">local-scope</span>
-<span id="L1348" class="LineNr">1348 </span>  <span class="Constant">load-ingredients</span>
+<span id="L1348" class="LineNr">1348 </span>  <span class="Constant">load-inputs</span>
 <span id="L1349" class="LineNr">1349 </span>  out <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L1350" class="LineNr">1350 </span>  result:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>  <span class="Comment"># temporary location</span>
 <span id="L1351" class="LineNr">1351 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
@@ -1431,7 +1431,7 @@ if ('onhashchange' in window) {
 <span id="L1369" class="LineNr">1369 </span><span class="Comment"># (contributed by Ella Couch)</span>
 <span id="L1370" class="LineNr">1370 </span><span class="muRecipe">recipe</span> <a href='061text.mu.html#L1370'>character-code-to-digit</a> character-code:number<span class="muRecipe"> -&gt; </span>result:number, error?:boolean [
 <span id="L1371" class="LineNr">1371 </span>  <span class="Constant">local-scope</span>
-<span id="L1372" class="LineNr">1372 </span>  <span class="Constant">load-ingredients</span>
+<span id="L1372" class="LineNr">1372 </span>  <span class="Constant">load-inputs</span>
 <span id="L1373" class="LineNr">1373 </span>  result <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L1374" class="LineNr">1374 </span>  error? <span class="Special">&lt;-</span> lesser-than character-code,<span class="Constant"> 48</span>  <span class="Comment"># '0'</span>
 <span id="L1375" class="LineNr">1375 </span>  <span class="muControl">return-if</span> error?
diff --git a/html/062convert_ingredients_to_text.cc.html b/html/062convert_ingredients_to_text.cc.html
index eda38d88..be118d13 100644
--- a/html/062convert_ingredients_to_text.cc.html
+++ b/html/062convert_ingredients_to_text.cc.html
@@ -155,7 +155,7 @@ if ('onhashchange' in window) {
 <span id="L92" class="LineNr"> 92 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// new variants that match:</span>
 <span id="L93" class="LineNr"> 93 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">//   append _:text, ___</span>
 <span id="L94" class="LineNr"> 94 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// will never ever get used.</span>
-<span id="L95" class="LineNr"> 95 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='014literal_string.cc.html#L126'>is_literal_text</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> || <a href='027call_ingredient.cc.html#L174'>is_mu_text</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L95" class="LineNr"> 95 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='014literal_string.cc.html#L126'>is_literal_text</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> || <a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
 <span id="L96" class="LineNr"> 96 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Comment">/*</span><span class="Comment">skip base</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L97" class="LineNr"> 97 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> ostringstream ingredient_name<span class="Delimiter">;</span>
 <span id="L98" class="LineNr"> 98 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> ingredient_name &lt;&lt; <span class="Constant">&quot;append_&quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">'_'</span> &lt;&lt; j &lt;&lt; <span class="Constant">&quot;:<a href='043space.cc.html#L82'>address</a>:array:character&quot;</span><span class="Delimiter">;</span>
@@ -163,7 +163,7 @@ if ('onhashchange' in window) {
 <span id="L100" class="LineNr">100 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L101" class="LineNr">101 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L102" class="LineNr">102 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L103" class="LineNr">103 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L103" class="LineNr">103 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L104" class="LineNr">104 </span>  <span class="Conceal">¦</span> new_instructions<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
 <span id="L105" class="LineNr">105 </span>  <span class="Delimiter">}</span>
 <span id="L106" class="LineNr">106 </span>  caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>swap<span class="Delimiter">(</span>new_instructions<span class="Delimiter">);</span>
@@ -173,7 +173,7 @@ if ('onhashchange' in window) {
 <span id="L110" class="LineNr">110 </span><span class="Comment">// replace r with converted text</span>
 <span id="L111" class="LineNr">111 </span><span class="Normal">void</span> convert_ingredient_to_text<span class="Delimiter">(</span>reagent&amp; r<span class="Delimiter">,</span> vector&lt;instruction&gt;&amp; out<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; tmp_var<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L112" class="LineNr">112 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// error; will be handled elsewhere</span>
-<span id="L113" class="LineNr">113 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L174'>is_mu_text</a><span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L113" class="LineNr">113 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L114" class="LineNr">114 </span>  <span class="Comment">// don't try to extend static arrays</span>
 <span id="L115" class="LineNr">115 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_static_array<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L116" class="LineNr">116 </span>  <a href='010vm.cc.html#L32'>instruction</a> def<span class="Delimiter">;</span>
@@ -188,7 +188,7 @@ if ('onhashchange' in window) {
 <span id="L125" class="LineNr">125 </span>  <span class="Conceal">¦</span> def<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>r<span class="Delimiter">);</span>
 <span id="L126" class="LineNr">126 </span>  <span class="Delimiter">}</span>
 <span id="L127" class="LineNr">127 </span>  def<span class="Delimiter">.</span>products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span>tmp_var<span class="Delimiter">));</span>
-<span id="L128" class="LineNr">128 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>def<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L128" class="LineNr">128 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>def<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L129" class="LineNr">129 </span>  out<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>def<span class="Delimiter">);</span>
 <span id="L130" class="LineNr">130 </span>  r<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>  <span class="Comment">// reclaim old memory</span>
 <span id="L131" class="LineNr">131 </span>  r = reagent<span class="Delimiter">(</span>tmp_var<span class="Delimiter">);</span>
diff --git a/html/063array.mu.html b/html/063array.mu.html
index 8ec4072b..aa51fc06 100644
--- a/html/063array.mu.html
+++ b/html/063array.mu.html
@@ -79,20 +79,20 @@ if ('onhashchange' in window) {
 <span id="L18" class="LineNr"> 18 </span>  <a href='075channel.mu.html#L399'>capacity</a>:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L19" class="LineNr"> 19 </span>  <span class="Delimiter">{</span>
 <span id="L20" class="LineNr"> 20 </span>  <span class="Conceal">¦</span> <span class="Comment"># while read curr-value</span>
-<span id="L21" class="LineNr"> 21 </span>  <span class="Conceal">¦</span> curr-value:_elem, exists?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L21" class="LineNr"> 21 </span>  <span class="Conceal">¦</span> curr-value:_elem, exists?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L22" class="LineNr"> 22 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> exists?
 <span id="L23" class="LineNr"> 23 </span>  <span class="Conceal">¦</span> <a href='075channel.mu.html#L399'>capacity</a> <span class="Special">&lt;-</span> add <a href='075channel.mu.html#L399'>capacity</a>,<span class="Constant"> 1</span>
 <span id="L24" class="LineNr"> 24 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
 <span id="L25" class="LineNr"> 25 </span>  <span class="Delimiter">}</span>
 <span id="L26" class="LineNr"> 26 </span>  result <span class="Special">&lt;-</span> new <span class="Constant">_elem:type</span>, <a href='075channel.mu.html#L399'>capacity</a>
-<span id="L27" class="LineNr"> 27 </span>  <span class="Constant">rewind-ingredients</span>
+<span id="L27" class="LineNr"> 27 </span>  <span class="Constant">rewind-inputs</span>
 <span id="L28" class="LineNr"> 28 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L29" class="LineNr"> 29 </span>  <span class="Delimiter">{</span>
 <span id="L30" class="LineNr"> 30 </span>  <span class="Conceal">¦</span> <span class="Comment"># while read curr-value</span>
 <span id="L31" class="LineNr"> 31 </span>  <span class="Conceal">¦</span> done?:bool <span class="Special">&lt;-</span> greater-or-equal i, <a href='075channel.mu.html#L399'>capacity</a>
 <span id="L32" class="LineNr"> 32 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> done?
-<span id="L33" class="LineNr"> 33 </span>  <span class="Conceal">¦</span> curr-value:_elem, exists?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
-<span id="L34" class="LineNr"> 34 </span>  <span class="Conceal">¦</span> assert exists?, <span class="Constant">[error in rewinding ingredients to new-array]</span>
+<span id="L33" class="LineNr"> 33 </span>  <span class="Conceal">¦</span> curr-value:_elem, exists?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
+<span id="L34" class="LineNr"> 34 </span>  <span class="Conceal">¦</span> assert exists?, <span class="Constant">[error in rewinding inputs to new-array]</span>
 <span id="L35" class="LineNr"> 35 </span>  <span class="Conceal">¦</span> *result <span class="Special">&lt;-</span> put-index *result, i, curr-value
 <span id="L36" class="LineNr"> 36 </span>  <span class="Conceal">¦</span> i <span class="Special">&lt;-</span> add i,<span class="Constant"> 1</span>
 <span id="L37" class="LineNr"> 37 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
@@ -104,13 +104,13 @@ if ('onhashchange' in window) {
 <span id="L43" class="LineNr"> 43 </span><span class="Comment"># (contributed by Caleb Couch)</span>
 <span id="L44" class="LineNr"> 44 </span><span class="muRecipe">def</span> <a href='063array.mu.html#L44'>fill</a> array:&amp;:@:num<span class="muRecipe"> -&gt; </span>array:&amp;:@:num [
 <span id="L45" class="LineNr"> 45 </span>  <span class="Constant">local-scope</span>
-<span id="L46" class="LineNr"> 46 </span>  <span class="Constant">load-ingredients</span>
+<span id="L46" class="LineNr"> 46 </span>  <span class="Constant">load-inputs</span>
 <span id="L47" class="LineNr"> 47 </span>  loopn:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L48" class="LineNr"> 48 </span>  length:num <span class="Special">&lt;-</span> length *array
 <span id="L49" class="LineNr"> 49 </span>  <span class="Delimiter">{</span>
 <span id="L50" class="LineNr"> 50 </span>  <span class="Conceal">¦</span> length?:bool <span class="Special">&lt;-</span> equal loopn, length
 <span id="L51" class="LineNr"> 51 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> length?
-<span id="L52" class="LineNr"> 52 </span>  <span class="Conceal">¦</span> object:num, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L52" class="LineNr"> 52 </span>  <span class="Conceal">¦</span> object:num, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L53" class="LineNr"> 53 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> arg-received?
 <span id="L54" class="LineNr"> 54 </span>  <span class="Conceal">¦</span> *array <span class="Special">&lt;-</span> put-index *array, loopn, object
 <span id="L55" class="LineNr"> 55 </span>  <span class="Conceal">¦</span> loopn <span class="Special">&lt;-</span> add loopn,<span class="Constant"> 1</span>
@@ -149,7 +149,7 @@ if ('onhashchange' in window) {
 <span id="L88" class="LineNr"> 88 </span>  ]
 <span id="L89" class="LineNr"> 89 </span>]
 <span id="L90" class="LineNr"> 90 </span>
-<span id="L91" class="LineNr"> 91 </span><span class="muScenario">scenario</span> fill-exits-gracefully-when-given-no-ingredients [
+<span id="L91" class="LineNr"> 91 </span><span class="muScenario">scenario</span> fill-exits-gracefully-when-given-no-inputs [
 <span id="L92" class="LineNr"> 92 </span>  <span class="Constant">local-scope</span>
 <span id="L93" class="LineNr"> 93 </span>  array:&amp;:@:num <span class="Special">&lt;-</span> new <span class="Constant">number:type</span>,<span class="Constant"> 3</span>
 <span id="L94" class="LineNr"> 94 </span>  run [
@@ -168,7 +168,7 @@ if ('onhashchange' in window) {
 <span id="L107" class="LineNr">107 </span><span class="Comment"># (contributed by Caleb Couch)</span>
 <span id="L108" class="LineNr">108 </span><span class="muRecipe">def</span> <a href='063array.mu.html#L108'>swap</a> array:&amp;:@:num, index1:num, index2:num<span class="muRecipe"> -&gt; </span>array:&amp;:@:num [
 <span id="L109" class="LineNr">109 </span>  <span class="Constant">local-scope</span>
-<span id="L110" class="LineNr">110 </span>  <span class="Constant">load-ingredients</span>
+<span id="L110" class="LineNr">110 </span>  <span class="Constant">load-inputs</span>
 <span id="L111" class="LineNr">111 </span>  object1:num <span class="Special">&lt;-</span> index *array, index1
 <span id="L112" class="LineNr">112 </span>  object2:num <span class="Special">&lt;-</span> index *array, index2
 <span id="L113" class="LineNr">113 </span>  *array <span class="Special">&lt;-</span> put-index *array, index1, object2
@@ -194,7 +194,7 @@ if ('onhashchange' in window) {
 <span id="L133" class="LineNr">133 </span><span class="Comment"># (contributed by Caleb Couch)</span>
 <span id="L134" class="LineNr">134 </span><span class="muRecipe">def</span> reverse array:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>array:&amp;:@:_elem [
 <span id="L135" class="LineNr">135 </span>  <span class="Constant">local-scope</span>
-<span id="L136" class="LineNr">136 </span>  <span class="Constant">load-ingredients</span>
+<span id="L136" class="LineNr">136 </span>  <span class="Constant">load-inputs</span>
 <span id="L137" class="LineNr">137 </span>  start:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L138" class="LineNr">138 </span>  length:num <span class="Special">&lt;-</span> length *array
 <span id="L139" class="LineNr">139 </span>  end:num <span class="Special">&lt;-</span> subtract length,<span class="Constant"> 1</span>
diff --git a/html/064list.mu.html b/html/064list.mu.html
index 937bf0b9..d9552c9a 100644
--- a/html/064list.mu.html
+++ b/html/064list.mu.html
@@ -72,20 +72,20 @@ if ('onhashchange' in window) {
 <span id="L10" class="LineNr"> 10 </span>
 <span id="L11" class="LineNr"> 11 </span><span class="muRecipe">def</span> push x:_elem, l:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem/contained-in:l [
 <span id="L12" class="LineNr"> 12 </span>  <span class="Constant">local-scope</span>
-<span id="L13" class="LineNr"> 13 </span>  <span class="Constant">load-ingredients</span>
+<span id="L13" class="LineNr"> 13 </span>  <span class="Constant">load-inputs</span>
 <span id="L14" class="LineNr"> 14 </span>  result <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(list _elem): type<span class="Delimiter">}</span>
 <span id="L15" class="LineNr"> 15 </span>  *result <span class="Special">&lt;-</span> merge x, l
 <span id="L16" class="LineNr"> 16 </span>]
 <span id="L17" class="LineNr"> 17 </span>
 <span id="L18" class="LineNr"> 18 </span><span class="muRecipe">def</span> first in:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem<span class="muRecipe"> -&gt; </span>result:_elem [
 <span id="L19" class="LineNr"> 19 </span>  <span class="Constant">local-scope</span>
-<span id="L20" class="LineNr"> 20 </span>  <span class="Constant">load-ingredients</span>
+<span id="L20" class="LineNr"> 20 </span>  <span class="Constant">load-inputs</span>
 <span id="L21" class="LineNr"> 21 </span>  result <span class="Special">&lt;-</span> get *in, <span class="Constant">value:offset</span>
 <span id="L22" class="LineNr"> 22 </span>]
 <span id="L23" class="LineNr"> 23 </span>
 <span id="L24" class="LineNr"> 24 </span><span class="muRecipe">def</span> <a href='064list.mu.html#L24'>rest</a> in:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem/contained-in:in [
 <span id="L25" class="LineNr"> 25 </span>  <span class="Constant">local-scope</span>
-<span id="L26" class="LineNr"> 26 </span>  <span class="Constant">load-ingredients</span>
+<span id="L26" class="LineNr"> 26 </span>  <span class="Constant">load-inputs</span>
 <span id="L27" class="LineNr"> 27 </span>  result <span class="Special">&lt;-</span> get *in, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>
 <span id="L28" class="LineNr"> 28 </span>]
 <span id="L29" class="LineNr"> 29 </span>
@@ -112,7 +112,7 @@ if ('onhashchange' in window) {
 <span id="L50" class="LineNr"> 50 </span>
 <span id="L51" class="LineNr"> 51 </span><span class="muRecipe">def</span> length l:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem<span class="muRecipe"> -&gt; </span>result:num [
 <span id="L52" class="LineNr"> 52 </span>  <span class="Constant">local-scope</span>
-<span id="L53" class="LineNr"> 53 </span>  <span class="Constant">load-ingredients</span>
+<span id="L53" class="LineNr"> 53 </span>  <span class="Constant">load-inputs</span>
 <span id="L54" class="LineNr"> 54 </span>  result <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L55" class="LineNr"> 55 </span>  <span class="Delimiter">{</span>
 <span id="L56" class="LineNr"> 56 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> l
@@ -125,7 +125,7 @@ if ('onhashchange' in window) {
 <span id="L63" class="LineNr"> 63 </span><span class="Comment"># insert 'x' after 'in'</span>
 <span id="L64" class="LineNr"> 64 </span><span class="muRecipe">def</span> insert x:_elem, in:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem [
 <span id="L65" class="LineNr"> 65 </span>  <span class="Constant">local-scope</span>
-<span id="L66" class="LineNr"> 66 </span>  <span class="Constant">load-ingredients</span>
+<span id="L66" class="LineNr"> 66 </span>  <span class="Constant">load-inputs</span>
 <span id="L67" class="LineNr"> 67 </span>  new-node:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(list _elem): type<span class="Delimiter">}</span>
 <span id="L68" class="LineNr"> 68 </span>  *new-node <span class="Special">&lt;-</span> put *new-node, <span class="Constant">value:offset</span>, x
 <span id="L69" class="LineNr"> 69 </span>  next-node:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>
@@ -217,7 +217,7 @@ if ('onhashchange' in window) {
 <span id="L155" class="LineNr">155 </span><span class="Comment"># pointers to the head are now invalid.</span>
 <span id="L156" class="LineNr">156 </span><span class="muRecipe">def</span> remove x:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem/contained-in:in, in:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem [
 <span id="L157" class="LineNr">157 </span>  <span class="Constant">local-scope</span>
-<span id="L158" class="LineNr">158 </span>  <span class="Constant">load-ingredients</span>
+<span id="L158" class="LineNr">158 </span>  <span class="Constant">load-inputs</span>
 <span id="L159" class="LineNr">159 </span>  <span class="Comment"># if 'x' is null, return</span>
 <span id="L160" class="LineNr">160 </span>  <span class="muControl">return-unless</span> x
 <span id="L161" class="LineNr">161 </span>  next-node:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem <span class="Special">&lt;-</span> <a href='064list.mu.html#L24'>rest</a> x
@@ -327,7 +327,7 @@ if ('onhashchange' in window) {
 <span id="L265" class="LineNr">265 </span><span class="Comment"># (contributed by Caleb Couch)</span>
 <span id="L266" class="LineNr">266 </span><span class="muRecipe">def</span> reverse <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem temp:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem/contained-in:result<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem [
 <span id="L267" class="LineNr">267 </span>  <span class="Constant">local-scope</span>
-<span id="L268" class="LineNr">268 </span>  <span class="Constant">load-ingredients</span>
+<span id="L268" class="LineNr">268 </span>  <span class="Constant">load-inputs</span>
 <span id="L269" class="LineNr">269 </span>  <span class="muControl">return-unless</span> <a href='064list.mu.html#L6'>list</a>, temp
 <span id="L270" class="LineNr">270 </span>  object:_elem <span class="Special">&lt;-</span> first, <a href='064list.mu.html#L6'>list</a>
 <span id="L271" class="LineNr">271 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> <a href='064list.mu.html#L24'>rest</a> <a href='064list.mu.html#L6'>list</a>
@@ -366,7 +366,7 @@ if ('onhashchange' in window) {
 <span id="L304" class="LineNr">304 </span>
 <span id="L305" class="LineNr">305 </span><span class="muRecipe">def</span> to-text in:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem<span class="muRecipe"> -&gt; </span>result:text [
 <span id="L306" class="LineNr">306 </span>  <span class="Constant">local-scope</span>
-<span id="L307" class="LineNr">307 </span>  <span class="Constant">load-ingredients</span>
+<span id="L307" class="LineNr">307 </span>  <span class="Constant">load-inputs</span>
 <span id="L308" class="LineNr">308 </span>  buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 80</span>
 <span id="L309" class="LineNr">309 </span>  buf <span class="Special">&lt;-</span> to-buffer in, buf
 <span id="L310" class="LineNr">310 </span>  result <span class="Special">&lt;-</span> <a href='061text.mu.html#L338'>buffer-to-array</a> buf
@@ -375,7 +375,7 @@ if ('onhashchange' in window) {
 <span id="L313" class="LineNr">313 </span><span class="Comment"># variant of 'to-text' which stops printing after a few elements (and so is robust to cycles)</span>
 <span id="L314" class="LineNr">314 </span><span class="muRecipe">def</span> to-text-line in:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem<span class="muRecipe"> -&gt; </span>result:text [
 <span id="L315" class="LineNr">315 </span>  <span class="Constant">local-scope</span>
-<span id="L316" class="LineNr">316 </span>  <span class="Constant">load-ingredients</span>
+<span id="L316" class="LineNr">316 </span>  <span class="Constant">load-inputs</span>
 <span id="L317" class="LineNr">317 </span>  buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 80</span>
 <span id="L318" class="LineNr">318 </span>  buf <span class="Special">&lt;-</span> to-buffer in, buf,<span class="Constant"> 6</span>  <span class="Comment"># max elements to display</span>
 <span id="L319" class="LineNr">319 </span>  result <span class="Special">&lt;-</span> <a href='061text.mu.html#L338'>buffer-to-array</a> buf
@@ -383,7 +383,7 @@ if ('onhashchange' in window) {
 <span id="L321" class="LineNr">321 </span>
 <span id="L322" class="LineNr">322 </span><span class="muRecipe">def</span> to-buffer in:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem, buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char<span class="muRecipe"> -&gt; </span>buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char [
 <span id="L323" class="LineNr">323 </span>  <span class="Constant">local-scope</span>
-<span id="L324" class="LineNr">324 </span>  <span class="Constant">load-ingredients</span>
+<span id="L324" class="LineNr">324 </span>  <span class="Constant">load-inputs</span>
 <span id="L325" class="LineNr">325 </span>  <span class="Delimiter">{</span>
 <span id="L326" class="LineNr">326 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> in
 <span id="L327" class="LineNr">327 </span>  <span class="Conceal">¦</span> buf <span class="Special">&lt;-</span> append buf, <span class="Constant">[[]</span>]
@@ -398,9 +398,9 @@ if ('onhashchange' in window) {
 <span id="L336" class="LineNr">336 </span>  <span class="muControl">return-unless</span> <a href='065duplex_list.mu.html#L25'>next</a>
 <span id="L337" class="LineNr">337 </span>  buf <span class="Special">&lt;-</span> append buf, <span class="Constant">[ -&gt; ]</span>
 <span id="L338" class="LineNr">338 </span>  <span class="Comment"># and recurse</span>
-<span id="L339" class="LineNr">339 </span>  remaining:num, optional-ingredient-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L339" class="LineNr">339 </span>  remaining:num, optional-input-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L340" class="LineNr">340 </span>  <span class="Delimiter">{</span>
-<span id="L341" class="LineNr">341 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> optional-ingredient-found?
+<span id="L341" class="LineNr">341 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> optional-input-found?
 <span id="L342" class="LineNr">342 </span>  <span class="Conceal">¦</span> <span class="Comment"># unlimited recursion</span>
 <span id="L343" class="LineNr">343 </span>  <span class="Conceal">¦</span> buf <span class="Special">&lt;-</span> to-buffer <a href='065duplex_list.mu.html#L25'>next</a>, buf
 <span id="L344" class="LineNr">344 </span>  <span class="Conceal">¦</span> <span class="muControl">return</span>
diff --git a/html/065duplex_list.mu.html b/html/065duplex_list.mu.html
index d01d6819..e0bde027 100644
--- a/html/065duplex_list.mu.html
+++ b/html/065duplex_list.mu.html
@@ -70,7 +70,7 @@ if ('onhashchange' in window) {
 <span id="L8" class="LineNr">  8 </span>
 <span id="L9" class="LineNr">  9 </span><span class="muRecipe">def</span> push x:_elem, in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:result<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
 <span id="L10" class="LineNr"> 10 </span>  <span class="Constant">local-scope</span>
-<span id="L11" class="LineNr"> 11 </span>  <span class="Constant">load-ingredients</span>
+<span id="L11" class="LineNr"> 11 </span>  <span class="Constant">load-inputs</span>
 <span id="L12" class="LineNr"> 12 </span>  result:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(duplex-list _elem): type<span class="Delimiter">}</span>
 <span id="L13" class="LineNr"> 13 </span>  *result <span class="Special">&lt;-</span> merge x, in,<span class="Constant"> 0</span>
 <span id="L14" class="LineNr"> 14 </span>  <span class="muControl">return-unless</span> in
@@ -79,21 +79,21 @@ if ('onhashchange' in window) {
 <span id="L17" class="LineNr"> 17 </span>
 <span id="L18" class="LineNr"> 18 </span><span class="muRecipe">def</span> first in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:_elem [
 <span id="L19" class="LineNr"> 19 </span>  <span class="Constant">local-scope</span>
-<span id="L20" class="LineNr"> 20 </span>  <span class="Constant">load-ingredients</span>
+<span id="L20" class="LineNr"> 20 </span>  <span class="Constant">load-inputs</span>
 <span id="L21" class="LineNr"> 21 </span>  <span class="muControl">return-unless</span> in,<span class="Constant"> 0</span>
 <span id="L22" class="LineNr"> 22 </span>  result <span class="Special">&lt;-</span> get *in, <span class="Constant">value:offset</span>
 <span id="L23" class="LineNr"> 23 </span>]
 <span id="L24" class="LineNr"> 24 </span>
 <span id="L25" class="LineNr"> 25 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L25'>next</a> in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in [
 <span id="L26" class="LineNr"> 26 </span>  <span class="Constant">local-scope</span>
-<span id="L27" class="LineNr"> 27 </span>  <span class="Constant">load-ingredients</span>
+<span id="L27" class="LineNr"> 27 </span>  <span class="Constant">load-inputs</span>
 <span id="L28" class="LineNr"> 28 </span>  <span class="muControl">return-unless</span> in,<span class="Constant"> 0</span>
 <span id="L29" class="LineNr"> 29 </span>  result <span class="Special">&lt;-</span> get *in, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>
 <span id="L30" class="LineNr"> 30 </span>]
 <span id="L31" class="LineNr"> 31 </span>
 <span id="L32" class="LineNr"> 32 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L32'>prev</a> in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in [
 <span id="L33" class="LineNr"> 33 </span>  <span class="Constant">local-scope</span>
-<span id="L34" class="LineNr"> 34 </span>  <span class="Constant">load-ingredients</span>
+<span id="L34" class="LineNr"> 34 </span>  <span class="Constant">load-inputs</span>
 <span id="L35" class="LineNr"> 35 </span>  <span class="muControl">return-unless</span> in,<span class="Constant"> 0</span>
 <span id="L36" class="LineNr"> 36 </span>  result <span class="Special">&lt;-</span> get *in, <span class="Constant"><a href='065duplex_list.mu.html#L32'>prev</a>:offset</span>
 <span id="L37" class="LineNr"> 37 </span>  <span class="muControl">return</span> result
@@ -143,7 +143,7 @@ if ('onhashchange' in window) {
 <span id="L81" class="LineNr"> 81 </span>
 <span id="L82" class="LineNr"> 82 </span><span class="muRecipe">def</span> length l:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:num [
 <span id="L83" class="LineNr"> 83 </span>  <span class="Constant">local-scope</span>
-<span id="L84" class="LineNr"> 84 </span>  <span class="Constant">load-ingredients</span>
+<span id="L84" class="LineNr"> 84 </span>  <span class="Constant">load-inputs</span>
 <span id="L85" class="LineNr"> 85 </span>  result <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L86" class="LineNr"> 86 </span>  <span class="Delimiter">{</span>
 <span id="L87" class="LineNr"> 87 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> l
@@ -156,7 +156,7 @@ if ('onhashchange' in window) {
 <span id="L94" class="LineNr"> 94 </span><span class="Comment"># insert 'x' after 'in'</span>
 <span id="L95" class="LineNr"> 95 </span><span class="muRecipe">def</span> insert x:_elem, in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
 <span id="L96" class="LineNr"> 96 </span>  <span class="Constant">local-scope</span>
-<span id="L97" class="LineNr"> 97 </span>  <span class="Constant">load-ingredients</span>
+<span id="L97" class="LineNr"> 97 </span>  <span class="Constant">load-inputs</span>
 <span id="L98" class="LineNr"> 98 </span>  new-node:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(duplex-list _elem): type<span class="Delimiter">}</span>
 <span id="L99" class="LineNr"> 99 </span>  *new-node <span class="Special">&lt;-</span> put *new-node, <span class="Constant">value:offset</span>, x
 <span id="L100" class="LineNr">100 </span>  <span class="Comment"># save old next before changing it</span>
@@ -285,7 +285,7 @@ if ('onhashchange' in window) {
 <span id="L223" class="LineNr">223 </span><span class="Comment"># pointers to the head are now invalid.</span>
 <span id="L224" class="LineNr">224 </span><span class="muRecipe">def</span> remove x:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in, in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
 <span id="L225" class="LineNr">225 </span>  <span class="Constant">local-scope</span>
-<span id="L226" class="LineNr">226 </span>  <span class="Constant">load-ingredients</span>
+<span id="L226" class="LineNr">226 </span>  <span class="Constant">load-inputs</span>
 <span id="L227" class="LineNr">227 </span>  <span class="Comment"># if 'x' is null, return</span>
 <span id="L228" class="LineNr">228 </span>  <span class="muControl">return-unless</span> x
 <span id="L229" class="LineNr">229 </span>  next-node:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> get *x, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>
@@ -409,7 +409,7 @@ if ('onhashchange' in window) {
 <span id="L347" class="LineNr">347 </span>
 <span id="L348" class="LineNr">348 </span><span class="muRecipe">def</span> remove x:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in, n:num, in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
 <span id="L349" class="LineNr">349 </span>  <span class="Constant">local-scope</span>
-<span id="L350" class="LineNr">350 </span>  <span class="Constant">load-ingredients</span>
+<span id="L350" class="LineNr">350 </span>  <span class="Constant">load-inputs</span>
 <span id="L351" class="LineNr">351 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L352" class="LineNr">352 </span>  curr:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> copy x
 <span id="L353" class="LineNr">353 </span>  <span class="Delimiter">{</span>
@@ -446,7 +446,7 @@ if ('onhashchange' in window) {
 <span id="L384" class="LineNr">384 </span><span class="Comment"># clean way to return the new head pointer.</span>
 <span id="L385" class="LineNr">385 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L385'>remove-between</a> start:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, end:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:start<span class="muRecipe"> -&gt; </span>start:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
 <span id="L386" class="LineNr">386 </span>  <span class="Constant">local-scope</span>
-<span id="L387" class="LineNr">387 </span>  <span class="Constant">load-ingredients</span>
+<span id="L387" class="LineNr">387 </span>  <span class="Constant">load-inputs</span>
 <span id="L388" class="LineNr">388 </span>  <a href='065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> get *start, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>
 <span id="L389" class="LineNr">389 </span>  nothing-to-delete?:bool <span class="Special">&lt;-</span> equal <a href='065duplex_list.mu.html#L25'>next</a>, end
 <span id="L390" class="LineNr">390 </span>  <span class="muControl">return-if</span> nothing-to-delete?
@@ -586,7 +586,7 @@ if ('onhashchange' in window) {
 <span id="L524" class="LineNr">524 </span><span class="Comment"># insert list beginning at 'start' after 'in'</span>
 <span id="L525" class="LineNr">525 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L525'>splice</a> in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, start:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
 <span id="L526" class="LineNr">526 </span>  <span class="Constant">local-scope</span>
-<span id="L527" class="LineNr">527 </span>  <span class="Constant">load-ingredients</span>
+<span id="L527" class="LineNr">527 </span>  <span class="Constant">load-inputs</span>
 <span id="L528" class="LineNr">528 </span>  <span class="muControl">return-unless</span> in
 <span id="L529" class="LineNr">529 </span>  <span class="muControl">return-unless</span> start
 <span id="L530" class="LineNr">530 </span>  end:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L572'>last</a> start
@@ -603,7 +603,7 @@ if ('onhashchange' in window) {
 <span id="L541" class="LineNr">541 </span><span class="Comment"># insert contents of 'new' after 'in'</span>
 <span id="L542" class="LineNr">542 </span><span class="muRecipe">def</span> insert in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, new:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
 <span id="L543" class="LineNr">543 </span>  <span class="Constant">local-scope</span>
-<span id="L544" class="LineNr">544 </span>  <span class="Constant">load-ingredients</span>
+<span id="L544" class="LineNr">544 </span>  <span class="Constant">load-inputs</span>
 <span id="L545" class="LineNr">545 </span>  <span class="muControl">return-unless</span> in
 <span id="L546" class="LineNr">546 </span>  <span class="muControl">return-unless</span> new
 <span id="L547" class="LineNr">547 </span>  len:num <span class="Special">&lt;-</span> length *new
@@ -624,7 +624,7 @@ if ('onhashchange' in window) {
 <span id="L562" class="LineNr">562 </span>
 <span id="L563" class="LineNr">563 </span><span class="muRecipe">def</span> append in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, new:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
 <span id="L564" class="LineNr">564 </span>  <span class="Constant">local-scope</span>
-<span id="L565" class="LineNr">565 </span>  <span class="Constant">load-ingredients</span>
+<span id="L565" class="LineNr">565 </span>  <span class="Constant">load-inputs</span>
 <span id="L566" class="LineNr">566 </span>  <a href='065duplex_list.mu.html#L572'>last</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L572'>last</a> in
 <span id="L567" class="LineNr">567 </span>  *last <span class="Special">&lt;-</span> put *last, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>, new
 <span id="L568" class="LineNr">568 </span>  <span class="muControl">return-unless</span> new
@@ -633,7 +633,7 @@ if ('onhashchange' in window) {
 <span id="L571" class="LineNr">571 </span>
 <span id="L572" class="LineNr">572 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L572'>last</a> in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
 <span id="L573" class="LineNr">573 </span>  <span class="Constant">local-scope</span>
-<span id="L574" class="LineNr">574 </span>  <span class="Constant">load-ingredients</span>
+<span id="L574" class="LineNr">574 </span>  <span class="Constant">load-inputs</span>
 <span id="L575" class="LineNr">575 </span>  result <span class="Special">&lt;-</span> copy in
 <span id="L576" class="LineNr">576 </span>  <span class="Delimiter">{</span>
 <span id="L577" class="LineNr">577 </span>  <span class="Conceal">¦</span> <a href='065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> result
@@ -646,7 +646,7 @@ if ('onhashchange' in window) {
 <span id="L584" class="LineNr">584 </span><span class="Comment"># does a duplex list start with a certain sequence of elements?</span>
 <span id="L585" class="LineNr">585 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L585'>match</a> x:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, y:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L586" class="LineNr">586 </span>  <span class="Constant">local-scope</span>
-<span id="L587" class="LineNr">587 </span>  <span class="Constant">load-ingredients</span>
+<span id="L587" class="LineNr">587 </span>  <span class="Constant">load-inputs</span>
 <span id="L588" class="LineNr">588 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L589" class="LineNr">589 </span>  max:num <span class="Special">&lt;-</span> length *y
 <span id="L590" class="LineNr">590 </span>  <span class="Delimiter">{</span>
@@ -691,7 +691,7 @@ if ('onhashchange' in window) {
 <span id="L629" class="LineNr">629 </span><span class="Comment"># helper for debugging</span>
 <span id="L630" class="LineNr">630 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L630'>dump-from</a> x:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
 <span id="L631" class="LineNr">631 </span>  <span class="Constant">local-scope</span>
-<span id="L632" class="LineNr">632 </span>  <span class="Constant">load-ingredients</span>
+<span id="L632" class="LineNr">632 </span>  <span class="Constant">load-inputs</span>
 <span id="L633" class="LineNr">633 </span>  $print x, <span class="Constant">[: ]</span>
 <span id="L634" class="LineNr">634 </span>  <span class="Delimiter">{</span>
 <span id="L635" class="LineNr">635 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> x
@@ -724,7 +724,7 @@ if ('onhashchange' in window) {
 <span id="L662" class="LineNr">662 </span>
 <span id="L663" class="LineNr">663 </span><span class="muRecipe">def</span> to-text in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:text [
 <span id="L664" class="LineNr">664 </span>  <span class="Constant">local-scope</span>
-<span id="L665" class="LineNr">665 </span>  <span class="Constant">load-ingredients</span>
+<span id="L665" class="LineNr">665 </span>  <span class="Constant">load-inputs</span>
 <span id="L666" class="LineNr">666 </span>  buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 80</span>
 <span id="L667" class="LineNr">667 </span>  buf <span class="Special">&lt;-</span> to-buffer in, buf
 <span id="L668" class="LineNr">668 </span>  result <span class="Special">&lt;-</span> <a href='061text.mu.html#L338'>buffer-to-array</a> buf
@@ -733,7 +733,7 @@ if ('onhashchange' in window) {
 <span id="L671" class="LineNr">671 </span><span class="Comment"># variant of 'to-text' which stops printing after a few elements (and so is robust to cycles)</span>
 <span id="L672" class="LineNr">672 </span><span class="muRecipe">def</span> to-text-line in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:text [
 <span id="L673" class="LineNr">673 </span>  <span class="Constant">local-scope</span>
-<span id="L674" class="LineNr">674 </span>  <span class="Constant">load-ingredients</span>
+<span id="L674" class="LineNr">674 </span>  <span class="Constant">load-inputs</span>
 <span id="L675" class="LineNr">675 </span>  buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 80</span>
 <span id="L676" class="LineNr">676 </span>  buf <span class="Special">&lt;-</span> to-buffer in, buf,<span class="Constant"> 6</span>  <span class="Comment"># max elements to display</span>
 <span id="L677" class="LineNr">677 </span>  result <span class="Special">&lt;-</span> <a href='061text.mu.html#L338'>buffer-to-array</a> buf
@@ -741,7 +741,7 @@ if ('onhashchange' in window) {
 <span id="L679" class="LineNr">679 </span>
 <span id="L680" class="LineNr">680 </span><span class="muRecipe">def</span> to-buffer in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char<span class="muRecipe"> -&gt; </span>buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char [
 <span id="L681" class="LineNr">681 </span>  <span class="Constant">local-scope</span>
-<span id="L682" class="LineNr">682 </span>  <span class="Constant">load-ingredients</span>
+<span id="L682" class="LineNr">682 </span>  <span class="Constant">load-inputs</span>
 <span id="L683" class="LineNr">683 </span>  <span class="Delimiter">{</span>
 <span id="L684" class="LineNr">684 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> in
 <span id="L685" class="LineNr">685 </span>  <span class="Conceal">¦</span> buf <span class="Special">&lt;-</span> append buf, <span class="Constant">[[]</span>]
@@ -756,9 +756,9 @@ if ('onhashchange' in window) {
 <span id="L694" class="LineNr">694 </span>  <span class="muControl">return-unless</span> <a href='065duplex_list.mu.html#L25'>next</a>
 <span id="L695" class="LineNr">695 </span>  buf <span class="Special">&lt;-</span> append buf, <span class="Constant">[ &lt;-&gt; ]</span>
 <span id="L696" class="LineNr">696 </span>  <span class="Comment"># and recurse</span>
-<span id="L697" class="LineNr">697 </span>  remaining:num, optional-ingredient-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L697" class="LineNr">697 </span>  remaining:num, optional-input-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L698" class="LineNr">698 </span>  <span class="Delimiter">{</span>
-<span id="L699" class="LineNr">699 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> optional-ingredient-found?
+<span id="L699" class="LineNr">699 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> optional-input-found?
 <span id="L700" class="LineNr">700 </span>  <span class="Conceal">¦</span> <span class="Comment"># unlimited recursion</span>
 <span id="L701" class="LineNr">701 </span>  <span class="Conceal">¦</span> buf <span class="Special">&lt;-</span> to-buffer <a href='065duplex_list.mu.html#L25'>next</a>, buf
 <span id="L702" class="LineNr">702 </span>  <span class="Conceal">¦</span> <span class="muControl">return</span>
diff --git a/html/066stream.mu.html b/html/066stream.mu.html
index 217095ac..4c80df9d 100644
--- a/html/066stream.mu.html
+++ b/html/066stream.mu.html
@@ -67,7 +67,7 @@ if ('onhashchange' in window) {
 <span id="L6" class="LineNr"> 6 </span>
 <span id="L7" class="LineNr"> 7 </span><span class="muRecipe">def</span> <a href='066stream.mu.html#L7'>new-stream</a> s:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='066stream.mu.html#L2'>stream</a>:_elem [
 <span id="L8" class="LineNr"> 8 </span>  <span class="Constant">local-scope</span>
-<span id="L9" class="LineNr"> 9 </span>  <span class="Constant">load-ingredients</span>
+<span id="L9" class="LineNr"> 9 </span>  <span class="Constant">load-inputs</span>
 <span id="L10" class="LineNr">10 </span>  <span class="muControl">return-unless</span> s, <span class="Constant">0/null</span>
 <span id="L11" class="LineNr">11 </span>  result <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(stream _elem): type<span class="Delimiter">}</span>
 <span id="L12" class="LineNr">12 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">index:offset</span>,<span class="Constant"> 0</span>
@@ -76,14 +76,14 @@ if ('onhashchange' in window) {
 <span id="L15" class="LineNr">15 </span>
 <span id="L16" class="LineNr">16 </span><span class="muRecipe">def</span> <a href='066stream.mu.html#L16'>rewind</a> in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:_elem [
 <span id="L17" class="LineNr">17 </span>  <span class="Constant">local-scope</span>
-<span id="L18" class="LineNr">18 </span>  <span class="Constant">load-ingredients</span>
+<span id="L18" class="LineNr">18 </span>  <span class="Constant">load-inputs</span>
 <span id="L19" class="LineNr">19 </span>  <span class="muControl">return-unless</span> in
 <span id="L20" class="LineNr">20 </span>  *in <span class="Special">&lt;-</span> put *in, <span class="Constant">index:offset</span>,<span class="Constant"> 0</span>
 <span id="L21" class="LineNr">21 </span>]
 <span id="L22" class="LineNr">22 </span>
 <span id="L23" class="LineNr">23 </span><span class="muRecipe">def</span> read in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:_elem<span class="muRecipe"> -&gt; </span>result:_elem, empty?:bool, in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:_elem [
 <span id="L24" class="LineNr">24 </span>  <span class="Constant">local-scope</span>
-<span id="L25" class="LineNr">25 </span>  <span class="Constant">load-ingredients</span>
+<span id="L25" class="LineNr">25 </span>  <span class="Constant">load-inputs</span>
 <span id="L26" class="LineNr">26 </span>  assert in, <span class="Constant">[cannot read; <a href='066stream.mu.html#L2'>stream</a> has no data]</span>
 <span id="L27" class="LineNr">27 </span>  empty? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
 <span id="L28" class="LineNr">28 </span>  idx:num <span class="Special">&lt;-</span> get *in, <span class="Constant">index:offset</span>
@@ -102,7 +102,7 @@ if ('onhashchange' in window) {
 <span id="L41" class="LineNr">41 </span>
 <span id="L42" class="LineNr">42 </span><span class="muRecipe">def</span> <a href='066stream.mu.html#L42'>peek</a> in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:_elem<span class="muRecipe"> -&gt; </span>result:_elem, empty?:bool [
 <span id="L43" class="LineNr">43 </span>  <span class="Constant">local-scope</span>
-<span id="L44" class="LineNr">44 </span>  <span class="Constant">load-ingredients</span>
+<span id="L44" class="LineNr">44 </span>  <span class="Constant">load-inputs</span>
 <span id="L45" class="LineNr">45 </span>  assert in, <span class="Constant">[cannot peek; <a href='066stream.mu.html#L2'>stream</a> has no data]</span>
 <span id="L46" class="LineNr">46 </span>  empty?:bool <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
 <span id="L47" class="LineNr">47 </span>  idx:num <span class="Special">&lt;-</span> get *in, <span class="Constant">index:offset</span>
@@ -119,7 +119,7 @@ if ('onhashchange' in window) {
 <span id="L58" class="LineNr">58 </span>
 <span id="L59" class="LineNr">59 </span><span class="muRecipe">def</span> <a href='066stream.mu.html#L59'>read-line</a> in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:char<span class="muRecipe"> -&gt; </span>result:text, in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:char [
 <span id="L60" class="LineNr">60 </span>  <span class="Constant">local-scope</span>
-<span id="L61" class="LineNr">61 </span>  <span class="Constant">load-ingredients</span>
+<span id="L61" class="LineNr">61 </span>  <span class="Constant">load-inputs</span>
 <span id="L62" class="LineNr">62 </span>  assert in, <span class="Constant">[cannot read-line; <a href='066stream.mu.html#L2'>stream</a> has no data]</span>
 <span id="L63" class="LineNr">63 </span>  idx:num <span class="Special">&lt;-</span> get *in, <span class="Constant">index:offset</span>
 <span id="L64" class="LineNr">64 </span>  s:text <span class="Special">&lt;-</span> get *in, <span class="Constant">data:offset</span>
@@ -132,7 +132,7 @@ if ('onhashchange' in window) {
 <span id="L71" class="LineNr">71 </span>
 <span id="L72" class="LineNr">72 </span><span class="muRecipe">def</span> <a href='066stream.mu.html#L72'>end-of-stream?</a> in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:_elem<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L73" class="LineNr">73 </span>  <span class="Constant">local-scope</span>
-<span id="L74" class="LineNr">74 </span>  <span class="Constant">load-ingredients</span>
+<span id="L74" class="LineNr">74 </span>  <span class="Constant">load-inputs</span>
 <span id="L75" class="LineNr">75 </span>  assert in, <span class="Constant">[cannot check end-of-stream?; <a href='066stream.mu.html#L2'>stream</a> has no data]</span>
 <span id="L76" class="LineNr">76 </span>  idx:num <span class="Special">&lt;-</span> get *in, <span class="Constant">index:offset</span>
 <span id="L77" class="LineNr">77 </span>  s:&amp;:@:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant">data:offset</span>
diff --git a/html/068random.mu.html b/html/068random.mu.html
index 2c695c2f..dbe3bc66 100644
--- a/html/068random.mu.html
+++ b/html/068random.mu.html
@@ -61,7 +61,7 @@ if ('onhashchange' in window) {
 <pre id='vimCodeElement'>
 <span id="L1" class="LineNr"> 1 </span><span class="muRecipe">def</span> <a href='068random.mu.html#L1'>random</a> generator:&amp;:<a href='066stream.mu.html#L2'>stream</a>:num<span class="muRecipe"> -&gt; </span>result:num, fail?:bool, generator:&amp;:<a href='066stream.mu.html#L2'>stream</a>:num [
 <span id="L2" class="LineNr"> 2 </span>  <span class="Constant">local-scope</span>
-<span id="L3" class="LineNr"> 3 </span>  <span class="Constant">load-ingredients</span>
+<span id="L3" class="LineNr"> 3 </span>  <span class="Constant">load-inputs</span>
 <span id="L4" class="LineNr"> 4 </span>  <span class="Delimiter">{</span>
 <span id="L5" class="LineNr"> 5 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> generator
 <span id="L6" class="LineNr"> 6 </span>  <span class="Conceal">¦</span> <span class="Comment"># generator is 0? use real random-number generator</span>
@@ -74,20 +74,20 @@ if ('onhashchange' in window) {
 <span id="L13" class="LineNr">13 </span><span class="Comment"># helper for tests</span>
 <span id="L14" class="LineNr">14 </span><span class="muRecipe">def</span> <a href='068random.mu.html#L14'>assume-random-numbers</a><span class="muRecipe"> -&gt; </span>result:&amp;:<a href='066stream.mu.html#L2'>stream</a>:num [
 <span id="L15" class="LineNr">15 </span>  <span class="Constant">local-scope</span>
-<span id="L16" class="LineNr">16 </span>  <span class="Constant">load-ingredients</span>
+<span id="L16" class="LineNr">16 </span>  <span class="Constant">load-inputs</span>
 <span id="L17" class="LineNr">17 </span>  <span class="Comment"># compute result-len, space to allocate in result</span>
 <span id="L18" class="LineNr">18 </span>  result-len:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L19" class="LineNr">19 </span>  <span class="Delimiter">{</span>
-<span id="L20" class="LineNr">20 </span>  <span class="Conceal">¦</span> _, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L20" class="LineNr">20 </span>  <span class="Conceal">¦</span> _, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L21" class="LineNr">21 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> arg-received?
 <span id="L22" class="LineNr">22 </span>  <span class="Conceal">¦</span> result-len <span class="Special">&lt;-</span> add result-len,<span class="Constant"> 1</span>
 <span id="L23" class="LineNr">23 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
 <span id="L24" class="LineNr">24 </span>  <span class="Delimiter">}</span>
-<span id="L25" class="LineNr">25 </span>  <span class="Constant">rewind-ingredients</span>
+<span id="L25" class="LineNr">25 </span>  <span class="Constant">rewind-inputs</span>
 <span id="L26" class="LineNr">26 </span>  result-data:&amp;:@:num <span class="Special">&lt;-</span> new <span class="Constant">number:type</span>, result-len
 <span id="L27" class="LineNr">27 </span>  idx:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L28" class="LineNr">28 </span>  <span class="Delimiter">{</span>
-<span id="L29" class="LineNr">29 </span>  <span class="Conceal">¦</span> curr:num, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L29" class="LineNr">29 </span>  <span class="Conceal">¦</span> curr:num, arg-received?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L30" class="LineNr">30 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> arg-received?
 <span id="L31" class="LineNr">31 </span>  <span class="Conceal">¦</span> *result-data <span class="Special">&lt;-</span> put-index *result-data, idx, curr
 <span id="L32" class="LineNr">32 </span>  <span class="Conceal">¦</span> idx <span class="Special">&lt;-</span> add idx,<span class="Constant"> 1</span>
@@ -118,7 +118,7 @@ if ('onhashchange' in window) {
 <span id="L57" class="LineNr">57 </span><span class="Comment"># generate a random integer in the semi-open interval [start, end)</span>
 <span id="L58" class="LineNr">58 </span><span class="muRecipe">def</span> <a href='068random.mu.html#L58'>random-in-range</a> generator:&amp;:<a href='066stream.mu.html#L2'>stream</a>:num, start:num, end:num<span class="muRecipe"> -&gt; </span>result:num, fail?:bool, generator:&amp;:<a href='066stream.mu.html#L2'>stream</a>:num [
 <span id="L59" class="LineNr">59 </span>  <span class="Constant">local-scope</span>
-<span id="L60" class="LineNr">60 </span>  <span class="Constant">load-ingredients</span>
+<span id="L60" class="LineNr">60 </span>  <span class="Constant">load-inputs</span>
 <span id="L61" class="LineNr">61 </span>  result, fail?, generator <span class="Special">&lt;-</span> <a href='068random.mu.html#L1'>random</a> generator
 <span id="L62" class="LineNr">62 </span>  <span class="muControl">return-if</span> fail?
 <span id="L63" class="LineNr">63 </span>  delta:num <span class="Special">&lt;-</span> subtract end, start
diff --git a/html/069hash.cc.html b/html/069hash.cc.html
index 00d88349..defa9784 100644
--- a/html/069hash.cc.html
+++ b/html/069hash.cc.html
@@ -98,7 +98,7 @@ if ('onhashchange' in window) {
 <span id="L33" class="LineNr"> 33 </span><span class="Delimiter">:(code)</span>
 <span id="L34" class="LineNr"> 34 </span><span class="Normal">size_t</span> <a href='069hash.cc.html#L34'>hash</a><span class="Delimiter">(</span><span class="Normal">size_t</span> h<span class="Delimiter">,</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L35" class="LineNr"> 35 </span>  canonize<span class="Delimiter">(</span>r<span class="Delimiter">);</span>
-<span id="L36" class="LineNr"> 36 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L174'>is_mu_text</a><span class="Delimiter">(</span>r<span class="Delimiter">))</span>  <span class="Comment">// optimization</span>
+<span id="L36" class="LineNr"> 36 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span>r<span class="Delimiter">))</span>  <span class="Comment">// optimization</span>
 <span id="L37" class="LineNr"> 37 </span>  <span class="Conceal">¦</span> <span class="Identifier">return</span> <a href='069hash.cc.html#L68'>hash_mu_text</a><span class="Delimiter">(</span>h<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
 <span id="L38" class="LineNr"> 38 </span>  <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>r<span class="Delimiter">))</span>
 <span id="L39" class="LineNr"> 39 </span>  <span class="Conceal">¦</span> <span class="Identifier">return</span> <a href='069hash.cc.html#L56'>hash_mu_address</a><span class="Delimiter">(</span>h<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
@@ -114,14 +114,14 @@ if ('onhashchange' in window) {
 <span id="L49" class="LineNr"> 49 </span><span class="Delimiter">}</span>
 <span id="L50" class="LineNr"> 50 </span>
 <span id="L51" class="LineNr"> 51 </span><span class="Normal">size_t</span> <a href='069hash.cc.html#L51'>hash_mu_scalar</a><span class="Delimiter">(</span><span class="Normal">size_t</span> h<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L52" class="LineNr"> 52 </span>  <span class="Normal">double</span> input = is_literal<span class="Delimiter">(</span>r<span class="Delimiter">)</span> ? r<span class="Delimiter">.</span>value : <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
+<span id="L52" class="LineNr"> 52 </span>  <span class="Normal">double</span> input = is_literal<span class="Delimiter">(</span>r<span class="Delimiter">)</span> ? r<span class="Delimiter">.</span>value : <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
 <span id="L53" class="LineNr"> 53 </span>  <span class="Identifier">return</span> <a href='069hash.cc.html#L119'>hash_iter</a><span class="Delimiter">(</span>h<span class="Delimiter">,</span> <span class="Normal">static_cast</span>&lt;<span class="Normal">size_t</span>&gt;<span class="Delimiter">(</span>input<span class="Delimiter">));</span>
 <span id="L54" class="LineNr"> 54 </span><span class="Delimiter">}</span>
 <span id="L55" class="LineNr"> 55 </span>
 <span id="L56" class="LineNr"> 56 </span><span class="Normal">size_t</span> <a href='069hash.cc.html#L56'>hash_mu_address</a><span class="Delimiter">(</span><span class="Normal">size_t</span> h<span class="Delimiter">,</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L57" class="LineNr"> 57 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>value == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L58" class="LineNr"> 58 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;location &quot;</span> &lt;&lt; r<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L59" class="LineNr"> 59 </span>  r<span class="Delimiter">.</span><a href='010vm.cc.html#L65'>set_value</a><span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
+<span id="L58" class="LineNr"> 58 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;location &quot;</span> &lt;&lt; r<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L59" class="LineNr"> 59 </span>  r<span class="Delimiter">.</span><a href='010vm.cc.html#L65'>set_value</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
 <span id="L60" class="LineNr"> 60 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>value != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L61" class="LineNr"> 61 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;skipping refcount at &quot;</span> &lt;&lt; r<span class="Delimiter">.</span>value &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L62" class="LineNr"> 62 </span>  <span class="Conceal">¦</span> r<span class="Delimiter">.</span><a href='010vm.cc.html#L65'>set_value</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>value+<span class="Constant">1</span><span class="Delimiter">);</span>  <span class="Comment">// skip refcount</span>
@@ -131,7 +131,7 @@ if ('onhashchange' in window) {
 <span id="L66" class="LineNr"> 66 </span><span class="Delimiter">}</span>
 <span id="L67" class="LineNr"> 67 </span>
 <span id="L68" class="LineNr"> 68 </span><span class="Normal">size_t</span> <a href='069hash.cc.html#L68'>hash_mu_text</a><span class="Delimiter">(</span><span class="Normal">size_t</span> h<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L69" class="LineNr"> 69 </span>  string input = <a href='038new_text.cc.html#L143'>read_mu_text</a><span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
+<span id="L69" class="LineNr"> 69 </span>  string input = <a href='038new_text.cc.html#L143'>read_mu_text</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
 <span id="L70" class="LineNr"> 70 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>input<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L71" class="LineNr"> 71 </span>  <span class="Conceal">¦</span> h = <a href='069hash.cc.html#L119'>hash_iter</a><span class="Delimiter">(</span>h<span class="Delimiter">,</span> <span class="Normal">static_cast</span>&lt;<span class="Normal">size_t</span>&gt;<span class="Delimiter">(</span>input<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)));</span>
 <span id="L72" class="LineNr"> 72 </span><span class="CommentedCode">//?     cerr &lt;&lt; i &lt;&lt; &quot;: &quot; &lt;&lt; h &lt;&lt; '\n';</span>
@@ -140,7 +140,7 @@ if ('onhashchange' in window) {
 <span id="L75" class="LineNr"> 75 </span><span class="Delimiter">}</span>
 <span id="L76" class="LineNr"> 76 </span>
 <span id="L77" class="LineNr"> 77 </span><span class="Normal">size_t</span> <a href='069hash.cc.html#L77'>hash_mu_array</a><span class="Delimiter">(</span><span class="Normal">size_t</span> h<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L78" class="LineNr"> 78 </span>  <span class="Normal">int</span> size = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
+<span id="L78" class="LineNr"> 78 </span>  <span class="Normal">int</span> size = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
 <span id="L79" class="LineNr"> 79 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> elem = r<span class="Delimiter">;</span>
 <span id="L80" class="LineNr"> 80 </span>  <span class="Normal">delete</span> elem<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
 <span id="L81" class="LineNr"> 81 </span>  elem<span class="Delimiter">.</span>type = <a href='032array.cc.html#L377'>copy_array_element</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
diff --git a/html/070table.mu.html b/html/070table.mu.html
index c5d0c6ac..620dab6b 100644
--- a/html/070table.mu.html
+++ b/html/070table.mu.html
@@ -117,7 +117,7 @@ if ('onhashchange' in window) {
 <span id="L55" class="LineNr"> 55 </span>
 <span id="L56" class="LineNr"> 56 </span><span class="muRecipe">def</span> <a href='070table.mu.html#L56'>new-table</a> <a href='075channel.mu.html#L399'>capacity</a>:num<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='070table.mu.html#L44'>table</a>:_key:_value [
 <span id="L57" class="LineNr"> 57 </span>  <span class="Constant">local-scope</span>
-<span id="L58" class="LineNr"> 58 </span>  <span class="Constant">load-ingredients</span>
+<span id="L58" class="LineNr"> 58 </span>  <span class="Constant">load-inputs</span>
 <span id="L59" class="LineNr"> 59 </span>  result <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(table _key _value): type<span class="Delimiter">}</span>
 <span id="L60" class="LineNr"> 60 </span>  data:&amp;:@:<a href='070table.mu.html#L50'>table-row</a>:_key:_value <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(table-row _key _value): type<span class="Delimiter">}</span>, <a href='075channel.mu.html#L399'>capacity</a>
 <span id="L61" class="LineNr"> 61 </span>  *result <span class="Special">&lt;-</span> merge <span class="Constant">0/length</span>, <a href='075channel.mu.html#L399'>capacity</a>, data
@@ -127,7 +127,7 @@ if ('onhashchange' in window) {
 <span id="L65" class="LineNr"> 65 </span><span class="Comment"># then we could handle conflicts simply by resizing the table</span>
 <span id="L66" class="LineNr"> 66 </span><span class="muRecipe">def</span> put-index <a href='070table.mu.html#L44'>table</a>:&amp;:<a href='070table.mu.html#L44'>table</a>:_key:_value, key:_key, value:_value<span class="muRecipe"> -&gt; </span><a href='070table.mu.html#L44'>table</a>:&amp;:<a href='070table.mu.html#L44'>table</a>:_key:_value [
 <span id="L67" class="LineNr"> 67 </span>  <span class="Constant">local-scope</span>
-<span id="L68" class="LineNr"> 68 </span>  <span class="Constant">load-ingredients</span>
+<span id="L68" class="LineNr"> 68 </span>  <span class="Constant">load-inputs</span>
 <span id="L69" class="LineNr"> 69 </span>  hash:num <span class="Special">&lt;-</span> hash key
 <span id="L70" class="LineNr"> 70 </span>  hash <span class="Special">&lt;-</span> <a href='070table.mu.html#L103'>abs</a> hash
 <span id="L71" class="LineNr"> 71 </span>  <a href='075channel.mu.html#L399'>capacity</a>:num <span class="Special">&lt;-</span> get *table, <span class="Constant"><a href='075channel.mu.html#L399'>capacity</a>:offset</span>
@@ -144,7 +144,7 @@ if ('onhashchange' in window) {
 <span id="L82" class="LineNr"> 82 </span>
 <span id="L83" class="LineNr"> 83 </span><span class="muRecipe">def</span> index <a href='070table.mu.html#L44'>table</a>:&amp;:<a href='070table.mu.html#L44'>table</a>:_key:_value, key:_key<span class="muRecipe"> -&gt; </span>result:_value, found?:bool [
 <span id="L84" class="LineNr"> 84 </span>  <span class="Constant">local-scope</span>
-<span id="L85" class="LineNr"> 85 </span>  <span class="Constant">load-ingredients</span>
+<span id="L85" class="LineNr"> 85 </span>  <span class="Constant">load-inputs</span>
 <span id="L86" class="LineNr"> 86 </span>  hash:num <span class="Special">&lt;-</span> hash key
 <span id="L87" class="LineNr"> 87 </span>  hash <span class="Special">&lt;-</span> <a href='070table.mu.html#L103'>abs</a> hash
 <span id="L88" class="LineNr"> 88 </span>  <a href='075channel.mu.html#L399'>capacity</a>:num <span class="Special">&lt;-</span> get *table, <span class="Constant"><a href='075channel.mu.html#L399'>capacity</a>:offset</span>
@@ -164,7 +164,7 @@ if ('onhashchange' in window) {
 <span id="L102" class="LineNr">102 </span>
 <span id="L103" class="LineNr">103 </span><span class="muRecipe">def</span> <a href='070table.mu.html#L103'>abs</a> n:num<span class="muRecipe"> -&gt; </span>result:num [
 <span id="L104" class="LineNr">104 </span>  <span class="Constant">local-scope</span>
-<span id="L105" class="LineNr">105 </span>  <span class="Constant">load-ingredients</span>
+<span id="L105" class="LineNr">105 </span>  <span class="Constant">load-inputs</span>
 <span id="L106" class="LineNr">106 </span>  positive?:bool <span class="Special">&lt;-</span> greater-or-equal n,<span class="Constant"> 0</span>
 <span id="L107" class="LineNr">107 </span>  <span class="muControl">return-if</span> positive?, n
 <span id="L108" class="LineNr">108 </span>  result <span class="Special">&lt;-</span> multiply n,<span class="Constant"> -1</span>
diff --git a/html/071deep_copy.cc.html b/html/071deep_copy.cc.html
index 641d493b..6a4b577e 100644
--- a/html/071deep_copy.cc.html
+++ b/html/071deep_copy.cc.html
@@ -336,18 +336,18 @@ if ('onhashchange' in window) {
 <span id="L272" class="LineNr">272 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>addresses_copied<span class="Delimiter">,</span> in_address<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
 <span id="L273" class="LineNr">273 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> payload = canonized_in<span class="Delimiter">;</span>
 <span id="L274" class="LineNr">274 </span>  payload<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>pair&lt;string<span class="Delimiter">,</span> string_tree*&gt;<span class="Delimiter">(</span><span class="Constant">&quot;lookup&quot;</span><span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">));</span>
-<span id="L275" class="LineNr">275 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;recursing on payload &quot;</span> &lt;&lt; payload<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>payload<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L275" class="LineNr">275 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;recursing on payload &quot;</span> &lt;&lt; payload<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>payload<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L276" class="LineNr">276 </span>  vector&lt;<span class="Normal">double</span>&gt; data = deep_copy<span class="Delimiter">(</span>payload<span class="Delimiter">,</span> addresses_copied<span class="Delimiter">,</span> tmp<span class="Delimiter">);</span>
-<span id="L277" class="LineNr">277 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;deep-copy: writing result &quot;</span> &lt;&lt; out &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>data<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L277" class="LineNr">277 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;deep-copy: writing result &quot;</span> &lt;&lt; out &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>data<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L278" class="LineNr">278 </span>  <span class="Comment">// HACK: write_memory interface isn't ideal for this situation; we need</span>
 <span id="L279" class="LineNr">279 </span>  <span class="Comment">// a temporary location to help copy the payload.</span>
 <span id="L280" class="LineNr">280 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;deep-copy: writing temporary &quot;</span> &lt;&lt; tmp<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; out &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L281" class="LineNr">281 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> tmp<span class="Delimiter">.</span>value<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
 <span id="L282" class="LineNr">282 </span>  payload<span class="Delimiter">.</span><a href='010vm.cc.html#L65'>set_value</a><span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>value<span class="Delimiter">);</span>  <span class="Comment">// now modified for output</span>
 <span id="L283" class="LineNr">283 </span>  vector&lt;<span class="Normal">double</span>&gt; old_data = read_memory<span class="Delimiter">(</span>payload<span class="Delimiter">);</span>
-<span id="L284" class="LineNr">284 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;deep-copy: really writing to &quot;</span> &lt;&lt; payload<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>payload<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; (old value &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>old_data<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; new value &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>data<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L284" class="LineNr">284 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;deep-copy: really writing to &quot;</span> &lt;&lt; payload<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>payload<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; (old value &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>old_data<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; new value &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>data<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L285" class="LineNr">285 </span>  write_memory<span class="Delimiter">(</span>payload<span class="Delimiter">,</span> data<span class="Delimiter">);</span>
-<span id="L286" class="LineNr">286 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;deep-copy: output is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>data<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L286" class="LineNr">286 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;deep-copy: output is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>data<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L287" class="LineNr">287 </span>  <span class="Identifier">return</span> out<span class="Delimiter">;</span>
 <span id="L288" class="LineNr">288 </span><span class="Delimiter">}</span>
 <span id="L289" class="LineNr">289 </span>
@@ -357,7 +357,7 @@ if ('onhashchange' in window) {
 <span id="L293" class="LineNr">293 </span>  vector&lt;<span class="Normal">double</span>&gt; data = read_memory<span class="Delimiter">(</span>canonized_in<span class="Delimiter">);</span>
 <span id="L294" class="LineNr">294 </span>  out<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>out<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">(),</span> data<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> data<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">());</span>
 <span id="L295" class="LineNr">295 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> canonized_in<span class="Delimiter">.</span>type<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L296" class="LineNr">296 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;deep-copy: scanning for addresses in &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>data<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L296" class="LineNr">296 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;deep-copy: scanning for addresses in &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>data<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L297" class="LineNr">297 </span>  <span class="Normal">const</span> container_metadata&amp; metadata = get<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> canonized_in<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
 <span id="L298" class="LineNr">298 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;set&lt;tag_condition_info&gt;<span class="Delimiter">,</span> set&lt;address_element_info&gt; &gt;::const_iterator p = metadata<span class="Delimiter">.</span><a href='043space.cc.html#L82'>address</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != metadata<span class="Delimiter">.</span><a href='043space.cc.html#L82'>address</a><span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L299" class="LineNr">299 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!all_match<span class="Delimiter">(</span>data<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
diff --git a/html/072recipe.cc.html b/html/072recipe.cc.html
index 32f77078..fc52668a 100644
--- a/html/072recipe.cc.html
+++ b/html/072recipe.cc.html
@@ -95,7 +95,7 @@ if ('onhashchange' in window) {
 <span id="L31" class="LineNr"> 31 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;recipe-literal&quot;</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L32" class="LineNr"> 32 </span><span class="Comment">// 'recipe' variables can store recipe-literal</span>
 <span id="L33" class="LineNr"> 33 </span><a href='010vm.cc.html#L123'>type_ordinal</a> <a href='010vm.cc.html#L19'>recipe</a> = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;recipe&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
-<span id="L34" class="LineNr"> 34 </span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> <a href='010vm.cc.html#L19'>recipe</a><span class="Delimiter">).</span>name = <span class="Constant">&quot;recipe&quot;</span><span class="Delimiter">;</span>
+<span id="L34" class="LineNr"> 34 </span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> <a href='010vm.cc.html#L19'>recipe</a><span class="Delimiter">).</span>name = <span class="Constant">&quot;recipe&quot;</span><span class="Delimiter">;</span>
 <span id="L35" class="LineNr"> 35 </span>
 <span id="L36" class="LineNr"> 36 </span><span class="Delimiter">:(after &quot;Begin <a href='042name.cc.html#L37'>transform_names</a> Ingredient Special-cases(ingredient, inst, caller)&quot;)</span>
 <span id="L37" class="LineNr"> 37 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='072recipe.cc.html#L47'>is_recipe_literal</a><span class="Delimiter">(</span>ingredient<span class="Delimiter">,</span> caller<span class="Delimiter">))</span> <span class="Delimiter">{</span>
@@ -376,7 +376,7 @@ if ('onhashchange' in window) {
 <span id="L312" class="LineNr">312 </span><span class="Delimiter">:(before &quot;End Matching Types For Literal(to)&quot;)</span>
 <span id="L313" class="LineNr">313 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='072recipe.cc.html#L277'>is_mu_recipe</a><span class="Delimiter">(</span>to<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L314" class="LineNr">314 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> from<span class="Delimiter">.</span>value<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L315" class="LineNr">315 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;trying to store <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; from<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; into &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>to<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but there's no such recipe</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L315" class="LineNr">315 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;trying to store <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; from<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; into &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>to<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but there's no such recipe</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L316" class="LineNr">316 </span>  <span class="Conceal">¦</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
 <span id="L317" class="LineNr">317 </span>  <span class="Delimiter">}</span>
 <span id="L318" class="LineNr">318 </span>  <span class="Normal">const</span> recipe&amp; rrhs = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> from<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
diff --git a/html/073scheduler.cc.html b/html/073scheduler.cc.html
index 094a8a8b..af9330ba 100644
--- a/html/073scheduler.cc.html
+++ b/html/073scheduler.cc.html
@@ -446,7 +446,7 @@ if ('onhashchange' in window) {
 <span id="L381" class="LineNr">381 </span><span class="traceContains">+error: f2: divide by zero in '3:num &lt;- divide-with-remainder 4, 0'</span>
 <span id="L382" class="LineNr">382 </span><span class="traceAbsent">-error: f2: divide by zero in '4:num &lt;- divide-with-remainder 4, 0'</span>
 <span id="L383" class="LineNr">383 </span>
-<span id="L384" class="LineNr">384 </span><span class="Delimiter">:(after &quot;operator&lt;&lt;(ostream&amp; os, <a href='001help.cc.html#L258'>unused</a> end)&quot;)</span>
+<span id="L384" class="LineNr">384 </span><span class="Delimiter">:(after &quot;operator&lt;&lt;(ostream&amp; os, <a href='001help.cc.html#L259'>unused</a> end)&quot;)</span>
 <span id="L385" class="LineNr">385 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream &amp;&amp; Trace_stream<span class="Delimiter">-&gt;</span>curr_label == <span class="Constant">&quot;error&quot;</span> &amp;&amp; Current_routine<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L386" class="LineNr">386 </span>  <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>state = <a href='073scheduler.cc.html#L42'>COMPLETED</a><span class="Delimiter">;</span>
 <span id="L387" class="LineNr">387 </span>  <span class="Delimiter">}</span>
diff --git a/html/074wait.cc.html b/html/074wait.cc.html
index 661da8b1..945940f8 100644
--- a/html/074wait.cc.html
+++ b/html/074wait.cc.html
@@ -154,8 +154,8 @@ if ('onhashchange' in window) {
 <span id="L89" class="LineNr"> 89 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L90" class="LineNr"> 90 </span><span class="Normal">case</span> WAIT_FOR_RESET_THEN_SET: <span class="Delimiter">{</span>
 <span id="L91" class="LineNr"> 91 </span>  <span class="Normal">int</span> loc = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L92" class="LineNr"> 92 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;wait: *&quot;</span> &lt;&lt; loc &lt;&lt; <span class="Constant">&quot; = &quot;</span> &lt;&lt; <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L93" class="LineNr"> 93 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L92" class="LineNr"> 92 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;wait: *&quot;</span> &lt;&lt; loc &lt;&lt; <span class="Constant">&quot; = &quot;</span> &lt;&lt; <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L93" class="LineNr"> 93 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L94" class="LineNr"> 94 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;location &quot;</span> &lt;&lt; loc &lt;&lt; <span class="Constant">&quot; is already 0; setting&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L95" class="LineNr"> 95 </span>  <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L96" class="LineNr"> 96 </span>  <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -186,7 +186,7 @@ if ('onhashchange' in window) {
 <span id="L121" class="LineNr">121 </span><span class="Normal">case</span> RESET: <span class="Delimiter">{</span>
 <span id="L122" class="LineNr">122 </span>  <span class="Normal">int</span> loc = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
 <span id="L123" class="LineNr">123 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L124" class="LineNr">124 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;reset: *&quot;</span> &lt;&lt; loc &lt;&lt; <span class="Constant">&quot; = &quot;</span> &lt;&lt; <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L124" class="LineNr">124 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;reset: *&quot;</span> &lt;&lt; loc &lt;&lt; <span class="Constant">&quot; = &quot;</span> &lt;&lt; <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L125" class="LineNr">125 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L126" class="LineNr">126 </span><span class="Delimiter">}</span>
 <span id="L127" class="LineNr">127 </span>
@@ -196,7 +196,7 @@ if ('onhashchange' in window) {
 <span id="L131" class="LineNr">131 </span><span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Routines<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L132" class="LineNr">132 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state != WAITING<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L133" class="LineNr">133 </span>  <span class="Normal">int</span> loc = Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>waiting_on_location<span class="Delimiter">;</span>
-<span id="L134" class="LineNr">134 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>loc &amp;&amp; <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L134" class="LineNr">134 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>loc &amp;&amp; <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L135" class="LineNr">135 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;schedule&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;waking up routine &quot;</span> &lt;&lt; Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>id &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L136" class="LineNr">136 </span>  <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L137" class="LineNr">137 </span>  <span class="Conceal">¦</span> Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state = <a href='073scheduler.cc.html#L41'>RUNNING</a><span class="Delimiter">;</span>
diff --git a/html/075channel.mu.html b/html/075channel.mu.html
index 91122080..c543311e 100644
--- a/html/075channel.mu.html
+++ b/html/075channel.mu.html
@@ -74,9 +74,9 @@ if ('onhashchange' in window) {
 <span id="L10" class="LineNr"> 10 </span><span class="Comment">#   addresses from being shared between routines, and therefore eliminates all</span>
 <span id="L11" class="LineNr"> 11 </span><span class="Comment">#   possibility of race conditions.</span>
 <span id="L12" class="LineNr"> 12 </span><span class="Comment">#</span>
-<span id="L13" class="LineNr"> 13 </span><span class="Comment"># There's still a narrow window for race conditions: the ingredients passed in</span>
+<span id="L13" class="LineNr"> 13 </span><span class="Comment"># There's still a narrow window for race conditions: the inputs passed in</span>
 <span id="L14" class="LineNr"> 14 </span><span class="Comment"># to 'start-running'. Pass only channels into routines and you should be fine.</span>
-<span id="L15" class="LineNr"> 15 </span><span class="Comment"># Any other mutable ingredients will require locks.</span>
+<span id="L15" class="LineNr"> 15 </span><span class="Comment"># Any other mutable inputs will require locks.</span>
 <span id="L16" class="LineNr"> 16 </span>
 <span id="L17" class="LineNr"> 17 </span><span class="muScenario">scenario</span> channel [
 <span id="L18" class="LineNr"> 18 </span>  run [
@@ -114,7 +114,7 @@ if ('onhashchange' in window) {
 <span id="L50" class="LineNr"> 50 </span>
 <span id="L51" class="LineNr"> 51 </span><span class="muRecipe">def</span> <a href='075channel.mu.html#L51'>new-channel</a> <a href='075channel.mu.html#L399'>capacity</a>:num<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='075channel.mu.html#L43'>source</a>:_elem, out:&amp;:<a href='075channel.mu.html#L47'>sink</a>:_elem [
 <span id="L52" class="LineNr"> 52 </span>  <span class="Constant">local-scope</span>
-<span id="L53" class="LineNr"> 53 </span>  <span class="Constant">load-ingredients</span>
+<span id="L53" class="LineNr"> 53 </span>  <span class="Constant">load-inputs</span>
 <span id="L54" class="LineNr"> 54 </span>  result:&amp;:channel:_elem <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(channel _elem): type<span class="Delimiter">}</span>
 <span id="L55" class="LineNr"> 55 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">first-full:offset</span>,<span class="Constant"> 0</span>
 <span id="L56" class="LineNr"> 56 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">first-free:offset</span>,<span class="Constant"> 0</span>
@@ -130,7 +130,7 @@ if ('onhashchange' in window) {
 <span id="L66" class="LineNr"> 66 </span><span class="Comment"># write a value to a channel</span>
 <span id="L67" class="LineNr"> 67 </span><span class="muRecipe">def</span> <a href='075channel.mu.html#L67'>write</a> out:&amp;:<a href='075channel.mu.html#L47'>sink</a>:_elem, val:_elem<span class="muRecipe"> -&gt; </span>out:&amp;:<a href='075channel.mu.html#L47'>sink</a>:_elem [
 <span id="L68" class="LineNr"> 68 </span>  <span class="Constant">local-scope</span>
-<span id="L69" class="LineNr"> 69 </span>  <span class="Constant">load-ingredients</span>
+<span id="L69" class="LineNr"> 69 </span>  <span class="Constant">load-inputs</span>
 <span id="L70" class="LineNr"> 70 </span>  assert out, <span class="Constant">[write to null channel]</span>
 <span id="L71" class="LineNr"> 71 </span>  chan:&amp;:channel:_elem <span class="Special">&lt;-</span> get *out, <span class="Constant">chan:offset</span>
 <span id="L72" class="LineNr"> 72 </span><span class="Constant">  <a href='075channel.mu.html#L72'>&lt;channel-write-initial&gt;</a></span>
@@ -176,7 +176,7 @@ if ('onhashchange' in window) {
 <span id="L112" class="LineNr">112 </span><span class="Comment"># read a value from a channel</span>
 <span id="L113" class="LineNr">113 </span><span class="muRecipe">def</span> read in:&amp;:<a href='075channel.mu.html#L43'>source</a>:_elem<span class="muRecipe"> -&gt; </span>result:_elem, eof?:bool, in:&amp;:<a href='075channel.mu.html#L43'>source</a>:_elem [
 <span id="L114" class="LineNr">114 </span>  <span class="Constant">local-scope</span>
-<span id="L115" class="LineNr">115 </span>  <span class="Constant">load-ingredients</span>
+<span id="L115" class="LineNr">115 </span>  <span class="Constant">load-inputs</span>
 <span id="L116" class="LineNr">116 </span>  assert in, <span class="Constant">[read on null channel]</span>
 <span id="L117" class="LineNr">117 </span>  eof? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>  <span class="Comment"># default result</span>
 <span id="L118" class="LineNr">118 </span>  chan:&amp;:channel:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant">chan:offset</span>
@@ -375,7 +375,7 @@ if ('onhashchange' in window) {
 <span id="L311" class="LineNr">311 </span>
 <span id="L312" class="LineNr">312 </span><span class="muRecipe">def</span> <a href='075channel.mu.html#L312'>clear</a> in:&amp;:<a href='075channel.mu.html#L43'>source</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='075channel.mu.html#L43'>source</a>:_elem [
 <span id="L313" class="LineNr">313 </span>  <span class="Constant">local-scope</span>
-<span id="L314" class="LineNr">314 </span>  <span class="Constant">load-ingredients</span>
+<span id="L314" class="LineNr">314 </span>  <span class="Constant">load-inputs</span>
 <span id="L315" class="LineNr">315 </span>  chan:&amp;:channel:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant">chan:offset</span>
 <span id="L316" class="LineNr">316 </span>  <span class="Delimiter">{</span>
 <span id="L317" class="LineNr">317 </span>  <span class="Conceal">¦</span> empty?:bool <span class="Special">&lt;-</span> <a href='075channel.mu.html#L370'>channel-empty?</a> chan
@@ -397,13 +397,13 @@ if ('onhashchange' in window) {
 <span id="L333" class="LineNr">333 </span><span class="Comment"># both routines can modify the 'closed?' bit, but they can only ever set it, so this is a benign race</span>
 <span id="L334" class="LineNr">334 </span><span class="muRecipe">def</span> close x:&amp;:<a href='075channel.mu.html#L43'>source</a>:_elem<span class="muRecipe"> -&gt; </span>x:&amp;:<a href='075channel.mu.html#L43'>source</a>:_elem [
 <span id="L335" class="LineNr">335 </span>  <span class="Constant">local-scope</span>
-<span id="L336" class="LineNr">336 </span>  <span class="Constant">load-ingredients</span>
+<span id="L336" class="LineNr">336 </span>  <span class="Constant">load-inputs</span>
 <span id="L337" class="LineNr">337 </span>  chan:&amp;:channel:_elem <span class="Special">&lt;-</span> get *x, <span class="Constant">chan:offset</span>
 <span id="L338" class="LineNr">338 </span>  *chan <span class="Special">&lt;-</span> put *chan, <span class="Constant">closed?:offset</span>, <span class="Constant">1/true</span>
 <span id="L339" class="LineNr">339 </span>]
 <span id="L340" class="LineNr">340 </span><span class="muRecipe">def</span> close x:&amp;:<a href='075channel.mu.html#L47'>sink</a>:_elem<span class="muRecipe"> -&gt; </span>x:&amp;:<a href='075channel.mu.html#L47'>sink</a>:_elem [
 <span id="L341" class="LineNr">341 </span>  <span class="Constant">local-scope</span>
-<span id="L342" class="LineNr">342 </span>  <span class="Constant">load-ingredients</span>
+<span id="L342" class="LineNr">342 </span>  <span class="Constant">load-inputs</span>
 <span id="L343" class="LineNr">343 </span>  chan:&amp;:channel:_elem <span class="Special">&lt;-</span> get *x, <span class="Constant">chan:offset</span>
 <span id="L344" class="LineNr">344 </span>  *chan <span class="Special">&lt;-</span> put *chan, <span class="Constant">closed?:offset</span>, <span class="Constant">1/true</span>
 <span id="L345" class="LineNr">345 </span>]
@@ -433,7 +433,7 @@ if ('onhashchange' in window) {
 <span id="L369" class="LineNr">369 </span><span class="Comment"># An empty channel has first-free and first-full both at the same value.</span>
 <span id="L370" class="LineNr">370 </span><span class="muRecipe">def</span> <a href='075channel.mu.html#L370'>channel-empty?</a> chan:&amp;:channel:_elem<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L371" class="LineNr">371 </span>  <span class="Constant">local-scope</span>
-<span id="L372" class="LineNr">372 </span>  <span class="Constant">load-ingredients</span>
+<span id="L372" class="LineNr">372 </span>  <span class="Constant">load-inputs</span>
 <span id="L373" class="LineNr">373 </span>  <span class="Comment"># return chan.first-full == chan.first-free</span>
 <span id="L374" class="LineNr">374 </span>  full:num <span class="Special">&lt;-</span> get *chan, <span class="Constant">first-full:offset</span>
 <span id="L375" class="LineNr">375 </span>  free:num <span class="Special">&lt;-</span> get *chan, <span class="Constant">first-free:offset</span>
@@ -444,7 +444,7 @@ if ('onhashchange' in window) {
 <span id="L380" class="LineNr">380 </span><span class="Comment"># (Other alternatives: <a href="https://www.snellman.net/blog/archive/2016-12-13-ring-buffers">https://www.snellman.net/blog/archive/2016-12-13-ring-buffers</a>)</span>
 <span id="L381" class="LineNr">381 </span><span class="muRecipe">def</span> <a href='075channel.mu.html#L381'>channel-full?</a> chan:&amp;:channel:_elem<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L382" class="LineNr">382 </span>  <span class="Constant">local-scope</span>
-<span id="L383" class="LineNr">383 </span>  <span class="Constant">load-ingredients</span>
+<span id="L383" class="LineNr">383 </span>  <span class="Constant">load-inputs</span>
 <span id="L384" class="LineNr">384 </span>  <span class="Comment"># tmp = chan.first-free + 1</span>
 <span id="L385" class="LineNr">385 </span>  tmp:num <span class="Special">&lt;-</span> get *chan, <span class="Constant">first-free:offset</span>
 <span id="L386" class="LineNr">386 </span>  tmp <span class="Special">&lt;-</span> add tmp,<span class="Constant"> 1</span>
@@ -462,7 +462,7 @@ if ('onhashchange' in window) {
 <span id="L398" class="LineNr">398 </span>
 <span id="L399" class="LineNr">399 </span><span class="muRecipe">def</span> <a href='075channel.mu.html#L399'>capacity</a> chan:&amp;:channel:_elem<span class="muRecipe"> -&gt; </span>result:num [
 <span id="L400" class="LineNr">400 </span>  <span class="Constant">local-scope</span>
-<span id="L401" class="LineNr">401 </span>  <span class="Constant">load-ingredients</span>
+<span id="L401" class="LineNr">401 </span>  <span class="Constant">load-inputs</span>
 <span id="L402" class="LineNr">402 </span>  q:&amp;:@:_elem <span class="Special">&lt;-</span> get *chan, <span class="Constant">data:offset</span>
 <span id="L403" class="LineNr">403 </span>  result <span class="Special">&lt;-</span> length *q
 <span id="L404" class="LineNr">404 </span>]
@@ -471,7 +471,7 @@ if ('onhashchange' in window) {
 <span id="L407" class="LineNr">407 </span>
 <span id="L408" class="LineNr">408 </span><span class="muRecipe">def</span> <a href='075channel.mu.html#L408'>buffer-lines</a> in:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, buffered-out:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char<span class="muRecipe"> -&gt; </span>buffered-out:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char, in:&amp;:<a href='075channel.mu.html#L43'>source</a>:char [
 <span id="L409" class="LineNr">409 </span>  <span class="Constant">local-scope</span>
-<span id="L410" class="LineNr">410 </span>  <span class="Constant">load-ingredients</span>
+<span id="L410" class="LineNr">410 </span>  <span class="Constant">load-inputs</span>
 <span id="L411" class="LineNr">411 </span>  <span class="Comment"># repeat forever</span>
 <span id="L412" class="LineNr">412 </span>  eof?:bool <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
 <span id="L413" class="LineNr">413 </span>  <span class="Delimiter">{</span>
@@ -570,7 +570,7 @@ if ('onhashchange' in window) {
 <span id="L506" class="LineNr">506 </span>
 <span id="L507" class="LineNr">507 </span><span class="muRecipe">def</span> <a href='075channel.mu.html#L507'>drain</a> <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char<span class="muRecipe"> -&gt; </span>result:text, <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char [
 <span id="L508" class="LineNr">508 </span>  <span class="Constant">local-scope</span>
-<span id="L509" class="LineNr">509 </span>  <span class="Constant">load-ingredients</span>
+<span id="L509" class="LineNr">509 </span>  <span class="Constant">load-inputs</span>
 <span id="L510" class="LineNr">510 </span>  buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 30</span>
 <span id="L511" class="LineNr">511 </span>  <span class="Delimiter">{</span>
 <span id="L512" class="LineNr">512 </span>  <span class="Conceal">¦</span> c:char, done?:bool <span class="Special">&lt;-</span> read <a href='075channel.mu.html#L43'>source</a>
diff --git a/html/076continuation.cc.html b/html/076continuation.cc.html
index c95bd2af..ee34e992 100644
--- a/html/076continuation.cc.html
+++ b/html/076continuation.cc.html
@@ -204,191 +204,221 @@ if ('onhashchange' in window) {
 <span id="L140" class="LineNr">140 </span><span class="Comment">//: save the slice of current call stack until the 'call-with-continuation-mark'</span>
 <span id="L141" class="LineNr">141 </span><span class="Comment">//: call, and return it as the result.</span>
 <span id="L142" class="LineNr">142 </span><span class="Comment">//: todo: implement delimited continuations in Mu's memory</span>
-<span id="L143" class="LineNr">143 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L144" class="LineNr">144 </span>map&lt;<span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span><span class="Delimiter">,</span> call_stack&gt; Delimited_continuation<span class="Delimiter">;</span>
-<span id="L145" class="LineNr">145 </span><span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> Next_delimited_continuation_id = <span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// 0 is null just like an address</span>
-<span id="L146" class="LineNr">146 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
-<span id="L147" class="LineNr">147 </span>Delimited_continuation<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L148" class="LineNr">148 </span>Next_delimited_continuation_id = <span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L149" class="LineNr">149 </span>
-<span id="L150" class="LineNr">150 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L151" class="LineNr">151 </span>RETURN_CONTINUATION_UNTIL_MARK<span class="Delimiter">,</span>
-<span id="L152" class="LineNr">152 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L153" class="LineNr">153 </span>Recipe_ordinal[<span class="Constant">&quot;return-continuation-until-mark&quot;</span>] = RETURN_CONTINUATION_UNTIL_MARK<span class="Delimiter">;</span>
-<span id="L154" class="LineNr">154 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L155" class="LineNr">155 </span><span class="Normal">case</span> RETURN_CONTINUATION_UNTIL_MARK: <span class="Delimiter">{</span>
-<span id="L156" class="LineNr">156 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L157" class="LineNr">157 </span><span class="Delimiter">}</span>
-<span id="L158" class="LineNr">158 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L159" class="LineNr">159 </span><span class="Normal">case</span> RETURN_CONTINUATION_UNTIL_MARK: <span class="Delimiter">{</span>
-<span id="L160" class="LineNr">160 </span>  <span class="Comment">// first clear any existing ingredients, to isolate the creation of the</span>
-<span id="L161" class="LineNr">161 </span>  <span class="Comment">// continuation from its calls</span>
-<span id="L162" class="LineNr">162 </span>  Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>front<span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L163" class="LineNr">163 </span>  Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>front<span class="Delimiter">().</span>next_ingredient_to_process = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L164" class="LineNr">164 </span>  <span class="Comment">// copy the current call stack until the most recent marked call</span>
-<span id="L165" class="LineNr">165 </span>  call_stack::iterator find_base_of_continuation<span class="Delimiter">(</span>call_stack&amp; c<span class="Delimiter">);</span>  <span class="Comment">// manual prototype containing '::'</span>
-<span id="L166" class="LineNr">166 </span>  call_stack::iterator base = find_base_of_continuation<span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">);</span>
-<span id="L167" class="LineNr">167 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base == Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L168" class="LineNr">168 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;couldn't find a 'call-with-continuation-mark' to return to</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L169" class="LineNr">169 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;call stack:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L170" class="LineNr">170 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::iterator p = Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
-<span id="L171" class="LineNr">171 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;  &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">).</span>name &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L172" class="LineNr">172 </span>  <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L173" class="LineNr">173 </span>  <span class="Delimiter">}</span>
-<span id="L174" class="LineNr">174 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;creating continuation &quot;</span> &lt;&lt; Next_delimited_continuation_id &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L175" class="LineNr">175 </span>  Delimited_continuation[Next_delimited_continuation_id] = call_stack<span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> base<span class="Delimiter">);</span>
-<span id="L176" class="LineNr">176 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>begin<span class="Delimiter">()</span> != base<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L177" class="LineNr">177 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L178" class="LineNr">178 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> --Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">;</span>
-<span id="L179" class="LineNr">179 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> assert<span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L180" class="LineNr">180 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L181" class="LineNr">181 </span>  <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>pop_front<span class="Delimiter">();</span>
-<span id="L182" class="LineNr">182 </span>  <span class="Delimiter">}</span>
-<span id="L183" class="LineNr">183 </span>  <span class="Comment">// return it as the result of the marked call</span>
-<span id="L184" class="LineNr">184 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L185" class="LineNr">185 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>Next_delimited_continuation_id<span class="Delimiter">);</span>
-<span id="L186" class="LineNr">186 </span>  <span class="Comment">// return any other ingredients passed in</span>
-<span id="L187" class="LineNr">187 </span>  copy<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">()));</span>
-<span id="L188" class="LineNr">188 </span>  ++Next_delimited_continuation_id<span class="Delimiter">;</span>
-<span id="L189" class="LineNr">189 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// continue to process rest of marked call</span>
-<span id="L190" class="LineNr">190 </span><span class="Delimiter">}</span>
-<span id="L191" class="LineNr">191 </span>
-<span id="L192" class="LineNr">192 </span><span class="Delimiter">:(code)</span>
-<span id="L193" class="LineNr">193 </span>call_stack::iterator find_base_of_continuation<span class="Delimiter">(</span>call_stack&amp; c<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L194" class="LineNr">194 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::iterator p = c<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != c<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span>
-<span id="L195" class="LineNr">195 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>is_base_of_continuation<span class="Delimiter">)</span> <span class="Identifier">return</span> p<span class="Delimiter">;</span>
-<span id="L196" class="LineNr">196 </span>  <span class="Identifier">return</span> c<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L197" class="LineNr">197 </span><span class="Delimiter">}</span>
-<span id="L198" class="LineNr">198 </span>
-<span id="L199" class="LineNr">199 </span><span class="Comment">//: overload 'call' for continuations</span>
-<span id="L200" class="LineNr">200 </span><span class="Delimiter">:(after &quot;Begin Call&quot;)</span>
-<span id="L201" class="LineNr">201 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>type<span class="Delimiter">-&gt;</span>atom
-<span id="L202" class="LineNr">202 </span>  <span class="Conceal">¦</span> &amp;&amp; <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;continuation&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L203" class="LineNr">203 </span>  <span class="Comment">// copy multiple calls on to current call stack</span>
-<span id="L204" class="LineNr">204 </span>  assert<span class="Delimiter">(</span>scalar<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)));</span>
-<span id="L205" class="LineNr">205 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;calling continuation &quot;</span> &lt;&lt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L206" class="LineNr">206 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">.</span>find<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> == Delimited_continuation<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">())</span>
-<span id="L207" class="LineNr">207 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;no such delimited continuation &quot;</span> &lt;&lt; <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L208" class="LineNr">208 </span>  <span class="Normal">const</span> call_stack&amp; new_calls = Delimited_continuation[ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span>]<span class="Delimiter">;</span>
-<span id="L209" class="LineNr">209 </span>  <span class="Normal">const</span> call&amp; caller = <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>new_calls<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> ? *++new_calls<span class="Delimiter">.</span>begin<span class="Delimiter">()</span> : Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>front<span class="Delimiter">();</span>
-<span id="L210" class="LineNr">210 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::const_reverse_iterator p = new_calls<span class="Delimiter">.</span>rbegin<span class="Delimiter">();</span> p != new_calls<span class="Delimiter">.</span>rend<span class="Delimiter">();</span> ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L211" class="LineNr">211 </span>  <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>push_front<span class="Delimiter">(</span>*p<span class="Delimiter">);</span>
-<span id="L212" class="LineNr">212 </span>  <span class="Conceal">¦</span> <span class="Comment">// ensure that the presence of a continuation keeps its stack frames from being reclaimed</span>
-<span id="L213" class="LineNr">213 </span>  <span class="Conceal">¦</span> <span class="Normal">int</span> space_address = Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>front<span class="Delimiter">().</span>default_space<span class="Delimiter">;</span>
-<span id="L214" class="LineNr">214 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>space_address != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L215" class="LineNr">215 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">int</span> refcount = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> space_address<span class="Delimiter">);</span>
-<span id="L216" class="LineNr">216 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;incrementing refcount of &quot;</span> &lt;&lt; space_address &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; refcount &lt;&lt; <span class="Constant">&quot; -&gt; &quot;</span> &lt;&lt; refcount+<span class="Constant">1</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L217" class="LineNr">217 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> space_address<span class="Delimiter">,</span> refcount+<span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L218" class="LineNr">218 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L219" class="LineNr">219 </span>  <span class="Delimiter">}</span>
-<span id="L220" class="LineNr">220 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L221" class="LineNr">221 </span>  <span class="Conceal">¦</span> Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth += <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>new_calls<span class="Delimiter">);</span>
-<span id="L222" class="LineNr">222 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;calling delimited continuation; growing callstack depth to &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L223" class="LineNr">223 </span>  <span class="Conceal">¦</span> assert<span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt; <span class="Constant">9000</span><span class="Delimiter">);</span>  <span class="Comment">// 9998-101 plus cushion</span>
-<span id="L224" class="LineNr">224 </span>  <span class="Delimiter">}</span>
-<span id="L225" class="LineNr">225 </span>  ingredients<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">());</span>  <span class="Comment">// drop the callee</span>
-<span id="L226" class="LineNr">226 </span>  finish_call_housekeeping<span class="Delimiter">(</span><a href='026call.cc.html#L86'>to_instruction</a><span class="Delimiter">(</span>caller<span class="Delimiter">),</span> ingredients<span class="Delimiter">);</span>
-<span id="L227" class="LineNr">227 </span>  copy<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span>begin<span class="Delimiter">()));</span>
-<span id="L228" class="LineNr">228 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// record results of resuming 'return-continuation-until-mark' instruction</span>
-<span id="L229" class="LineNr">229 </span><span class="Delimiter">}</span>
-<span id="L230" class="LineNr">230 </span>
-<span id="L231" class="LineNr">231 </span><span class="Comment">//: Ensure that the presence of a continuation keeps its stack frames from being reclaimed.</span>
-<span id="L232" class="LineNr">232 </span>
-<span id="L233" class="LineNr">233 </span><span class="Delimiter">:(scenario continuations_preserve_local_scopes)</span>
-<span id="L234" class="LineNr">234 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L143" class="LineNr">143 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
+<span id="L144" class="LineNr">144 </span><span class="Normal">struct</span> delimited_continuation <span class="Delimiter">{</span>
+<span id="L145" class="LineNr">145 </span>  call_stack frames<span class="Delimiter">;</span>
+<span id="L146" class="LineNr">146 </span>  <span class="Normal">int</span> nrefs<span class="Delimiter">;</span>
+<span id="L147" class="LineNr">147 </span>  delimited_continuation<span class="Delimiter">(</span>call_stack::iterator begin<span class="Delimiter">,</span> call_stack::iterator <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">)</span> :frames<span class="Delimiter">(</span>call_stack<span class="Delimiter">(</span>begin<span class="Delimiter">,</span> <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">)),</span> nrefs<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{}</span>
+<span id="L148" class="LineNr">148 </span><span class="Delimiter">};</span>
+<span id="L149" class="LineNr">149 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L150" class="LineNr">150 </span>map&lt;<span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span><span class="Delimiter">,</span> delimited_continuation&gt; Delimited_continuation<span class="Delimiter">;</span>
+<span id="L151" class="LineNr">151 </span><span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> Next_delimited_continuation_id = <span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// 0 is null just like an address</span>
+<span id="L152" class="LineNr">152 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
+<span id="L153" class="LineNr">153 </span>Delimited_continuation<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L154" class="LineNr">154 </span>Next_delimited_continuation_id = <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L155" class="LineNr">155 </span>
+<span id="L156" class="LineNr">156 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L157" class="LineNr">157 </span>RETURN_CONTINUATION_UNTIL_MARK<span class="Delimiter">,</span>
+<span id="L158" class="LineNr">158 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L159" class="LineNr">159 </span>Recipe_ordinal[<span class="Constant">&quot;return-continuation-until-mark&quot;</span>] = RETURN_CONTINUATION_UNTIL_MARK<span class="Delimiter">;</span>
+<span id="L160" class="LineNr">160 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L161" class="LineNr">161 </span><span class="Normal">case</span> RETURN_CONTINUATION_UNTIL_MARK: <span class="Delimiter">{</span>
+<span id="L162" class="LineNr">162 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L163" class="LineNr">163 </span><span class="Delimiter">}</span>
+<span id="L164" class="LineNr">164 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L165" class="LineNr">165 </span><span class="Normal">case</span> RETURN_CONTINUATION_UNTIL_MARK: <span class="Delimiter">{</span>
+<span id="L166" class="LineNr">166 </span>  <span class="Comment">// first clear any existing ingredients, to isolate the creation of the</span>
+<span id="L167" class="LineNr">167 </span>  <span class="Comment">// continuation from its calls</span>
+<span id="L168" class="LineNr">168 </span>  Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>front<span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L169" class="LineNr">169 </span>  Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>front<span class="Delimiter">().</span>next_ingredient_to_process = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L170" class="LineNr">170 </span>  <span class="Comment">// copy the current call stack until the most recent marked call</span>
+<span id="L171" class="LineNr">171 </span>  call_stack::iterator find_base_of_continuation<span class="Delimiter">(</span>call_stack&amp; c<span class="Delimiter">);</span>  <span class="Comment">// manual prototype containing '::'</span>
+<span id="L172" class="LineNr">172 </span>  call_stack::iterator base = find_base_of_continuation<span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">);</span>
+<span id="L173" class="LineNr">173 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base == Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L174" class="LineNr">174 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;couldn't find a 'call-with-continuation-mark' to return to</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L175" class="LineNr">175 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;call stack:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L176" class="LineNr">176 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::iterator p = Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
+<span id="L177" class="LineNr">177 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;  &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">).</span>name &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L178" class="LineNr">178 </span>  <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L179" class="LineNr">179 </span>  <span class="Delimiter">}</span>
+<span id="L180" class="LineNr">180 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;creating continuation &quot;</span> &lt;&lt; Next_delimited_continuation_id &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L181" class="LineNr">181 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">,</span> Next_delimited_continuation_id<span class="Delimiter">,</span> delimited_continuation<span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> base<span class="Delimiter">));</span>
+<span id="L182" class="LineNr">182 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>begin<span class="Delimiter">()</span> != base<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L183" class="LineNr">183 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L184" class="LineNr">184 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> --Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">;</span>
+<span id="L185" class="LineNr">185 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> assert<span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L186" class="LineNr">186 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L187" class="LineNr">187 </span>  <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>pop_front<span class="Delimiter">();</span>
+<span id="L188" class="LineNr">188 </span>  <span class="Delimiter">}</span>
+<span id="L189" class="LineNr">189 </span>  <span class="Comment">// return it as the result of the marked call</span>
+<span id="L190" class="LineNr">190 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L191" class="LineNr">191 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>Next_delimited_continuation_id<span class="Delimiter">);</span>
+<span id="L192" class="LineNr">192 </span>  <span class="Comment">// return any other ingredients passed in</span>
+<span id="L193" class="LineNr">193 </span>  copy<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">()));</span>
+<span id="L194" class="LineNr">194 </span>  ++Next_delimited_continuation_id<span class="Delimiter">;</span>
+<span id="L195" class="LineNr">195 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// continue to process rest of marked call</span>
+<span id="L196" class="LineNr">196 </span><span class="Delimiter">}</span>
+<span id="L197" class="LineNr">197 </span>
+<span id="L198" class="LineNr">198 </span><span class="Delimiter">:(code)</span>
+<span id="L199" class="LineNr">199 </span>call_stack::iterator find_base_of_continuation<span class="Delimiter">(</span>call_stack&amp; c<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L200" class="LineNr">200 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::iterator p = c<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != c<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span>
+<span id="L201" class="LineNr">201 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>is_base_of_continuation<span class="Delimiter">)</span> <span class="Identifier">return</span> p<span class="Delimiter">;</span>
+<span id="L202" class="LineNr">202 </span>  <span class="Identifier">return</span> c<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L203" class="LineNr">203 </span><span class="Delimiter">}</span>
+<span id="L204" class="LineNr">204 </span>
+<span id="L205" class="LineNr">205 </span><span class="Comment">//: overload 'call' for continuations</span>
+<span id="L206" class="LineNr">206 </span><span class="Delimiter">:(after &quot;Begin Call&quot;)</span>
+<span id="L207" class="LineNr">207 </span><span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_continuation<span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L208" class="LineNr">208 </span>  <span class="Comment">// copy multiple calls on to current call stack</span>
+<span id="L209" class="LineNr">209 </span>  assert<span class="Delimiter">(</span>scalar<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)));</span>
+<span id="L210" class="LineNr">210 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;calling continuation &quot;</span> &lt;&lt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L211" class="LineNr">211 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">,</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span>
+<span id="L212" class="LineNr">212 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;no such delimited continuation &quot;</span> &lt;&lt; <a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L213" class="LineNr">213 </span>  <span class="Normal">const</span> call_stack&amp; new_frames = get<span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">,</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)).</span>frames<span class="Delimiter">;</span>
+<span id="L214" class="LineNr">214 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::const_reverse_iterator p = new_frames<span class="Delimiter">.</span>rbegin<span class="Delimiter">();</span> p != new_frames<span class="Delimiter">.</span>rend<span class="Delimiter">();</span> ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L215" class="LineNr">215 </span>  <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>push_front<span class="Delimiter">(</span>*p<span class="Delimiter">);</span>
+<span id="L216" class="LineNr">216 </span>  <span class="Conceal">¦</span> <span class="Comment">// ensure that the presence of a continuation keeps its stack frames from being reclaimed</span>
+<span id="L217" class="LineNr">217 </span>  <span class="Conceal">¦</span> <a href='036refcount.cc.html#L50'>increment_refcount</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>front<span class="Delimiter">().</span>default_space<span class="Delimiter">);</span>
+<span id="L218" class="LineNr">218 </span>  <span class="Delimiter">}</span>
+<span id="L219" class="LineNr">219 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L220" class="LineNr">220 </span>  <span class="Conceal">¦</span> Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth += <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>new_frames<span class="Delimiter">);</span>
+<span id="L221" class="LineNr">221 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;calling delimited continuation; growing callstack depth to &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L222" class="LineNr">222 </span>  <span class="Conceal">¦</span> assert<span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt; <span class="Constant">9000</span><span class="Delimiter">);</span>  <span class="Comment">// 9998-101 plus cushion</span>
+<span id="L223" class="LineNr">223 </span>  <span class="Delimiter">}</span>
+<span id="L224" class="LineNr">224 </span>  <span class="Comment">// no call housekeeping; continuations don't support next-ingredient</span>
+<span id="L225" class="LineNr">225 </span>  copy<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">drop continuation</span><span class="Comment">*/</span>++ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span>begin<span class="Delimiter">()));</span>
+<span id="L226" class="LineNr">226 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// record results of resuming 'return-continuation-until-mark' instruction</span>
+<span id="L227" class="LineNr">227 </span><span class="Delimiter">}</span>
+<span id="L228" class="LineNr">228 </span>
+<span id="L229" class="LineNr">229 </span><span class="Delimiter">:(scenario continuations_can_return_values)</span>
+<span id="L230" class="LineNr">230 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L231" class="LineNr">231 </span>  local-scope
+<span id="L232" class="LineNr">232 </span>  <span class="Normal">k</span>:continuation<span class="Delimiter">,</span> <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>call-with-continuation-mark f
+<span id="L233" class="LineNr">233 </span>]
+<span id="L234" class="LineNr">234 </span><span class="muRecipe">def</span> f [
 <span id="L235" class="LineNr">235 </span>  local-scope
-<span id="L236" class="LineNr">236 </span>  <span class="Normal">k</span>:continuation<span class="Special"> &lt;- </span>call-with-continuation-mark f
-<span id="L237" class="LineNr">237 </span>  call k
-<span id="L238" class="LineNr">238 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L239" class="LineNr">239 </span>]
-<span id="L240" class="LineNr">240 </span><span class="muRecipe">def</span> f [
-<span id="L241" class="LineNr">241 </span>  local-scope
-<span id="L242" class="LineNr">242 </span>  g
-<span id="L243" class="LineNr">243 </span>]
-<span id="L244" class="LineNr">244 </span><span class="muRecipe">def</span> g [
-<span id="L245" class="LineNr">245 </span>  local-scope
-<span id="L246" class="LineNr">246 </span>  <span class="Identifier">return</span>-continuation-until-mark
-<span id="L247" class="LineNr">247 </span>  add <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">1</span>
-<span id="L248" class="LineNr">248 </span>]
-<span id="L249" class="LineNr">249 </span><span class="Comment"># entering main</span>
-<span id="L250" class="LineNr">250 </span><span class="traceContains">+mem: new alloc: 1000</span>
-<span id="L251" class="LineNr">251 </span><span class="traceContains">+run: {k: &quot;continuation&quot;} &lt;- call-with-continuation-mark {f: &quot;recipe-literal&quot;}</span>
-<span id="L252" class="LineNr">252 </span><span class="Comment"># entering f</span>
-<span id="L253" class="LineNr">253 </span><span class="traceContains">+mem: new alloc: 1004</span>
-<span id="L254" class="LineNr">254 </span><span class="Comment"># entering g</span>
-<span id="L255" class="LineNr">255 </span><span class="traceContains">+mem: new alloc: 1007</span>
-<span id="L256" class="LineNr">256 </span><span class="Comment"># return control to main</span>
-<span id="L257" class="LineNr">257 </span><span class="traceContains">+run: return-continuation-until-mark</span>
-<span id="L258" class="LineNr">258 </span><span class="Comment"># no allocs abandoned yet</span>
-<span id="L259" class="LineNr">259 </span><span class="Comment"># finish running main</span>
-<span id="L260" class="LineNr">260 </span><span class="traceContains">+run: call {k: &quot;continuation&quot;}</span>
-<span id="L261" class="LineNr">261 </span><span class="traceContains">+run: add {1: &quot;literal&quot;}, {1: &quot;literal&quot;}</span>
-<span id="L262" class="LineNr">262 </span><span class="traceContains">+run: return {34: &quot;literal&quot;}</span>
-<span id="L263" class="LineNr">263 </span><span class="Comment"># now k is reclaimed</span>
-<span id="L264" class="LineNr">264 </span><span class="traceContains">+mem: trying to reclaim local k:continuation</span>
-<span id="L265" class="LineNr">265 </span><span class="Comment"># at this point all allocs in the continuation are abandoned</span>
-<span id="L266" class="LineNr">266 </span><span class="traceContains">+mem: automatically abandoning 1007</span>
-<span id="L267" class="LineNr">267 </span><span class="traceContains">+mem: automatically abandoning 1004</span>
-<span id="L268" class="LineNr">268 </span><span class="Comment"># finally the alloc for main is abandoned</span>
-<span id="L269" class="LineNr">269 </span><span class="traceContains">+mem: automatically abandoning 1000</span>
-<span id="L270" class="LineNr">270 </span>
-<span id="L271" class="LineNr">271 </span><span class="Delimiter">:(after &quot;Begin Decrement Refcounts(canonized_x)&quot;)</span>
-<span id="L272" class="LineNr">272 </span><span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_continuation<span class="Delimiter">(</span>canonized_x<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L273" class="LineNr">273 </span>  <span class="Normal">int</span> continuation_id = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> canonized_x<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
-<span id="L274" class="LineNr">274 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;reclaiming continuation &quot;</span> &lt;&lt; continuation_id &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
-<span id="L275" class="LineNr">275 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>continuation_id == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L276" class="LineNr">276 </span>  <span class="Normal">const</span> call_stack&amp; continuation_calls = get<span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">,</span> continuation_id<span class="Delimiter">);</span>
-<span id="L277" class="LineNr">277 </span>  <span class="Comment">// temporarily push the stack frames for the continuation one last time on to the call stack</span>
-<span id="L278" class="LineNr">278 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::const_reverse_iterator p = continuation_calls<span class="Delimiter">.</span>rbegin<span class="Delimiter">();</span> p != continuation_calls<span class="Delimiter">.</span>rend<span class="Delimiter">();</span> ++p<span class="Delimiter">)</span>
-<span id="L279" class="LineNr">279 </span>  <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>push_front<span class="Delimiter">(</span>*p<span class="Delimiter">);</span>
-<span id="L280" class="LineNr">280 </span>  <span class="Comment">// reclaim their spaces while popping them</span>
-<span id="L281" class="LineNr">281 </span>  <span class="Comment">// (because reclaim_default_space() relies on the default-space being reclaimed being at the top of the stack)</span>
-<span id="L282" class="LineNr">282 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::const_iterator p = continuation_calls<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != continuation_calls<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L283" class="LineNr">283 </span>  <span class="Conceal">¦</span> <a href='043space.cc.html#L244'>reclaim_default_space</a><span class="Delimiter">();</span>
-<span id="L284" class="LineNr">284 </span>  <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>pop_front<span class="Delimiter">();</span>
-<span id="L285" class="LineNr">285 </span>  <span class="Delimiter">}</span>
-<span id="L286" class="LineNr">286 </span>  <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L287" class="LineNr">287 </span><span class="Delimiter">}</span>
-<span id="L288" class="LineNr">288 </span>
-<span id="L289" class="LineNr">289 </span><span class="Delimiter">:(code)</span>
-<span id="L290" class="LineNr">290 </span><span class="Normal">bool</span> is_mu_continuation<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L291" class="LineNr">291 </span>  canonize_type<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
-<span id="L292" class="LineNr">292 </span>  <span class="Identifier">return</span> x<span class="Delimiter">.</span>type &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;continuation&quot;</span><span class="Delimiter">);</span>
-<span id="L293" class="LineNr">293 </span><span class="Delimiter">}</span>
-<span id="L294" class="LineNr">294 </span>
-<span id="L295" class="LineNr">295 </span><span class="Delimiter">:(scenario continuations_can_return_values)</span>
-<span id="L296" class="LineNr">296 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L297" class="LineNr">297 </span>  local-scope
-<span id="L298" class="LineNr">298 </span>  <span class="Normal">k</span>:continuation<span class="Delimiter">,</span> <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>call-with-continuation-mark f
-<span id="L299" class="LineNr">299 </span>]
-<span id="L300" class="LineNr">300 </span><span class="muRecipe">def</span> f [
-<span id="L301" class="LineNr">301 </span>  local-scope
-<span id="L302" class="LineNr">302 </span>  g
-<span id="L303" class="LineNr">303 </span>]
-<span id="L304" class="LineNr">304 </span><span class="muRecipe">def</span> g [
-<span id="L305" class="LineNr">305 </span>  local-scope
-<span id="L306" class="LineNr">306 </span>  <span class="Identifier">return</span>-continuation-until-mark <span class="Constant">34</span>
-<span id="L307" class="LineNr">307 </span>  stash [continuation called]
-<span id="L308" class="LineNr">308 </span>]
-<span id="L309" class="LineNr">309 </span><span class="Comment"># entering main</span>
-<span id="L310" class="LineNr">310 </span><span class="traceContains">+mem: new alloc: 1000</span>
-<span id="L311" class="LineNr">311 </span><span class="traceContains">+run: {k: &quot;continuation&quot;}, {1: &quot;number&quot;, &quot;raw&quot;: ()} &lt;- call-with-continuation-mark {f: &quot;recipe-literal&quot;}</span>
-<span id="L312" class="LineNr">312 </span><span class="Comment"># entering f</span>
-<span id="L313" class="LineNr">313 </span><span class="traceContains">+mem: new alloc: 1004</span>
-<span id="L314" class="LineNr">314 </span><span class="Comment"># entering g</span>
-<span id="L315" class="LineNr">315 </span><span class="traceContains">+mem: new alloc: 1007</span>
-<span id="L316" class="LineNr">316 </span><span class="Comment"># return control to main</span>
-<span id="L317" class="LineNr">317 </span><span class="traceContains">+run: return-continuation-until-mark {34: &quot;literal&quot;}</span>
-<span id="L318" class="LineNr">318 </span><span class="Comment"># no allocs abandoned yet</span>
-<span id="L319" class="LineNr">319 </span><span class="traceContains">+mem: storing 34 in location 1</span>
-<span id="L320" class="LineNr">320 </span><span class="Comment"># end of main</span>
-<span id="L321" class="LineNr">321 </span><span class="Comment"># make sure no memory leaks..</span>
-<span id="L322" class="LineNr">322 </span><span class="traceContains">+mem: trying to reclaim local k:continuation</span>
-<span id="L323" class="LineNr">323 </span><span class="traceContains">+mem: automatically abandoning 1007</span>
-<span id="L324" class="LineNr">324 </span><span class="traceContains">+mem: automatically abandoning 1004</span>
-<span id="L325" class="LineNr">325 </span><span class="traceContains">+mem: automatically abandoning 1000</span>
-<span id="L326" class="LineNr">326 </span><span class="Comment"># ..even though we never called the continuation</span>
-<span id="L327" class="LineNr">327 </span><span class="traceAbsent">-app: continuation called</span>
+<span id="L236" class="LineNr">236 </span>  g
+<span id="L237" class="LineNr">237 </span>]
+<span id="L238" class="LineNr">238 </span><span class="muRecipe">def</span> g [
+<span id="L239" class="LineNr">239 </span>  local-scope
+<span id="L240" class="LineNr">240 </span>  <span class="Identifier">return</span>-continuation-until-mark <span class="Constant">34</span>
+<span id="L241" class="LineNr">241 </span>  stash [continuation called]
+<span id="L242" class="LineNr">242 </span>]
+<span id="L243" class="LineNr">243 </span><span class="Comment"># entering main</span>
+<span id="L244" class="LineNr">244 </span><span class="traceContains">+mem: new alloc: 1000</span>
+<span id="L245" class="LineNr">245 </span><span class="traceContains">+run: {k: &quot;continuation&quot;}, {1: &quot;number&quot;, &quot;raw&quot;: ()} &lt;- call-with-continuation-mark {f: &quot;recipe-literal&quot;}</span>
+<span id="L246" class="LineNr">246 </span><span class="Comment"># entering f</span>
+<span id="L247" class="LineNr">247 </span><span class="traceContains">+mem: new alloc: 1004</span>
+<span id="L248" class="LineNr">248 </span><span class="Comment"># entering g</span>
+<span id="L249" class="LineNr">249 </span><span class="traceContains">+mem: new alloc: 1007</span>
+<span id="L250" class="LineNr">250 </span><span class="Comment"># return control to main</span>
+<span id="L251" class="LineNr">251 </span><span class="traceContains">+run: return-continuation-until-mark {34: &quot;literal&quot;}</span>
+<span id="L252" class="LineNr">252 </span><span class="Comment"># no allocs abandoned yet</span>
+<span id="L253" class="LineNr">253 </span><span class="traceContains">+mem: storing 34 in location 1</span>
+<span id="L254" class="LineNr">254 </span><span class="Comment"># end of main</span>
+<span id="L255" class="LineNr">255 </span><span class="Comment"># make sure no memory leaks..</span>
+<span id="L256" class="LineNr">256 </span><span class="traceContains">+mem: trying to reclaim local k:continuation</span>
+<span id="L257" class="LineNr">257 </span><span class="traceContains">+mem: automatically abandoning 1007</span>
+<span id="L258" class="LineNr">258 </span><span class="traceContains">+mem: automatically abandoning 1004</span>
+<span id="L259" class="LineNr">259 </span><span class="traceContains">+mem: automatically abandoning 1000</span>
+<span id="L260" class="LineNr">260 </span><span class="Comment"># ..even though we never called the continuation</span>
+<span id="L261" class="LineNr">261 </span><span class="traceAbsent">-app: continuation called</span>
+<span id="L262" class="LineNr">262 </span>
+<span id="L263" class="LineNr">263 </span><span class="Comment">//: Ensure that the presence of a continuation keeps its stack frames from being reclaimed.</span>
+<span id="L264" class="LineNr">264 </span>
+<span id="L265" class="LineNr">265 </span><span class="Delimiter">:(scenario continuations_preserve_local_scopes)</span>
+<span id="L266" class="LineNr">266 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L267" class="LineNr">267 </span>  local-scope
+<span id="L268" class="LineNr">268 </span>  <span class="Normal">k</span>:continuation<span class="Special"> &lt;- </span>call-with-continuation-mark f
+<span id="L269" class="LineNr">269 </span>  call k
+<span id="L270" class="LineNr">270 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L271" class="LineNr">271 </span>]
+<span id="L272" class="LineNr">272 </span><span class="muRecipe">def</span> f [
+<span id="L273" class="LineNr">273 </span>  local-scope
+<span id="L274" class="LineNr">274 </span>  g
+<span id="L275" class="LineNr">275 </span>]
+<span id="L276" class="LineNr">276 </span><span class="muRecipe">def</span> g [
+<span id="L277" class="LineNr">277 </span>  local-scope
+<span id="L278" class="LineNr">278 </span>  <span class="Identifier">return</span>-continuation-until-mark
+<span id="L279" class="LineNr">279 </span>  add <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">1</span>
+<span id="L280" class="LineNr">280 </span>]
+<span id="L281" class="LineNr">281 </span><span class="Comment"># entering main</span>
+<span id="L282" class="LineNr">282 </span><span class="traceContains">+mem: new alloc: 1000</span>
+<span id="L283" class="LineNr">283 </span><span class="traceContains">+run: {k: &quot;continuation&quot;} &lt;- call-with-continuation-mark {f: &quot;recipe-literal&quot;}</span>
+<span id="L284" class="LineNr">284 </span><span class="Comment"># entering f</span>
+<span id="L285" class="LineNr">285 </span><span class="traceContains">+mem: new alloc: 1004</span>
+<span id="L286" class="LineNr">286 </span><span class="Comment"># entering g</span>
+<span id="L287" class="LineNr">287 </span><span class="traceContains">+mem: new alloc: 1007</span>
+<span id="L288" class="LineNr">288 </span><span class="Comment"># return control to main</span>
+<span id="L289" class="LineNr">289 </span><span class="traceContains">+run: return-continuation-until-mark</span>
+<span id="L290" class="LineNr">290 </span><span class="Comment"># no allocs abandoned yet</span>
+<span id="L291" class="LineNr">291 </span><span class="Comment"># finish running main</span>
+<span id="L292" class="LineNr">292 </span><span class="traceContains">+run: call {k: &quot;continuation&quot;}</span>
+<span id="L293" class="LineNr">293 </span><span class="traceContains">+run: add {1: &quot;literal&quot;}, {1: &quot;literal&quot;}</span>
+<span id="L294" class="LineNr">294 </span><span class="traceContains">+run: return {34: &quot;literal&quot;}</span>
+<span id="L295" class="LineNr">295 </span><span class="Comment"># now k is reclaimed</span>
+<span id="L296" class="LineNr">296 </span><span class="traceContains">+mem: trying to reclaim local k:continuation</span>
+<span id="L297" class="LineNr">297 </span><span class="Comment"># at this point all allocs in the continuation are abandoned</span>
+<span id="L298" class="LineNr">298 </span><span class="traceContains">+mem: automatically abandoning 1007</span>
+<span id="L299" class="LineNr">299 </span><span class="traceContains">+mem: automatically abandoning 1004</span>
+<span id="L300" class="LineNr">300 </span><span class="Comment"># finally the alloc for main is abandoned</span>
+<span id="L301" class="LineNr">301 </span><span class="traceContains">+mem: automatically abandoning 1000</span>
+<span id="L302" class="LineNr">302 </span>
+<span id="L303" class="LineNr">303 </span><span class="Delimiter">:(before &quot;End Increment Refcounts(canonized_x)&quot;)</span>
+<span id="L304" class="LineNr">304 </span><span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_continuation<span class="Delimiter">(</span>canonized_x<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L305" class="LineNr">305 </span>  <span class="Normal">int</span> continuation_id = data<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L306" class="LineNr">306 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>continuation_id == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L307" class="LineNr">307 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">,</span> continuation_id<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L308" class="LineNr">308 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;missing delimited continuation: &quot;</span> &lt;&lt; canonized_x<span class="Delimiter">.</span>name &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L309" class="LineNr">309 </span>  <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L310" class="LineNr">310 </span>  <span class="Delimiter">}</span>
+<span id="L311" class="LineNr">311 </span>  delimited_continuation&amp; curr = get<span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">,</span> continuation_id<span class="Delimiter">);</span>
+<span id="L312" class="LineNr">312 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;incrementing refcount of continuation &quot;</span> &lt;&lt; continuation_id &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; curr<span class="Delimiter">.</span>nrefs &lt;&lt; <span class="Constant">&quot; -&gt; &quot;</span> &lt;&lt; <span class="Constant">1</span>+curr<span class="Delimiter">.</span>nrefs &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L313" class="LineNr">313 </span>  ++curr<span class="Delimiter">.</span>nrefs<span class="Delimiter">;</span>
+<span id="L314" class="LineNr">314 </span>  <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L315" class="LineNr">315 </span><span class="Delimiter">}</span>
+<span id="L316" class="LineNr">316 </span>
+<span id="L317" class="LineNr">317 </span><span class="Delimiter">:(before &quot;End Decrement Refcounts(canonized_x)&quot;)</span>
+<span id="L318" class="LineNr">318 </span><span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_continuation<span class="Delimiter">(</span>canonized_x<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L319" class="LineNr">319 </span>  <span class="Normal">int</span> continuation_id = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> canonized_x<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
+<span id="L320" class="LineNr">320 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>continuation_id == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L321" class="LineNr">321 </span>  delimited_continuation&amp; curr = get<span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">,</span> continuation_id<span class="Delimiter">);</span>
+<span id="L322" class="LineNr">322 </span>  assert<span class="Delimiter">(</span>curr<span class="Delimiter">.</span>nrefs &gt; <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L323" class="LineNr">323 </span>  --curr<span class="Delimiter">.</span>nrefs<span class="Delimiter">;</span>
+<span id="L324" class="LineNr">324 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;decrementing refcount of continuation &quot;</span> &lt;&lt; continuation_id &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; <span class="Constant">1</span>+curr<span class="Delimiter">.</span>nrefs &lt;&lt; <span class="Constant">&quot; -&gt; &quot;</span> &lt;&lt; curr<span class="Delimiter">.</span>nrefs &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L325" class="LineNr">325 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>nrefs &gt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L326" class="LineNr">326 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;reclaiming continuation &quot;</span> &lt;&lt; continuation_id &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L327" class="LineNr">327 </span>  <span class="Comment">// temporarily push the stack frames for the continuation to the call stack before reclaiming their spaces</span>
+<span id="L328" class="LineNr">328 </span>  <span class="Comment">// (because reclaim_default_space() relies on the default-space being reclaimed being at the top of the stack)</span>
+<span id="L329" class="LineNr">329 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::const_iterator p = curr<span class="Delimiter">.</span>frames<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != curr<span class="Delimiter">.</span>frames<span class="Delimiter">.</span><a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L330" class="LineNr">330 </span>  <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>push_front<span class="Delimiter">(</span>*p<span class="Delimiter">);</span>
+<span id="L331" class="LineNr">331 </span>  <span class="Conceal">¦</span> <a href='043space.cc.html#L244'>reclaim_default_space</a><span class="Delimiter">();</span>
+<span id="L332" class="LineNr">332 </span>  <span class="Conceal">¦</span> Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>pop_front<span class="Delimiter">();</span>
+<span id="L333" class="LineNr">333 </span>  <span class="Delimiter">}</span>
+<span id="L334" class="LineNr">334 </span>  Delimited_continuation<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>continuation_id<span class="Delimiter">);</span>
+<span id="L335" class="LineNr">335 </span>  <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L336" class="LineNr">336 </span><span class="Delimiter">}</span>
+<span id="L337" class="LineNr">337 </span>
+<span id="L338" class="LineNr">338 </span><span class="Delimiter">:(code)</span>
+<span id="L339" class="LineNr">339 </span><span class="Normal">bool</span> is_mu_continuation<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L340" class="LineNr">340 </span>  canonize_type<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
+<span id="L341" class="LineNr">341 </span>  <span class="Identifier">return</span> x<span class="Delimiter">.</span>type &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;continuation&quot;</span><span class="Delimiter">);</span>
+<span id="L342" class="LineNr">342 </span><span class="Delimiter">}</span>
+<span id="L343" class="LineNr">343 </span>
+<span id="L344" class="LineNr">344 </span><span class="Delimiter">:(scenario continuations_can_be_copied)</span>
+<span id="L345" class="LineNr">345 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L346" class="LineNr">346 </span>  local-scope
+<span id="L347" class="LineNr">347 </span>  <span class="Normal">k</span>:continuation<span class="Special"> &lt;- </span>call-with-continuation-mark f
+<span id="L348" class="LineNr">348 </span>  <span class="Normal">k2</span>:continuation<span class="Special"> &lt;- </span>copy k
+<span id="L349" class="LineNr">349 </span>  <span class="Comment"># reclaiming k and k2 shouldn't delete f's local scope twice</span>
+<span id="L350" class="LineNr">350 </span>]
+<span id="L351" class="LineNr">351 </span><span class="muRecipe">def</span> f [
+<span id="L352" class="LineNr">352 </span>  local-scope
+<span id="L353" class="LineNr">353 </span>  load-ingredients
+<span id="L354" class="LineNr">354 </span>  <span class="Identifier">return</span>-continuation-until-mark
+<span id="L355" class="LineNr">355 </span>  <span class="Identifier">return</span> <span class="Constant">0</span>
+<span id="L356" class="LineNr">356 </span>]
+<span id="L357" class="LineNr">357 </span>$error: <span class="Constant">0</span>
 </pre>
 </body>
 </html>
diff --git a/html/081print.mu.html b/html/081print.mu.html
index eb9b8867..253d913e 100644
--- a/html/081print.mu.html
+++ b/html/081print.mu.html
@@ -94,7 +94,7 @@ if ('onhashchange' in window) {
 <span id="L31" class="LineNr"> 31 </span>
 <span id="L32" class="LineNr"> 32 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L32'>new-fake-screen</a> w:num, h:num<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L33" class="LineNr"> 33 </span>  <span class="Constant">local-scope</span>
-<span id="L34" class="LineNr"> 34 </span>  <span class="Constant">load-ingredients</span>
+<span id="L34" class="LineNr"> 34 </span>  <span class="Constant">load-inputs</span>
 <span id="L35" class="LineNr"> 35 </span>  result <span class="Special">&lt;-</span> new <span class="Constant"><a href='081print.mu.html#L16'>screen</a>:type</span>
 <span id="L36" class="LineNr"> 36 </span>  non-zero-width?:bool <span class="Special">&lt;-</span> greater-than w,<span class="Constant"> 0</span>
 <span id="L37" class="LineNr"> 37 </span>  assert non-zero-width?, <span class="Constant">[screen can't have zero width]</span>
@@ -108,7 +108,7 @@ if ('onhashchange' in window) {
 <span id="L45" class="LineNr"> 45 </span>
 <span id="L46" class="LineNr"> 46 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L46'>clear-screen</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L47" class="LineNr"> 47 </span>  <span class="Constant">local-scope</span>
-<span id="L48" class="LineNr"> 48 </span>  <span class="Constant">load-ingredients</span>
+<span id="L48" class="LineNr"> 48 </span>  <span class="Constant">load-inputs</span>
 <span id="L49" class="LineNr"> 49 </span><span class="CommentedCode">#?   stash [clear-screen]</span>
 <span id="L50" class="LineNr"> 50 </span>  <span class="Delimiter">{</span>
 <span id="L51" class="LineNr"> 51 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='081print.mu.html#L16'>screen</a>
@@ -136,7 +136,7 @@ if ('onhashchange' in window) {
 <span id="L73" class="LineNr"> 73 </span>
 <span id="L74" class="LineNr"> 74 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L74'>fake-screen-is-empty?</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L75" class="LineNr"> 75 </span>  <span class="Constant">local-scope</span>
-<span id="L76" class="LineNr"> 76 </span>  <span class="Constant">load-ingredients</span>
+<span id="L76" class="LineNr"> 76 </span>  <span class="Constant">load-inputs</span>
 <span id="L77" class="LineNr"> 77 </span><span class="CommentedCode">#?   stash [fake-screen-is-empty?]</span>
 <span id="L78" class="LineNr"> 78 </span>  <span class="muControl">return-unless</span> <a href='081print.mu.html#L16'>screen</a>, <span class="Constant">1/true</span>  <span class="Comment"># do nothing for real screens</span>
 <span id="L79" class="LineNr"> 79 </span>  buf:&amp;:@:<a href='081print.mu.html#L27'>screen-cell</a> <span class="Special">&lt;-</span> get *screen, <span class="Constant">data:offset</span>
@@ -157,14 +157,14 @@ if ('onhashchange' in window) {
 <span id="L94" class="LineNr"> 94 </span>
 <span id="L95" class="LineNr"> 95 </span><span class="muRecipe">def</span> print <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, c:char<span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L96" class="LineNr"> 96 </span>  <span class="Constant">local-scope</span>
-<span id="L97" class="LineNr"> 97 </span>  <span class="Constant">load-ingredients</span>
-<span id="L98" class="LineNr"> 98 </span>  color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L97" class="LineNr"> 97 </span>  <span class="Constant">load-inputs</span>
+<span id="L98" class="LineNr"> 98 </span>  color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L99" class="LineNr"> 99 </span>  <span class="Delimiter">{</span>
 <span id="L100" class="LineNr">100 </span>  <span class="Conceal">¦</span> <span class="Comment"># default color to white</span>
 <span id="L101" class="LineNr">101 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> color-found?
 <span id="L102" class="LineNr">102 </span>  <span class="Conceal">¦</span> color <span class="Special">&lt;-</span> copy <span class="Constant">7/white</span>
 <span id="L103" class="LineNr">103 </span>  <span class="Delimiter">}</span>
-<span id="L104" class="LineNr">104 </span>  bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L104" class="LineNr">104 </span>  bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L105" class="LineNr">105 </span>  <span class="Delimiter">{</span>
 <span id="L106" class="LineNr">106 </span>  <span class="Conceal">¦</span> <span class="Comment"># default bg-color to black</span>
 <span id="L107" class="LineNr">107 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> bg-color-found?
@@ -268,7 +268,7 @@ if ('onhashchange' in window) {
 <span id="L205" class="LineNr">205 </span>
 <span id="L206" class="LineNr">206 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L206'>cursor-down-on-fake-screen</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L207" class="LineNr">207 </span>  <span class="Constant">local-scope</span>
-<span id="L208" class="LineNr">208 </span>  <span class="Constant">load-ingredients</span>
+<span id="L208" class="LineNr">208 </span>  <span class="Constant">load-inputs</span>
 <span id="L209" class="LineNr">209 </span><span class="CommentedCode">#?   stash [cursor-down]</span>
 <span id="L210" class="LineNr">210 </span>  row:num <span class="Special">&lt;-</span> get *screen, <span class="Constant">cursor-row:offset</span>
 <span id="L211" class="LineNr">211 </span>  height:num <span class="Special">&lt;-</span> get *screen, <span class="Constant">num-rows:offset</span>
@@ -287,7 +287,7 @@ if ('onhashchange' in window) {
 <span id="L224" class="LineNr">224 </span>
 <span id="L225" class="LineNr">225 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L225'>scroll-fake-screen</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L226" class="LineNr">226 </span>  <span class="Constant">local-scope</span>
-<span id="L227" class="LineNr">227 </span>  <span class="Constant">load-ingredients</span>
+<span id="L227" class="LineNr">227 </span>  <span class="Constant">load-inputs</span>
 <span id="L228" class="LineNr">228 </span><span class="CommentedCode">#?   stash [scroll-fake-screen]</span>
 <span id="L229" class="LineNr">229 </span>  width:num <span class="Special">&lt;-</span> get *screen, <span class="Constant">num-columns:offset</span>
 <span id="L230" class="LineNr">230 </span>  height:num <span class="Special">&lt;-</span> get *screen, <span class="Constant">num-rows:offset</span>
@@ -315,7 +315,7 @@ if ('onhashchange' in window) {
 <span id="L252" class="LineNr">252 </span><span class="Comment"># while accounting for scrolling (sliding top-idx)</span>
 <span id="L253" class="LineNr">253 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L253'>data-index</a> row:num, column:num, width:num, height:num, top-idx:num<span class="muRecipe"> -&gt; </span>result:num [
 <span id="L254" class="LineNr">254 </span>  <span class="Constant">local-scope</span>
-<span id="L255" class="LineNr">255 </span>  <span class="Constant">load-ingredients</span>
+<span id="L255" class="LineNr">255 </span>  <span class="Constant">load-inputs</span>
 <span id="L256" class="LineNr">256 </span>  <span class="Delimiter">{</span>
 <span id="L257" class="LineNr">257 </span>  <span class="Conceal">¦</span> overflow?:bool <span class="Special">&lt;-</span> greater-or-equal row, height
 <span id="L258" class="LineNr">258 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> overflow?
@@ -571,13 +571,13 @@ if ('onhashchange' in window) {
 <span id="L508" class="LineNr">508 </span><span class="Comment"># these helpers help check for scrolling at development time</span>
 <span id="L509" class="LineNr">509 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L509'>save-top-idx</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>result:num [
 <span id="L510" class="LineNr">510 </span>  <span class="Constant">local-scope</span>
-<span id="L511" class="LineNr">511 </span>  <span class="Constant">load-ingredients</span>
+<span id="L511" class="LineNr">511 </span>  <span class="Constant">load-inputs</span>
 <span id="L512" class="LineNr">512 </span>  <span class="muControl">return-unless</span> <a href='081print.mu.html#L16'>screen</a>,<span class="Constant"> 0</span>  <span class="Comment"># check is only for fake screens</span>
 <span id="L513" class="LineNr">513 </span>  result <span class="Special">&lt;-</span> get *screen, <span class="Constant">top-idx:offset</span>
 <span id="L514" class="LineNr">514 </span>]
 <span id="L515" class="LineNr">515 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L515'>assert-no-scroll</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, old-top-idx:num [
 <span id="L516" class="LineNr">516 </span>  <span class="Constant">local-scope</span>
-<span id="L517" class="LineNr">517 </span>  <span class="Constant">load-ingredients</span>
+<span id="L517" class="LineNr">517 </span>  <span class="Constant">load-inputs</span>
 <span id="L518" class="LineNr">518 </span>  <span class="muControl">return-unless</span> <a href='081print.mu.html#L16'>screen</a>
 <span id="L519" class="LineNr">519 </span>  new-top-idx:num <span class="Special">&lt;-</span> get *screen, <span class="Constant">top-idx:offset</span>
 <span id="L520" class="LineNr">520 </span>  no-scroll?:bool <span class="Special">&lt;-</span> equal old-top-idx, new-top-idx
@@ -586,7 +586,7 @@ if ('onhashchange' in window) {
 <span id="L523" class="LineNr">523 </span>
 <span id="L524" class="LineNr">524 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L524'>clear-line</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L525" class="LineNr">525 </span>  <span class="Constant">local-scope</span>
-<span id="L526" class="LineNr">526 </span>  <span class="Constant">load-ingredients</span>
+<span id="L526" class="LineNr">526 </span>  <span class="Constant">load-inputs</span>
 <span id="L527" class="LineNr">527 </span><span class="CommentedCode">#?   stash [clear-line]</span>
 <span id="L528" class="LineNr">528 </span>  space:char <span class="Special">&lt;-</span> copy <span class="Constant">0/nul</span>
 <span id="L529" class="LineNr">529 </span>  <span class="Delimiter">{</span>
@@ -615,14 +615,14 @@ if ('onhashchange' in window) {
 <span id="L552" class="LineNr">552 </span><span class="Comment"># only for non-scrolling apps</span>
 <span id="L553" class="LineNr">553 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L553'>clear-line-until</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, right:num/inclusive<span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L554" class="LineNr">554 </span>  <span class="Constant">local-scope</span>
-<span id="L555" class="LineNr">555 </span>  <span class="Constant">load-ingredients</span>
+<span id="L555" class="LineNr">555 </span>  <span class="Constant">load-inputs</span>
 <span id="L556" class="LineNr">556 </span>  row:num, column:num <span class="Special">&lt;-</span> <a href='081print.mu.html#L577'>cursor-position</a> <a href='081print.mu.html#L16'>screen</a>
 <span id="L557" class="LineNr">557 </span><span class="CommentedCode">#?   stash [clear-line-until] row column</span>
 <span id="L558" class="LineNr">558 </span>  height:num <span class="Special">&lt;-</span> <a href='081print.mu.html#L782'>screen-height</a> <a href='081print.mu.html#L16'>screen</a>
 <span id="L559" class="LineNr">559 </span>  past-bottom?:bool <span class="Special">&lt;-</span> greater-or-equal row, height
 <span id="L560" class="LineNr">560 </span>  <span class="muControl">return-if</span> past-bottom?
 <span id="L561" class="LineNr">561 </span>  space:char <span class="Special">&lt;-</span> copy <span class="Constant">32/space</span>
-<span id="L562" class="LineNr">562 </span>  bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L562" class="LineNr">562 </span>  bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L563" class="LineNr">563 </span>  <span class="Delimiter">{</span>
 <span id="L564" class="LineNr">564 </span>  <span class="Conceal">¦</span> <span class="Comment"># default bg-color to black</span>
 <span id="L565" class="LineNr">565 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> bg-color-found?
@@ -639,7 +639,7 @@ if ('onhashchange' in window) {
 <span id="L576" class="LineNr">576 </span>
 <span id="L577" class="LineNr">577 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L577'>cursor-position</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>row:num, column:num [
 <span id="L578" class="LineNr">578 </span>  <span class="Constant">local-scope</span>
-<span id="L579" class="LineNr">579 </span>  <span class="Constant">load-ingredients</span>
+<span id="L579" class="LineNr">579 </span>  <span class="Constant">load-inputs</span>
 <span id="L580" class="LineNr">580 </span>  <span class="Delimiter">{</span>
 <span id="L581" class="LineNr">581 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='081print.mu.html#L16'>screen</a>
 <span id="L582" class="LineNr">582 </span>  <span class="Conceal">¦</span> <span class="Comment"># real screen</span>
@@ -653,7 +653,7 @@ if ('onhashchange' in window) {
 <span id="L590" class="LineNr">590 </span>
 <span id="L591" class="LineNr">591 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L591'>move-cursor</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, new-row:num, new-column:num<span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L592" class="LineNr">592 </span>  <span class="Constant">local-scope</span>
-<span id="L593" class="LineNr">593 </span>  <span class="Constant">load-ingredients</span>
+<span id="L593" class="LineNr">593 </span>  <span class="Constant">load-inputs</span>
 <span id="L594" class="LineNr">594 </span><span class="CommentedCode">#?   stash [move-cursor] new-row new-column</span>
 <span id="L595" class="LineNr">595 </span>  <span class="Delimiter">{</span>
 <span id="L596" class="LineNr">596 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='081print.mu.html#L16'>screen</a>
@@ -707,7 +707,7 @@ if ('onhashchange' in window) {
 <span id="L644" class="LineNr">644 </span>
 <span id="L645" class="LineNr">645 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L645'>cursor-down</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L646" class="LineNr">646 </span>  <span class="Constant">local-scope</span>
-<span id="L647" class="LineNr">647 </span>  <span class="Constant">load-ingredients</span>
+<span id="L647" class="LineNr">647 </span>  <span class="Constant">load-inputs</span>
 <span id="L648" class="LineNr">648 </span><span class="CommentedCode">#?   stash [cursor-down]</span>
 <span id="L649" class="LineNr">649 </span>  <span class="Delimiter">{</span>
 <span id="L650" class="LineNr">650 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='081print.mu.html#L16'>screen</a>
@@ -750,7 +750,7 @@ if ('onhashchange' in window) {
 <span id="L687" class="LineNr">687 </span>
 <span id="L688" class="LineNr">688 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L688'>cursor-up</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L689" class="LineNr">689 </span>  <span class="Constant">local-scope</span>
-<span id="L690" class="LineNr">690 </span>  <span class="Constant">load-ingredients</span>
+<span id="L690" class="LineNr">690 </span>  <span class="Constant">load-inputs</span>
 <span id="L691" class="LineNr">691 </span><span class="CommentedCode">#?   stash [cursor-up]</span>
 <span id="L692" class="LineNr">692 </span>  <span class="Delimiter">{</span>
 <span id="L693" class="LineNr">693 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='081print.mu.html#L16'>screen</a>
@@ -768,7 +768,7 @@ if ('onhashchange' in window) {
 <span id="L705" class="LineNr">705 </span>
 <span id="L706" class="LineNr">706 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L706'>cursor-right</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L707" class="LineNr">707 </span>  <span class="Constant">local-scope</span>
-<span id="L708" class="LineNr">708 </span>  <span class="Constant">load-ingredients</span>
+<span id="L708" class="LineNr">708 </span>  <span class="Constant">load-inputs</span>
 <span id="L709" class="LineNr">709 </span><span class="CommentedCode">#?   stash [cursor-right]</span>
 <span id="L710" class="LineNr">710 </span>  <span class="Delimiter">{</span>
 <span id="L711" class="LineNr">711 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='081print.mu.html#L16'>screen</a>
@@ -788,7 +788,7 @@ if ('onhashchange' in window) {
 <span id="L725" class="LineNr">725 </span>
 <span id="L726" class="LineNr">726 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L726'>cursor-left</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L727" class="LineNr">727 </span>  <span class="Constant">local-scope</span>
-<span id="L728" class="LineNr">728 </span>  <span class="Constant">load-ingredients</span>
+<span id="L728" class="LineNr">728 </span>  <span class="Constant">load-inputs</span>
 <span id="L729" class="LineNr">729 </span><span class="CommentedCode">#?   stash [cursor-left]</span>
 <span id="L730" class="LineNr">730 </span>  <span class="Delimiter">{</span>
 <span id="L731" class="LineNr">731 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> <a href='081print.mu.html#L16'>screen</a>
@@ -806,7 +806,7 @@ if ('onhashchange' in window) {
 <span id="L743" class="LineNr">743 </span>
 <span id="L744" class="LineNr">744 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L744'>cursor-to-start-of-line</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L745" class="LineNr">745 </span>  <span class="Constant">local-scope</span>
-<span id="L746" class="LineNr">746 </span>  <span class="Constant">load-ingredients</span>
+<span id="L746" class="LineNr">746 </span>  <span class="Constant">load-inputs</span>
 <span id="L747" class="LineNr">747 </span><span class="CommentedCode">#?   stash [cursor-to-start-of-line]</span>
 <span id="L748" class="LineNr">748 </span>  row:num <span class="Special">&lt;-</span> <a href='081print.mu.html#L577'>cursor-position</a> <a href='081print.mu.html#L16'>screen</a>
 <span id="L749" class="LineNr">749 </span>  <a href='081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='081print.mu.html#L591'>move-cursor</a> <a href='081print.mu.html#L16'>screen</a>, row, <span class="Constant">0/column</span>
@@ -814,7 +814,7 @@ if ('onhashchange' in window) {
 <span id="L751" class="LineNr">751 </span>
 <span id="L752" class="LineNr">752 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L752'>cursor-to-next-line</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L753" class="LineNr">753 </span>  <span class="Constant">local-scope</span>
-<span id="L754" class="LineNr">754 </span>  <span class="Constant">load-ingredients</span>
+<span id="L754" class="LineNr">754 </span>  <span class="Constant">load-inputs</span>
 <span id="L755" class="LineNr">755 </span><span class="CommentedCode">#?   stash [cursor-to-next-line]</span>
 <span id="L756" class="LineNr">756 </span>  <a href='081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='081print.mu.html#L645'>cursor-down</a> <a href='081print.mu.html#L16'>screen</a>
 <span id="L757" class="LineNr">757 </span>  <a href='081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='081print.mu.html#L744'>cursor-to-start-of-line</a> <a href='081print.mu.html#L16'>screen</a>
@@ -822,7 +822,7 @@ if ('onhashchange' in window) {
 <span id="L759" class="LineNr">759 </span>
 <span id="L760" class="LineNr">760 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L760'>move-cursor-to-column</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, column:num<span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L761" class="LineNr">761 </span>  <span class="Constant">local-scope</span>
-<span id="L762" class="LineNr">762 </span>  <span class="Constant">load-ingredients</span>
+<span id="L762" class="LineNr">762 </span>  <span class="Constant">load-inputs</span>
 <span id="L763" class="LineNr">763 </span>  row:num, _ <span class="Special">&lt;-</span> <a href='081print.mu.html#L577'>cursor-position</a> <a href='081print.mu.html#L16'>screen</a>
 <span id="L764" class="LineNr">764 </span><span class="CommentedCode">#?   stash [move-cursor-to-column] row</span>
 <span id="L765" class="LineNr">765 </span>  <a href='081print.mu.html#L591'>move-cursor</a> <a href='081print.mu.html#L16'>screen</a>, row, column
@@ -830,7 +830,7 @@ if ('onhashchange' in window) {
 <span id="L767" class="LineNr">767 </span>
 <span id="L768" class="LineNr">768 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L768'>screen-width</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>width:num [
 <span id="L769" class="LineNr">769 </span>  <span class="Constant">local-scope</span>
-<span id="L770" class="LineNr">770 </span>  <span class="Constant">load-ingredients</span>
+<span id="L770" class="LineNr">770 </span>  <span class="Constant">load-inputs</span>
 <span id="L771" class="LineNr">771 </span><span class="CommentedCode">#?   stash [screen-width]</span>
 <span id="L772" class="LineNr">772 </span>  <span class="Delimiter">{</span>
 <span id="L773" class="LineNr">773 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> <a href='081print.mu.html#L16'>screen</a>
@@ -844,7 +844,7 @@ if ('onhashchange' in window) {
 <span id="L781" class="LineNr">781 </span>
 <span id="L782" class="LineNr">782 </span><span class="muRecipe">def</span> <a href='081print.mu.html#L782'>screen-height</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>height:num [
 <span id="L783" class="LineNr">783 </span>  <span class="Constant">local-scope</span>
-<span id="L784" class="LineNr">784 </span>  <span class="Constant">load-ingredients</span>
+<span id="L784" class="LineNr">784 </span>  <span class="Constant">load-inputs</span>
 <span id="L785" class="LineNr">785 </span><span class="CommentedCode">#?   stash [screen-height]</span>
 <span id="L786" class="LineNr">786 </span>  <span class="Delimiter">{</span>
 <span id="L787" class="LineNr">787 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> <a href='081print.mu.html#L16'>screen</a>
@@ -858,14 +858,14 @@ if ('onhashchange' in window) {
 <span id="L795" class="LineNr">795 </span>
 <span id="L796" class="LineNr">796 </span><span class="muRecipe">def</span> print <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, s:text<span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L797" class="LineNr">797 </span>  <span class="Constant">local-scope</span>
-<span id="L798" class="LineNr">798 </span>  <span class="Constant">load-ingredients</span>
-<span id="L799" class="LineNr">799 </span>  color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L798" class="LineNr">798 </span>  <span class="Constant">load-inputs</span>
+<span id="L799" class="LineNr">799 </span>  color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L800" class="LineNr">800 </span>  <span class="Delimiter">{</span>
 <span id="L801" class="LineNr">801 </span>  <span class="Conceal">¦</span> <span class="Comment"># default color to white</span>
 <span id="L802" class="LineNr">802 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> color-found?
 <span id="L803" class="LineNr">803 </span>  <span class="Conceal">¦</span> color <span class="Special">&lt;-</span> copy <span class="Constant">7/white</span>
 <span id="L804" class="LineNr">804 </span>  <span class="Delimiter">}</span>
-<span id="L805" class="LineNr">805 </span>  bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L805" class="LineNr">805 </span>  bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L806" class="LineNr">806 </span>  <span class="Delimiter">{</span>
 <span id="L807" class="LineNr">807 </span>  <span class="Conceal">¦</span> <span class="Comment"># default bg-color to black</span>
 <span id="L808" class="LineNr">808 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> bg-color-found?
@@ -914,14 +914,14 @@ if ('onhashchange' in window) {
 <span id="L851" class="LineNr">851 </span>
 <span id="L852" class="LineNr">852 </span><span class="muRecipe">def</span> print <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, n:num<span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L853" class="LineNr">853 </span>  <span class="Constant">local-scope</span>
-<span id="L854" class="LineNr">854 </span>  <span class="Constant">load-ingredients</span>
-<span id="L855" class="LineNr">855 </span>  color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L854" class="LineNr">854 </span>  <span class="Constant">load-inputs</span>
+<span id="L855" class="LineNr">855 </span>  color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L856" class="LineNr">856 </span>  <span class="Delimiter">{</span>
 <span id="L857" class="LineNr">857 </span>  <span class="Conceal">¦</span> <span class="Comment"># default color to white</span>
 <span id="L858" class="LineNr">858 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> color-found?
 <span id="L859" class="LineNr">859 </span>  <span class="Conceal">¦</span> color <span class="Special">&lt;-</span> copy <span class="Constant">7/white</span>
 <span id="L860" class="LineNr">860 </span>  <span class="Delimiter">}</span>
-<span id="L861" class="LineNr">861 </span>  bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L861" class="LineNr">861 </span>  bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L862" class="LineNr">862 </span>  <span class="Delimiter">{</span>
 <span id="L863" class="LineNr">863 </span>  <span class="Conceal">¦</span> <span class="Comment"># default bg-color to black</span>
 <span id="L864" class="LineNr">864 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> bg-color-found?
@@ -934,14 +934,14 @@ if ('onhashchange' in window) {
 <span id="L871" class="LineNr">871 </span>
 <span id="L872" class="LineNr">872 </span><span class="muRecipe">def</span> print <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, n:bool<span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L873" class="LineNr">873 </span>  <span class="Constant">local-scope</span>
-<span id="L874" class="LineNr">874 </span>  <span class="Constant">load-ingredients</span>
-<span id="L875" class="LineNr">875 </span>  color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L874" class="LineNr">874 </span>  <span class="Constant">load-inputs</span>
+<span id="L875" class="LineNr">875 </span>  color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L876" class="LineNr">876 </span>  <span class="Delimiter">{</span>
 <span id="L877" class="LineNr">877 </span>  <span class="Conceal">¦</span> <span class="Comment"># default color to white</span>
 <span id="L878" class="LineNr">878 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> color-found?
 <span id="L879" class="LineNr">879 </span>  <span class="Conceal">¦</span> color <span class="Special">&lt;-</span> copy <span class="Constant">7/white</span>
 <span id="L880" class="LineNr">880 </span>  <span class="Delimiter">}</span>
-<span id="L881" class="LineNr">881 </span>  bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L881" class="LineNr">881 </span>  bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L882" class="LineNr">882 </span>  <span class="Delimiter">{</span>
 <span id="L883" class="LineNr">883 </span>  <span class="Conceal">¦</span> <span class="Comment"># default bg-color to black</span>
 <span id="L884" class="LineNr">884 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> bg-color-found?
@@ -953,14 +953,14 @@ if ('onhashchange' in window) {
 <span id="L890" class="LineNr">890 </span>
 <span id="L891" class="LineNr">891 </span><span class="muRecipe">def</span> print <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, n:&amp;:_elem<span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L892" class="LineNr">892 </span>  <span class="Constant">local-scope</span>
-<span id="L893" class="LineNr">893 </span>  <span class="Constant">load-ingredients</span>
-<span id="L894" class="LineNr">894 </span>  color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L893" class="LineNr">893 </span>  <span class="Constant">load-inputs</span>
+<span id="L894" class="LineNr">894 </span>  color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L895" class="LineNr">895 </span>  <span class="Delimiter">{</span>
 <span id="L896" class="LineNr">896 </span>  <span class="Conceal">¦</span> <span class="Comment"># default color to white</span>
 <span id="L897" class="LineNr">897 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> color-found?
 <span id="L898" class="LineNr">898 </span>  <span class="Conceal">¦</span> color <span class="Special">&lt;-</span> copy <span class="Constant">7/white</span>
 <span id="L899" class="LineNr">899 </span>  <span class="Delimiter">}</span>
-<span id="L900" class="LineNr">900 </span>  bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L900" class="LineNr">900 </span>  bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L901" class="LineNr">901 </span>  <span class="Delimiter">{</span>
 <span id="L902" class="LineNr">902 </span>  <span class="Conceal">¦</span> <span class="Comment"># default bg-color to black</span>
 <span id="L903" class="LineNr">903 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> bg-color-found?
diff --git a/html/082scenario_screen.cc.html b/html/082scenario_screen.cc.html
index cde419df..37b9d73c 100644
--- a/html/082scenario_screen.cc.html
+++ b/html/082scenario_screen.cc.html
@@ -315,19 +315,19 @@ if ('onhashchange' in window) {
 <span id="L250" class="LineNr">250 </span>
 <span id="L251" class="LineNr">251 </span><span class="Delimiter">:(code)</span>
 <span id="L252" class="LineNr">252 </span><span class="Normal">void</span> check_screen<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; expected_contents<span class="Delimiter">,</span> <span class="Normal">const</span> <span class="Normal">int</span> color<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L253" class="LineNr">253 </span>  <span class="Normal">int</span> screen_location = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> SCREEN<span class="Delimiter">)</span>+<span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L253" class="LineNr">253 </span>  <span class="Normal">int</span> screen_location = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> SCREEN<span class="Delimiter">)</span>+<span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
 <span id="L254" class="LineNr">254 </span>  <span class="Normal">int</span> data_offset = <a href='042name.cc.html#L140'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;data&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
 <span id="L255" class="LineNr">255 </span>  assert<span class="Delimiter">(</span>data_offset &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L256" class="LineNr">256 </span>  <span class="Normal">int</span> screen_data_location = screen_location+data_offset<span class="Delimiter">;</span>  <span class="Comment">// type: address:array:character</span>
-<span id="L257" class="LineNr">257 </span>  <span class="Normal">int</span> screen_data_start = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_data_location<span class="Delimiter">)</span> + <span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// type: array:character</span>
+<span id="L257" class="LineNr">257 </span>  <span class="Normal">int</span> screen_data_start = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_data_location<span class="Delimiter">)</span> + <span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// type: array:character</span>
 <span id="L258" class="LineNr">258 </span>  <span class="Normal">int</span> width_offset = <a href='042name.cc.html#L140'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;num-columns&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L259" class="LineNr">259 </span>  <span class="Normal">int</span> screen_width = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+width_offset<span class="Delimiter">);</span>
+<span id="L259" class="LineNr">259 </span>  <span class="Normal">int</span> screen_width = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+width_offset<span class="Delimiter">);</span>
 <span id="L260" class="LineNr">260 </span>  <span class="Normal">int</span> height_offset = <a href='042name.cc.html#L140'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;num-rows&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L261" class="LineNr">261 </span>  <span class="Normal">int</span> screen_height = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+height_offset<span class="Delimiter">);</span>
+<span id="L261" class="LineNr">261 </span>  <span class="Normal">int</span> screen_height = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+height_offset<span class="Delimiter">);</span>
 <span id="L262" class="LineNr">262 </span>  raw_string_stream cursor<span class="Delimiter">(</span>expected_contents<span class="Delimiter">);</span>
 <span id="L263" class="LineNr">263 </span>  <span class="Comment">// todo: too-long expected_contents should fail</span>
 <span id="L264" class="LineNr">264 </span>  <span class="Normal">int</span> top_index_offset = <a href='042name.cc.html#L140'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;top-idx&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L265" class="LineNr">265 </span>  <span class="Normal">int</span> top_index = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+top_index_offset<span class="Delimiter">);</span>
+<span id="L265" class="LineNr">265 </span>  <span class="Normal">int</span> top_index = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+top_index_offset<span class="Delimiter">);</span>
 <span id="L266" class="LineNr">266 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i=<span class="Constant">0</span><span class="Delimiter">,</span> row=top_index/screen_width<span class="Delimiter">;</span>  i &lt; screen_height<span class="Delimiter">;</span>  ++i<span class="Delimiter">,</span> row=<span class="Delimiter">(</span>row+<span class="Constant">1</span><span class="Delimiter">)</span>%screen_height<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L267" class="LineNr">267 </span>  <span class="Conceal">¦</span> cursor<span class="Delimiter">.</span><a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">();</span>
 <span id="L268" class="LineNr">268 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>cursor<span class="Delimiter">.</span>at_end<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -340,16 +340,16 @@ if ('onhashchange' in window) {
 <span id="L275" class="LineNr">275 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> column = <span class="Constant">0</span><span class="Delimiter">;</span>  column &lt; screen_width<span class="Delimiter">;</span>  ++column<span class="Delimiter">,</span> addr+= <span class="Comment">/*</span><span class="Comment">size of screen-cell</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L276" class="LineNr">276 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">const</span> <span class="Normal">int</span> cell_color_offset = <span class="Constant">1</span><span class="Delimiter">;</span>
 <span id="L277" class="LineNr">277 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">uint32_t</span> curr = cursor<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
-<span id="L278" class="LineNr">278 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> == <span class="Constant">0</span> &amp;&amp; isspace<span class="Delimiter">(</span>curr<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L279" class="LineNr">279 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>curr == <span class="Constant">' '</span> &amp;&amp; color != -<span class="Constant">1</span> &amp;&amp; color != <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr+cell_color_offset<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L278" class="LineNr">278 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> == <span class="Constant">0</span> &amp;&amp; isspace<span class="Delimiter">(</span>curr<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L279" class="LineNr">279 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>curr == <span class="Constant">' '</span> &amp;&amp; color != -<span class="Constant">1</span> &amp;&amp; color != <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr+cell_color_offset<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L280" class="LineNr">280 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// filter out other colors</span>
 <span id="L281" class="LineNr">281 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L282" class="LineNr">282 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
-<span id="L283" class="LineNr">283 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> != <span class="Constant">0</span> &amp;&amp; <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> == curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L284" class="LineNr">284 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>color == -<span class="Constant">1</span> || color == <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr+cell_color_offset<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L283" class="LineNr">283 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> != <span class="Constant">0</span> &amp;&amp; <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> == curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L284" class="LineNr">284 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>color == -<span class="Constant">1</span> || color == <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr+cell_color_offset<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L285" class="LineNr">285 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// contents match but color is off</span>
 <span id="L286" class="LineNr">286 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L287" class="LineNr">287 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;expected screen location (&quot;</span> &lt;&lt; row &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; column &lt;&lt; <span class="Constant">&quot;) to contain '&quot;</span> &lt;&lt; unicode_character_at<span class="Delimiter">(</span>addr<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' in color &quot;</span> &lt;&lt; color &lt;&lt; <span class="Constant">&quot; instead of &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr+cell_color_offset<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L287" class="LineNr">287 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;expected screen location (&quot;</span> &lt;&lt; row &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; column &lt;&lt; <span class="Constant">&quot;) to contain '&quot;</span> &lt;&lt; unicode_character_at<span class="Delimiter">(</span>addr<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' in color &quot;</span> &lt;&lt; color &lt;&lt; <span class="Constant">&quot; instead of &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr+cell_color_offset<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L288" class="LineNr">288 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> dump_screen<span class="Delimiter">();</span>
 <span id="L289" class="LineNr">289 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
 <span id="L290" class="LineNr">290 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
@@ -363,15 +363,15 @@ if ('onhashchange' in window) {
 <span id="L298" class="LineNr">298 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> expected_pretty[<span class="Constant">0</span>] = <span class="Constant">' '</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">1</span>] = <span class="Constant">'('</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">2</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">3</span>] = <span class="Normal">static_cast</span>&lt;<span class="Normal">unsigned</span> <span class="Normal">char</span>&gt;<span class="Delimiter">(</span>curr<span class="Delimiter">),</span> expected_pretty[<span class="Constant">4</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">5</span>] = <span class="Constant">')'</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">6</span>] = <span class="cSpecial">'\0'</span><span class="Delimiter">;</span>
 <span id="L299" class="LineNr">299 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L300" class="LineNr">300 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">char</span> actual_pretty[<span class="Constant">10</span>] = <span class="Delimiter">{</span><span class="Constant">0</span><span class="Delimiter">};</span>
-<span id="L301" class="LineNr">301 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> &lt; <span class="Constant">256</span> &amp;&amp; !iscntrl<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L301" class="LineNr">301 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> &lt; <span class="Constant">256</span> &amp;&amp; !iscntrl<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
 <span id="L302" class="LineNr">302 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// &quot; ('&lt;curr&gt;')&quot;</span>
-<span id="L303" class="LineNr">303 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> actual_pretty[<span class="Constant">0</span>] = <span class="Constant">' '</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">1</span>] = <span class="Constant">'('</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">2</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">3</span>] = <span class="Normal">static_cast</span>&lt;<span class="Normal">unsigned</span> <span class="Normal">char</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)),</span> actual_pretty[<span class="Constant">4</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">5</span>] = <span class="Constant">')'</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">6</span>] = <span class="cSpecial">'\0'</span><span class="Delimiter">;</span>
+<span id="L303" class="LineNr">303 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> actual_pretty[<span class="Constant">0</span>] = <span class="Constant">' '</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">1</span>] = <span class="Constant">'('</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">2</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">3</span>] = <span class="Normal">static_cast</span>&lt;<span class="Normal">unsigned</span> <span class="Normal">char</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)),</span> actual_pretty[<span class="Constant">4</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">5</span>] = <span class="Constant">')'</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">6</span>] = <span class="cSpecial">'\0'</span><span class="Delimiter">;</span>
 <span id="L304" class="LineNr">304 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L305" class="LineNr">305 </span>
 <span id="L306" class="LineNr">306 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> ostringstream color_phrase<span class="Delimiter">;</span>
 <span id="L307" class="LineNr">307 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>color != -<span class="Constant">1</span><span class="Delimiter">)</span> color_phrase &lt;&lt; <span class="Constant">&quot; in color &quot;</span> &lt;&lt; color<span class="Delimiter">;</span>
 <span id="L308" class="LineNr">308 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L309" class="LineNr">309 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;expected screen location (&quot;</span> &lt;&lt; row &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; column &lt;&lt; <span class="Constant">&quot;) to contain &quot;</span> &lt;&lt; curr &lt;&lt; expected_pretty &lt;&lt; color_phrase<span class="Delimiter">.</span>str<span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot; instead of &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">))</span> &lt;&lt; actual_pretty &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L309" class="LineNr">309 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;expected screen location (&quot;</span> &lt;&lt; row &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; column &lt;&lt; <span class="Constant">&quot;) to contain &quot;</span> &lt;&lt; curr &lt;&lt; expected_pretty &lt;&lt; color_phrase<span class="Delimiter">.</span>str<span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot; instead of &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">))</span> &lt;&lt; actual_pretty &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L310" class="LineNr">310 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> dump_screen<span class="Delimiter">();</span>
 <span id="L311" class="LineNr">311 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
 <span id="L312" class="LineNr">312 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
@@ -390,7 +390,7 @@ if ('onhashchange' in window) {
 <span id="L325" class="LineNr">325 </span><span class="Delimiter">}</span>
 <span id="L326" class="LineNr">326 </span>
 <span id="L327" class="LineNr">327 </span><span class="Normal">const</span> <span class="Normal">char</span>* unicode_character_at<span class="Delimiter">(</span><span class="Normal">int</span> addr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L328" class="LineNr">328 </span>  <span class="Normal">int</span> unicode_code_point = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">));</span>
+<span id="L328" class="LineNr">328 </span>  <span class="Normal">int</span> unicode_code_point = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">));</span>
 <span id="L329" class="LineNr">329 </span>  <span class="Identifier">return</span> to_unicode<span class="Delimiter">(</span>unicode_code_point<span class="Delimiter">);</span>
 <span id="L330" class="LineNr">330 </span><span class="Delimiter">}</span>
 <span id="L331" class="LineNr">331 </span>
@@ -450,24 +450,24 @@ if ('onhashchange' in window) {
 <span id="L385" class="LineNr">385 </span>
 <span id="L386" class="LineNr">386 </span><span class="Delimiter">:(code)</span>
 <span id="L387" class="LineNr">387 </span><span class="Normal">void</span> dump_screen<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L388" class="LineNr">388 </span>  <span class="Normal">int</span> screen_location = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> SCREEN<span class="Delimiter">)</span> + <span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L388" class="LineNr">388 </span>  <span class="Normal">int</span> screen_location = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> SCREEN<span class="Delimiter">)</span> + <span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
 <span id="L389" class="LineNr">389 </span>  <span class="Normal">int</span> width_offset = <a href='042name.cc.html#L140'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;num-columns&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L390" class="LineNr">390 </span>  <span class="Normal">int</span> screen_width = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+width_offset<span class="Delimiter">);</span>
+<span id="L390" class="LineNr">390 </span>  <span class="Normal">int</span> screen_width = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+width_offset<span class="Delimiter">);</span>
 <span id="L391" class="LineNr">391 </span>  <span class="Normal">int</span> height_offset = <a href='042name.cc.html#L140'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;num-rows&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L392" class="LineNr">392 </span>  <span class="Normal">int</span> screen_height = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+height_offset<span class="Delimiter">);</span>
+<span id="L392" class="LineNr">392 </span>  <span class="Normal">int</span> screen_height = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+height_offset<span class="Delimiter">);</span>
 <span id="L393" class="LineNr">393 </span>  <span class="Normal">int</span> data_offset = <a href='042name.cc.html#L140'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;data&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
 <span id="L394" class="LineNr">394 </span>  assert<span class="Delimiter">(</span>data_offset &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L395" class="LineNr">395 </span>  <span class="Normal">int</span> screen_data_location = screen_location+data_offset<span class="Delimiter">;</span>  <span class="Comment">// type: address:array:character</span>
-<span id="L396" class="LineNr">396 </span>  <span class="Normal">int</span> screen_data_start = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_data_location<span class="Delimiter">)</span> + <span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// type: array:character</span>
-<span id="L397" class="LineNr">397 </span>  assert<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_data_start<span class="Delimiter">)</span> == screen_width*screen_height<span class="Delimiter">);</span>
+<span id="L396" class="LineNr">396 </span>  <span class="Normal">int</span> screen_data_start = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_data_location<span class="Delimiter">)</span> + <span class="Comment">/*</span><span class="Comment">skip refcount</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// type: array:character</span>
+<span id="L397" class="LineNr">397 </span>  assert<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_data_start<span class="Delimiter">)</span> == screen_width*screen_height<span class="Delimiter">);</span>
 <span id="L398" class="LineNr">398 </span>  <span class="Normal">int</span> top_index_offset = <a href='042name.cc.html#L140'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;top-idx&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L399" class="LineNr">399 </span>  <span class="Normal">int</span> top_index = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+top_index_offset<span class="Delimiter">);</span>
+<span id="L399" class="LineNr">399 </span>  <span class="Normal">int</span> top_index = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+top_index_offset<span class="Delimiter">);</span>
 <span id="L400" class="LineNr">400 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i=<span class="Constant">0</span><span class="Delimiter">,</span> row=top_index/screen_width<span class="Delimiter">;</span>  i &lt; screen_height<span class="Delimiter">;</span>  ++i<span class="Delimiter">,</span> row=<span class="Delimiter">(</span>row+<span class="Constant">1</span><span class="Delimiter">)</span>%screen_height<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L401" class="LineNr">401 </span>  <span class="Conceal">¦</span> cerr &lt;&lt; <span class="Constant">'.'</span><span class="Delimiter">;</span>
 <span id="L402" class="LineNr">402 </span>  <span class="Conceal">¦</span> <span class="Normal">int</span> curr = screen_data_start+<span class="Comment">/*</span><span class="Comment">length</span><span class="Comment">*/</span><span class="Constant">1</span>+row*screen_width* <span class="Comment">/*</span><span class="Comment">size of screen-cell</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">;</span>
 <span id="L403" class="LineNr">403 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> col = <span class="Constant">0</span><span class="Delimiter">;</span>  col &lt; screen_width<span class="Delimiter">;</span>  ++col<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L404" class="LineNr">404 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">))</span>
-<span id="L405" class="LineNr">405 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> cerr &lt;&lt; to_unicode<span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">uint32_t</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)));</span>
+<span id="L404" class="LineNr">404 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">))</span>
+<span id="L405" class="LineNr">405 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> cerr &lt;&lt; to_unicode<span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">uint32_t</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)));</span>
 <span id="L406" class="LineNr">406 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">else</span>
 <span id="L407" class="LineNr">407 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> cerr &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
 <span id="L408" class="LineNr">408 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> curr += <span class="Comment">/*</span><span class="Comment">size of screen-cell</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">;</span>
diff --git a/html/084console.mu.html b/html/084console.mu.html
index 952c646e..42963a93 100644
--- a/html/084console.mu.html
+++ b/html/084console.mu.html
@@ -88,14 +88,14 @@ if ('onhashchange' in window) {
 <span id="L27" class="LineNr"> 27 </span>
 <span id="L28" class="LineNr"> 28 </span><span class="muRecipe">def</span> <a href='084console.mu.html#L28'>new-fake-console</a> events:&amp;:@:<a href='084console.mu.html#L4'>event</a><span class="muRecipe"> -&gt; </span>result:&amp;:<a href='084console.mu.html#L23'>console</a> [
 <span id="L29" class="LineNr"> 29 </span>  <span class="Constant">local-scope</span>
-<span id="L30" class="LineNr"> 30 </span>  <span class="Constant">load-ingredients</span>
+<span id="L30" class="LineNr"> 30 </span>  <span class="Constant">load-inputs</span>
 <span id="L31" class="LineNr"> 31 </span>  result:&amp;:<a href='084console.mu.html#L23'>console</a> <span class="Special">&lt;-</span> new <span class="Constant"><a href='084console.mu.html#L23'>console</a>:type</span>
 <span id="L32" class="LineNr"> 32 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">events:offset</span>, events
 <span id="L33" class="LineNr"> 33 </span>]
 <span id="L34" class="LineNr"> 34 </span>
 <span id="L35" class="LineNr"> 35 </span><span class="muRecipe">def</span> <a href='084console.mu.html#L35'>read-event</a> <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a><span class="muRecipe"> -&gt; </span>result:<a href='084console.mu.html#L4'>event</a>, found?:bool, quit?:bool, <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a> [
 <span id="L36" class="LineNr"> 36 </span>  <span class="Constant">local-scope</span>
-<span id="L37" class="LineNr"> 37 </span>  <span class="Constant">load-ingredients</span>
+<span id="L37" class="LineNr"> 37 </span>  <span class="Constant">load-inputs</span>
 <span id="L38" class="LineNr"> 38 </span>  <span class="Delimiter">{</span>
 <span id="L39" class="LineNr"> 39 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> <a href='084console.mu.html#L23'>console</a>
 <span id="L40" class="LineNr"> 40 </span>  <span class="Conceal">¦</span> current-event-index:num <span class="Special">&lt;-</span> get *console, <span class="Constant">current-event-index:offset</span>
@@ -122,7 +122,7 @@ if ('onhashchange' in window) {
 <span id="L61" class="LineNr"> 61 </span><span class="Comment"># newlines, tabs, ctrl-d..</span>
 <span id="L62" class="LineNr"> 62 </span><span class="muRecipe">def</span> <a href='084console.mu.html#L62'>read-key</a> <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a><span class="muRecipe"> -&gt; </span>result:char, found?:bool, quit?:bool, <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a> [
 <span id="L63" class="LineNr"> 63 </span>  <span class="Constant">local-scope</span>
-<span id="L64" class="LineNr"> 64 </span>  <span class="Constant">load-ingredients</span>
+<span id="L64" class="LineNr"> 64 </span>  <span class="Constant">load-inputs</span>
 <span id="L65" class="LineNr"> 65 </span>  x:<a href='084console.mu.html#L4'>event</a>, found?:bool, quit?:bool, <a href='084console.mu.html#L23'>console</a> <span class="Special">&lt;-</span> <a href='084console.mu.html#L35'>read-event</a> <a href='084console.mu.html#L23'>console</a>
 <span id="L66" class="LineNr"> 66 </span>  <span class="muControl">return-if</span> quit?,<span class="Constant"> 0</span>, found?, quit?
 <span id="L67" class="LineNr"> 67 </span>  <span class="muControl">return-unless</span> found?,<span class="Constant"> 0</span>, found?, quit?
@@ -133,7 +133,7 @@ if ('onhashchange' in window) {
 <span id="L72" class="LineNr"> 72 </span>
 <span id="L73" class="LineNr"> 73 </span><span class="muRecipe">def</span> <a href='084console.mu.html#L73'>send-keys-to-channel</a> <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a>, chan:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a>, chan:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L74" class="LineNr"> 74 </span>  <span class="Constant">local-scope</span>
-<span id="L75" class="LineNr"> 75 </span>  <span class="Constant">load-ingredients</span>
+<span id="L75" class="LineNr"> 75 </span>  <span class="Constant">load-inputs</span>
 <span id="L76" class="LineNr"> 76 </span>  <span class="Delimiter">{</span>
 <span id="L77" class="LineNr"> 77 </span>  <span class="Conceal">¦</span> c:char, found?:bool, quit?:bool, <a href='084console.mu.html#L23'>console</a> <span class="Special">&lt;-</span> <a href='084console.mu.html#L62'>read-key</a> <a href='084console.mu.html#L23'>console</a>
 <span id="L78" class="LineNr"> 78 </span>  <span class="Conceal">¦</span> <span class="muControl">loop-unless</span> found?
@@ -148,7 +148,7 @@ if ('onhashchange' in window) {
 <span id="L87" class="LineNr"> 87 </span>
 <span id="L88" class="LineNr"> 88 </span><span class="muRecipe">def</span> <a href='084console.mu.html#L88'>wait-for-event</a> <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a><span class="muRecipe"> -&gt; </span><a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a> [
 <span id="L89" class="LineNr"> 89 </span>  <span class="Constant">local-scope</span>
-<span id="L90" class="LineNr"> 90 </span>  <span class="Constant">load-ingredients</span>
+<span id="L90" class="LineNr"> 90 </span>  <span class="Constant">load-inputs</span>
 <span id="L91" class="LineNr"> 91 </span>  <span class="Delimiter">{</span>
 <span id="L92" class="LineNr"> 92 </span>  <span class="Conceal">¦</span> _, found?:bool <span class="Special">&lt;-</span> <a href='084console.mu.html#L35'>read-event</a> <a href='084console.mu.html#L23'>console</a>
 <span id="L93" class="LineNr"> 93 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> found?
@@ -159,7 +159,7 @@ if ('onhashchange' in window) {
 <span id="L98" class="LineNr"> 98 </span>
 <span id="L99" class="LineNr"> 99 </span><span class="muRecipe">def</span> <a href='084console.mu.html#L99'>has-more-events?</a> <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a><span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L100" class="LineNr">100 </span>  <span class="Constant">local-scope</span>
-<span id="L101" class="LineNr">101 </span>  <span class="Constant">load-ingredients</span>
+<span id="L101" class="LineNr">101 </span>  <span class="Constant">load-inputs</span>
 <span id="L102" class="LineNr">102 </span>  <span class="muControl">return-if</span> <a href='084console.mu.html#L23'>console</a>, <span class="Constant">0/false</span>  <span class="Comment"># fake events are processed as soon as they arrive</span>
 <span id="L103" class="LineNr">103 </span>  result <span class="Special">&lt;-</span> interactions-left?
 <span id="L104" class="LineNr">104 </span>]
diff --git a/html/085scenario_console.cc.html b/html/085scenario_console.cc.html
index 67b651cc..c36eb9b8 100644
--- a/html/085scenario_console.cc.html
+++ b/html/085scenario_console.cc.html
@@ -144,7 +144,7 @@ if ('onhashchange' in window) {
 <span id="L82" class="LineNr"> 82 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address+<span class="Constant">1</span><span class="Delimiter">,</span> Key[key]<span class="Delimiter">);</span>
 <span id="L83" class="LineNr"> 83 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">else</span>
 <span id="L84" class="LineNr"> 84 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;assume-console: can't press '&quot;</span> &lt;&lt; key &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L85" class="LineNr"> 85 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address+<span class="Constant">1</span><span class="Delimiter">)</span> &lt; <span class="Constant">256</span><span class="Delimiter">)</span>
+<span id="L85" class="LineNr"> 85 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address+<span class="Constant">1</span><span class="Delimiter">)</span> &lt; <span class="Constant">256</span><span class="Delimiter">)</span>
 <span id="L86" class="LineNr"> 86 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Comment">// these keys are in ascii</span>
 <span id="L87" class="LineNr"> 87 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address<span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">tag for 'text' variant of 'event' exclusive-container</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L88" class="LineNr"> 88 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">else</span> <span class="Delimiter">{</span>
@@ -330,12 +330,12 @@ if ('onhashchange' in window) {
 <span id="L268" class="LineNr">268 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;console not initialized</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L269" class="LineNr">269 </span>  <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L270" class="LineNr">270 </span>  <span class="Delimiter">}</span>
-<span id="L271" class="LineNr">271 </span>  <span class="Normal">int</span> console_address = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> CONSOLE<span class="Delimiter">);</span>
-<span id="L272" class="LineNr">272 </span>  <span class="Normal">int</span> console_data = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> console_address+<span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L273" class="LineNr">273 </span>  <span class="Normal">int</span> length = <a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> console_data<span class="Delimiter">);</span>  <span class="Comment">// array length</span>
+<span id="L271" class="LineNr">271 </span>  <span class="Normal">int</span> console_address = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> CONSOLE<span class="Delimiter">);</span>
+<span id="L272" class="LineNr">272 </span>  <span class="Normal">int</span> console_data = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> console_address+<span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L273" class="LineNr">273 </span>  <span class="Normal">int</span> length = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> console_data<span class="Delimiter">);</span>  <span class="Comment">// array length</span>
 <span id="L274" class="LineNr">274 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">,</span> curr = console_data+<span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; length<span class="Delimiter">;</span>  ++i<span class="Delimiter">,</span> curr+=size_of_event<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L275" class="LineNr">275 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)</span> != <span class="Comment">/*</span><span class="Comment">text</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L276" class="LineNr">276 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr+<span class="Constant">1</span><span class="Delimiter">)</span> != ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L275" class="LineNr">275 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)</span> != <span class="Comment">/*</span><span class="Comment">text</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L276" class="LineNr">276 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr+<span class="Constant">1</span><span class="Delimiter">)</span> != ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L277" class="LineNr">277 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> n = <span class="Constant">0</span><span class="Delimiter">;</span>  n &lt; <a href='085scenario_console.cc.html#L296'>size_of_event</a><span class="Delimiter">();</span>  ++n<span class="Delimiter">)</span>
 <span id="L278" class="LineNr">278 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr+n<span class="Delimiter">,</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span>n<span class="Delimiter">));</span>
 <span id="L279" class="LineNr">279 </span>  <span class="Delimiter">}</span>
diff --git a/html/087file.cc.html b/html/087file.cc.html
index 25952ce2..a42e29b4 100644
--- a/html/087file.cc.html
+++ b/html/087file.cc.html
@@ -172,7 +172,7 @@ if ('onhashchange' in window) {
 <span id="L111" class="LineNr">111 </span>  <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> x = <span class="Normal">static_cast</span>&lt;<span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
 <span id="L112" class="LineNr">112 </span>  <span class="Normal">FILE</span>* f = <span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">FILE</span>*&gt;<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
 <span id="L113" class="LineNr">113 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>f == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L114" class="LineNr">114 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;can't read from null file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L114" class="LineNr">114 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;can't read from null file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L115" class="LineNr">115 </span>  <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L116" class="LineNr">116 </span>  <span class="Delimiter">}</span>
 <span id="L117" class="LineNr">117 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
@@ -192,7 +192,7 @@ if ('onhashchange' in window) {
 <span id="L131" class="LineNr">131 </span>  <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L132" class="LineNr">132 </span>  <span class="Delimiter">}</span>
 <span id="L133" class="LineNr">133 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ferror<span class="Delimiter">(</span>f<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L134" class="LineNr">134 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;couldn't read from file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L134" class="LineNr">134 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;couldn't read from file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L135" class="LineNr">135 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;  errno: &quot;</span> &lt;&lt; errno &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L136" class="LineNr">136 </span>  <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L137" class="LineNr">137 </span>  <span class="Delimiter">}</span>
@@ -232,7 +232,7 @@ if ('onhashchange' in window) {
 <span id="L171" class="LineNr">171 </span>  <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> x = <span class="Normal">static_cast</span>&lt;<span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
 <span id="L172" class="LineNr">172 </span>  <span class="Normal">FILE</span>* f = <span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">FILE</span>*&gt;<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
 <span id="L173" class="LineNr">173 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>f == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L174" class="LineNr">174 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;can't write to null file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L174" class="LineNr">174 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;can't write to null file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L175" class="LineNr">175 </span>  <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L176" class="LineNr">176 </span>  <span class="Delimiter">}</span>
 <span id="L177" class="LineNr">177 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>feof<span class="Delimiter">(</span>f<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -244,7 +244,7 @@ if ('onhashchange' in window) {
 <span id="L183" class="LineNr">183 </span>  <span class="Normal">char</span> c = <span class="Normal">static_cast</span>&lt;<span class="Normal">char</span>&gt;<span class="Delimiter">(</span>y<span class="Delimiter">);</span>
 <span id="L184" class="LineNr">184 </span>  putc<span class="Delimiter">(</span>c<span class="Delimiter">,</span> f<span class="Delimiter">);</span>  <span class="Comment">// todo: unicode</span>
 <span id="L185" class="LineNr">185 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ferror<span class="Delimiter">(</span>f<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L186" class="LineNr">186 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;couldn't write to file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L186" class="LineNr">186 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L85'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;couldn't write to file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L187" class="LineNr">187 </span>  <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <span class="Constant">&quot;  errno: &quot;</span> &lt;&lt; errno &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L188" class="LineNr">188 </span>  <span class="Conceal">¦</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L189" class="LineNr">189 </span>  <span class="Delimiter">}</span>
diff --git a/html/088file.mu.html b/html/088file.mu.html
index 88c45143..f4b0be86 100644
--- a/html/088file.mu.html
+++ b/html/088file.mu.html
@@ -81,7 +81,7 @@ if ('onhashchange' in window) {
 <span id="L20" class="LineNr"> 20 </span>
 <span id="L21" class="LineNr"> 21 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L21'>start-reading</a> <a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, filename:text<span class="muRecipe"> -&gt; </span>contents:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, error?:bool [
 <span id="L22" class="LineNr"> 22 </span>  <span class="Constant">local-scope</span>
-<span id="L23" class="LineNr"> 23 </span>  <span class="Constant">load-ingredients</span>
+<span id="L23" class="LineNr"> 23 </span>  <span class="Constant">load-inputs</span>
 <span id="L24" class="LineNr"> 24 </span>  error? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
 <span id="L25" class="LineNr"> 25 </span>  <span class="Delimiter">{</span>
 <span id="L26" class="LineNr"> 26 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> <a href='088file.mu.html#L11'>resources</a>
@@ -98,7 +98,7 @@ if ('onhashchange' in window) {
 <span id="L37" class="LineNr"> 37 </span>
 <span id="L38" class="LineNr"> 38 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L38'>slurp</a> <a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, filename:text<span class="muRecipe"> -&gt; </span>contents:text, error?:bool [
 <span id="L39" class="LineNr"> 39 </span>  <span class="Constant">local-scope</span>
-<span id="L40" class="LineNr"> 40 </span>  <span class="Constant">load-ingredients</span>
+<span id="L40" class="LineNr"> 40 </span>  <span class="Constant">load-inputs</span>
 <span id="L41" class="LineNr"> 41 </span>  <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, error?:bool <span class="Special">&lt;-</span> <a href='088file.mu.html#L21'>start-reading</a> <a href='088file.mu.html#L11'>resources</a>, filename
 <span id="L42" class="LineNr"> 42 </span>  <span class="muControl">return-if</span> error?, <span class="Constant">0/contents</span>
 <span id="L43" class="LineNr"> 43 </span>  buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a> <span class="Constant">30/capacity</span>
@@ -113,7 +113,7 @@ if ('onhashchange' in window) {
 <span id="L52" class="LineNr"> 52 </span>
 <span id="L53" class="LineNr"> 53 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L53'>start-reading-from-fake-resource</a> <a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, <a href='088file.mu.html#L16'>resource</a>:text<span class="muRecipe"> -&gt; </span>contents:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, error?:bool [
 <span id="L54" class="LineNr"> 54 </span>  <span class="Constant">local-scope</span>
-<span id="L55" class="LineNr"> 55 </span>  <span class="Constant">load-ingredients</span>
+<span id="L55" class="LineNr"> 55 </span>  <span class="Constant">load-inputs</span>
 <span id="L56" class="LineNr"> 56 </span>  error? <span class="Special">&lt;-</span> copy <span class="Constant">0/no-error</span>
 <span id="L57" class="LineNr"> 57 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L58" class="LineNr"> 58 </span>  data:&amp;:@:<a href='088file.mu.html#L16'>resource</a> <span class="Special">&lt;-</span> get *resources, <span class="Constant">data:offset</span>
@@ -136,7 +136,7 @@ if ('onhashchange' in window) {
 <span id="L75" class="LineNr"> 75 </span>
 <span id="L76" class="LineNr"> 76 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L76'>receive-from-file</a> file:num, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char<span class="muRecipe"> -&gt; </span><a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char [
 <span id="L77" class="LineNr"> 77 </span>  <span class="Constant">local-scope</span>
-<span id="L78" class="LineNr"> 78 </span>  <span class="Constant">load-ingredients</span>
+<span id="L78" class="LineNr"> 78 </span>  <span class="Constant">load-inputs</span>
 <span id="L79" class="LineNr"> 79 </span>  <span class="Delimiter">{</span>
 <span id="L80" class="LineNr"> 80 </span>  <span class="Conceal">¦</span> c:char, eof?:bool <span class="Special">&lt;-</span> $read-from-file file
 <span id="L81" class="LineNr"> 81 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> eof?
@@ -149,7 +149,7 @@ if ('onhashchange' in window) {
 <span id="L88" class="LineNr"> 88 </span>
 <span id="L89" class="LineNr"> 89 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L89'>receive-from-text</a> contents:text, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char<span class="muRecipe"> -&gt; </span><a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char [
 <span id="L90" class="LineNr"> 90 </span>  <span class="Constant">local-scope</span>
-<span id="L91" class="LineNr"> 91 </span>  <span class="Constant">load-ingredients</span>
+<span id="L91" class="LineNr"> 91 </span>  <span class="Constant">load-inputs</span>
 <span id="L92" class="LineNr"> 92 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L93" class="LineNr"> 93 </span>  len:num <span class="Special">&lt;-</span> length *contents
 <span id="L94" class="LineNr"> 94 </span>  <span class="Delimiter">{</span>
@@ -165,7 +165,7 @@ if ('onhashchange' in window) {
 <span id="L104" class="LineNr">104 </span>
 <span id="L105" class="LineNr">105 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L105'>start-writing</a> <a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, filename:text<span class="muRecipe"> -&gt; </span><a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char, routine-id:num, error?:bool [
 <span id="L106" class="LineNr">106 </span>  <span class="Constant">local-scope</span>
-<span id="L107" class="LineNr">107 </span>  <span class="Constant">load-ingredients</span>
+<span id="L107" class="LineNr">107 </span>  <span class="Constant">load-inputs</span>
 <span id="L108" class="LineNr">108 </span>  error? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
 <span id="L109" class="LineNr">109 </span>  <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char <span class="Special">&lt;-</span> <a href='075channel.mu.html#L51'>new-channel</a><span class="Constant"> 30</span>
 <span id="L110" class="LineNr">110 </span>  <span class="Delimiter">{</span>
@@ -187,7 +187,7 @@ if ('onhashchange' in window) {
 <span id="L126" class="LineNr">126 </span>
 <span id="L127" class="LineNr">127 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L127'>dump</a> <a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, filename:text, contents:text<span class="muRecipe"> -&gt; </span><a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, error?:bool [
 <span id="L128" class="LineNr">128 </span>  <span class="Constant">local-scope</span>
-<span id="L129" class="LineNr">129 </span>  <span class="Constant">load-ingredients</span>
+<span id="L129" class="LineNr">129 </span>  <span class="Constant">load-inputs</span>
 <span id="L130" class="LineNr">130 </span>  <span class="Comment"># todo: really create an empty file</span>
 <span id="L131" class="LineNr">131 </span>  <span class="muControl">return-unless</span> contents, <a href='088file.mu.html#L11'>resources</a>, <span class="Constant">0/no-error</span>
 <span id="L132" class="LineNr">132 </span>  sink-file:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char, write-routine:num, error?:bool <span class="Special">&lt;-</span> <a href='088file.mu.html#L105'>start-writing</a> <a href='088file.mu.html#L11'>resources</a>, filename
@@ -210,7 +210,7 @@ if ('onhashchange' in window) {
 <span id="L149" class="LineNr">149 </span>
 <span id="L150" class="LineNr">150 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L150'>transmit-to-file</a> file:num, <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char<span class="muRecipe"> -&gt; </span><a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char [
 <span id="L151" class="LineNr">151 </span>  <span class="Constant">local-scope</span>
-<span id="L152" class="LineNr">152 </span>  <span class="Constant">load-ingredients</span>
+<span id="L152" class="LineNr">152 </span>  <span class="Constant">load-inputs</span>
 <span id="L153" class="LineNr">153 </span>  <span class="Delimiter">{</span>
 <span id="L154" class="LineNr">154 </span>  <span class="Conceal">¦</span> c:char, done?:bool, <a href='075channel.mu.html#L43'>source</a> <span class="Special">&lt;-</span> read <a href='075channel.mu.html#L43'>source</a>
 <span id="L155" class="LineNr">155 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> done?
@@ -222,7 +222,7 @@ if ('onhashchange' in window) {
 <span id="L161" class="LineNr">161 </span>
 <span id="L162" class="LineNr">162 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L162'>transmit-to-fake-resource</a> <a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, filename:text, <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char<span class="muRecipe"> -&gt; </span><a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char [
 <span id="L163" class="LineNr">163 </span>  <span class="Constant">local-scope</span>
-<span id="L164" class="LineNr">164 </span>  <span class="Constant">load-ingredients</span>
+<span id="L164" class="LineNr">164 </span>  <span class="Constant">load-inputs</span>
 <span id="L165" class="LineNr">165 </span>  lock:location <span class="Special">&lt;-</span> get-location *resources, <span class="Constant">lock:offset</span>
 <span id="L166" class="LineNr">166 </span>  wait-for-reset-then-set lock
 <span id="L167" class="LineNr">167 </span>  <span class="Comment"># compute new file contents</span>
diff --git a/html/092socket.mu.html b/html/092socket.mu.html
index 2c3412a3..10daadb9 100644
--- a/html/092socket.mu.html
+++ b/html/092socket.mu.html
@@ -87,7 +87,7 @@ if ('onhashchange' in window) {
 <span id="L25" class="LineNr"> 25 </span><span class="Comment"># helper just for this scenario</span>
 <span id="L26" class="LineNr"> 26 </span><span class="muRecipe">def</span> <a href='092socket.mu.html#L26'>example-handler</a> query:text<span class="muRecipe"> -&gt; </span>response:text [
 <span id="L27" class="LineNr"> 27 </span>  <span class="Constant">local-scope</span>
-<span id="L28" class="LineNr"> 28 </span>  <span class="Constant">load-ingredients</span>
+<span id="L28" class="LineNr"> 28 </span>  <span class="Constant">load-inputs</span>
 <span id="L29" class="LineNr"> 29 </span>  <span class="muControl">return</span> <span class="Constant">[abc]</span>
 <span id="L30" class="LineNr"> 30 </span>]
 <span id="L31" class="LineNr"> 31 </span>
@@ -116,7 +116,7 @@ if ('onhashchange' in window) {
 <span id="L54" class="LineNr"> 54 </span>
 <span id="L55" class="LineNr"> 55 </span><span class="muRecipe">def</span> <a href='092socket.mu.html#L55'>serve-one-request</a> socket:num, <a href='092socket.mu.html#L53'>request-handler</a>:<a href='092socket.mu.html#L53'>request-handler</a><span class="muRecipe"> -&gt; </span>socket:num [
 <span id="L56" class="LineNr"> 56 </span>  <span class="Constant">local-scope</span>
-<span id="L57" class="LineNr"> 57 </span>  <span class="Constant">load-ingredients</span>
+<span id="L57" class="LineNr"> 57 </span>  <span class="Constant">load-inputs</span>
 <span id="L58" class="LineNr"> 58 </span>  session:num <span class="Special">&lt;-</span> $accept socket
 <span id="L59" class="LineNr"> 59 </span>  assert session, <span class="Constant">[ </span>
 <span id="L60" class="LineNr"> 60 </span><span class="Constant">F - example-server-test: $accept failed]</span>
@@ -130,9 +130,9 @@ if ('onhashchange' in window) {
 <span id="L68" class="LineNr"> 68 </span>
 <span id="L69" class="LineNr"> 69 </span><span class="muRecipe">def</span> <a href='092socket.mu.html#L69'>start-reading-from-network</a> <a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, uri:text<span class="muRecipe"> -&gt; </span>contents:&amp;:<a href='075channel.mu.html#L43'>source</a>:char [
 <span id="L70" class="LineNr"> 70 </span>  <span class="Constant">local-scope</span>
-<span id="L71" class="LineNr"> 71 </span>  <span class="Constant">load-ingredients</span>
+<span id="L71" class="LineNr"> 71 </span>  <span class="Constant">load-inputs</span>
 <span id="L72" class="LineNr"> 72 </span>  <span class="Delimiter">{</span>
-<span id="L73" class="LineNr"> 73 </span>  <span class="Conceal">¦</span> port:num, port-found?:boolean <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L73" class="LineNr"> 73 </span>  <span class="Conceal">¦</span> port:num, port-found?:boolean <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L74" class="LineNr"> 74 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> port-found?
 <span id="L75" class="LineNr"> 75 </span>  <span class="Conceal">¦</span> port <span class="Special">&lt;-</span> copy <span class="Constant">80/http-port</span>
 <span id="L76" class="LineNr"> 76 </span>  <span class="Delimiter">}</span>
@@ -154,7 +154,7 @@ if ('onhashchange' in window) {
 <span id="L92" class="LineNr"> 92 </span>
 <span id="L93" class="LineNr"> 93 </span><span class="muRecipe">def</span> <a href='092socket.mu.html#L93'>request-socket</a> socket:num, s:text<span class="muRecipe"> -&gt; </span>socket:num [
 <span id="L94" class="LineNr"> 94 </span>  <span class="Constant">local-scope</span>
-<span id="L95" class="LineNr"> 95 </span>  <span class="Constant">load-ingredients</span>
+<span id="L95" class="LineNr"> 95 </span>  <span class="Constant">load-inputs</span>
 <span id="L96" class="LineNr"> 96 </span>  <a href='092socket.mu.html#L132'>write-to-socket</a> socket, s
 <span id="L97" class="LineNr"> 97 </span>  $write-to-socket socket, <span class="Constant">13/cr</span>
 <span id="L98" class="LineNr"> 98 </span>  $write-to-socket socket, <span class="Constant">10/lf</span>
@@ -165,7 +165,7 @@ if ('onhashchange' in window) {
 <span id="L103" class="LineNr">103 </span>
 <span id="L104" class="LineNr">104 </span><span class="muRecipe">def</span> <a href='092socket.mu.html#L104'>receive-from-socket</a> socket:num, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char<span class="muRecipe"> -&gt; </span><a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char, socket:num [
 <span id="L105" class="LineNr">105 </span>  <span class="Constant">local-scope</span>
-<span id="L106" class="LineNr">106 </span>  <span class="Constant">load-ingredients</span>
+<span id="L106" class="LineNr">106 </span>  <span class="Constant">load-inputs</span>
 <span id="L107" class="LineNr">107 </span>  <span class="Delimiter">{</span>
 <span id="L108" class="LineNr">108 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> +next-attempt</span>
 <span id="L109" class="LineNr">109 </span>  <span class="Conceal">¦</span> c:char, found?:bool, eof?:bool, error:num <span class="Special">&lt;-</span> $read-from-socket socket
@@ -186,14 +186,14 @@ if ('onhashchange' in window) {
 <span id="L124" class="LineNr">124 </span>
 <span id="L125" class="LineNr">125 </span><span class="muRecipe">def</span> <a href='092socket.mu.html#L125'>receive-from-client-socket-and-close</a> socket:num, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char<span class="muRecipe"> -&gt; </span><a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char, socket:num [
 <span id="L126" class="LineNr">126 </span>  <span class="Constant">local-scope</span>
-<span id="L127" class="LineNr">127 </span>  <span class="Constant">load-ingredients</span>
+<span id="L127" class="LineNr">127 </span>  <span class="Constant">load-inputs</span>
 <span id="L128" class="LineNr">128 </span>  <a href='075channel.mu.html#L47'>sink</a> <span class="Special">&lt;-</span> <a href='092socket.mu.html#L104'>receive-from-socket</a> socket, <a href='075channel.mu.html#L47'>sink</a>
 <span id="L129" class="LineNr">129 </span>  socket <span class="Special">&lt;-</span> $close-socket socket
 <span id="L130" class="LineNr">130 </span>]
 <span id="L131" class="LineNr">131 </span>
 <span id="L132" class="LineNr">132 </span><span class="muRecipe">def</span> <a href='092socket.mu.html#L132'>write-to-socket</a> socket:num, s:text [
 <span id="L133" class="LineNr">133 </span>  <span class="Constant">local-scope</span>
-<span id="L134" class="LineNr">134 </span>  <span class="Constant">load-ingredients</span>
+<span id="L134" class="LineNr">134 </span>  <span class="Constant">load-inputs</span>
 <span id="L135" class="LineNr">135 </span>  len:num <span class="Special">&lt;-</span> length *s
 <span id="L136" class="LineNr">136 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L137" class="LineNr">137 </span>  <span class="Delimiter">{</span>
@@ -209,7 +209,7 @@ if ('onhashchange' in window) {
 <span id="L147" class="LineNr">147 </span><span class="Comment"># like split-first, but don't eat the delimiter</span>
 <span id="L148" class="LineNr">148 </span><span class="muRecipe">def</span> <a href='092socket.mu.html#L148'>split-at</a> text:text, delim:char<span class="muRecipe"> -&gt; </span>x:text, y:text [
 <span id="L149" class="LineNr">149 </span>  <span class="Constant">local-scope</span>
-<span id="L150" class="LineNr">150 </span>  <span class="Constant">load-ingredients</span>
+<span id="L150" class="LineNr">150 </span>  <span class="Constant">load-inputs</span>
 <span id="L151" class="LineNr">151 </span>  <span class="Comment"># empty text? return empty texts</span>
 <span id="L152" class="LineNr">152 </span>  len:num <span class="Special">&lt;-</span> length *text
 <span id="L153" class="LineNr">153 </span>  <span class="Delimiter">{</span>
diff --git a/html/099hardware_checks.cc.html b/html/099hardware_checks.cc.html
index 80835903..d844615a 100644
--- a/html/099hardware_checks.cc.html
+++ b/html/099hardware_checks.cc.html
@@ -101,7 +101,7 @@ if ('onhashchange' in window) {
 <span id="L38" class="LineNr">38 </span>  <a href='003trace.cc.html#L161'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- check if <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; has any dependency-injection mistakes&quot;</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L39" class="LineNr">39 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span>  index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L40" class="LineNr">40 </span>  <span class="Conceal">¦</span> <span class="Normal">const</span> instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
-<span id="L41" class="LineNr">41 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='028call_return.cc.html#L114'>is_primitive</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L41" class="LineNr">41 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='028call_return.cc.html#L115'>is_primitive</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L42" class="LineNr">42 </span>  <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L43" class="LineNr">43 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">const</span> reagent&amp; ing = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L44" class="LineNr">44 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>ing<span class="Delimiter">)</span> || ing<span class="Delimiter">.</span>name != <span class="Constant">&quot;0&quot;</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
@@ -111,7 +111,7 @@ if ('onhashchange' in window) {
 <span id="L48" class="LineNr">48 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">const</span> reagent&amp; expected_ing = callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L49" class="LineNr">49 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Real_hardware_types<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L50" class="LineNr">50 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>*Real_hardware_types<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)</span> == *expected_ing<span class="Delimiter">.</span>type<span class="Delimiter">)</span>
-<span id="L51" class="LineNr">51 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;': only 'main' can pass 0 into a &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L162'>to_string</a><span class="Delimiter">(</span>expected_ing<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
+<span id="L51" class="LineNr">51 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <a href='003trace.cc.html#L168'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;': only 'main' can pass 0 into a &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>expected_ing<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L197'>end</a><span class="Delimiter">();</span>
 <span id="L52" class="LineNr">52 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L53" class="LineNr">53 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
 <span id="L54" class="LineNr">54 </span>  <span class="Delimiter">}</span>
diff --git a/html/100trace_browser.cc.html b/html/100trace_browser.cc.html
index b452edf2..20d31092 100644
--- a/html/100trace_browser.cc.html
+++ b/html/100trace_browser.cc.html
@@ -558,7 +558,7 @@ if ('onhashchange' in window) {
 <span id="L498" class="LineNr">498 </span>  <span class="Conceal">¦</span> exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L499" class="LineNr">499 </span>  <span class="Delimiter">}</span>
 <span id="L500" class="LineNr">500 </span>  Trace_stream = <span class="Normal">new</span> trace_stream<span class="Delimiter">;</span>
-<span id="L501" class="LineNr">501 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L238'>has_data</a><span class="Delimiter">(</span>tin<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L501" class="LineNr">501 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>tin<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L502" class="LineNr">502 </span>  <span class="Conceal">¦</span> tin &gt;&gt; std::noskipws<span class="Delimiter">;</span>
 <span id="L503" class="LineNr">503 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> skip_whitespace_but_not_newline<span class="Delimiter">(</span>tin<span class="Delimiter">);</span>
 <span id="L504" class="LineNr">504 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!isdigit<span class="Delimiter">(</span>tin<span class="Delimiter">.</span>peek<span class="Delimiter">()))</span> <span class="Delimiter">{</span>
diff --git a/html/101run_sandboxed.cc.html b/html/101run_sandboxed.cc.html
index 0dde51a3..2a5da79f 100644
--- a/html/101run_sandboxed.cc.html
+++ b/html/101run_sandboxed.cc.html
@@ -521,7 +521,7 @@ if ('onhashchange' in window) {
 <span id="L457" class="LineNr">457 </span>  <span class="Conceal">¦</span> <span class="Comment">//    x:text &lt;- new [abc]</span>
 <span id="L458" class="LineNr">458 </span>  <span class="Conceal">¦</span> <span class="Comment">//    =&gt; abc</span>
 <span id="L459" class="LineNr">459 </span>  <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='010vm.cc.html#L32'>instruction</a><span class="Delimiter">.</span>products<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L460" class="LineNr">460 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L174'>is_mu_text</a><span class="Delimiter">(</span><a href='010vm.cc.html#L32'>instruction</a><span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L460" class="LineNr">460 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span><a href='010vm.cc.html#L32'>instruction</a><span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
 <span id="L461" class="LineNr">461 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!scalar<span class="Delimiter">(</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// error handled elsewhere</span>
 <span id="L462" class="LineNr">462 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> out &lt;&lt; <a href='038new_text.cc.html#L143'>read_mu_text</a><span class="Delimiter">(</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
 <span id="L463" class="LineNr">463 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
@@ -552,7 +552,7 @@ if ('onhashchange' in window) {
 <span id="L488" class="LineNr">488 </span><span class="Normal">int</span> <a href='101run_sandboxed.cc.html#L488'>stringified_value_of_location</a><span class="Delimiter">(</span><span class="Normal">int</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L489" class="LineNr">489 </span>  <span class="Comment">// convert to string</span>
 <span id="L490" class="LineNr">490 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L491" class="LineNr">491 </span>  out &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L228'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">));</span>
+<span id="L491" class="LineNr">491 </span>  out &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L82'>address</a><span class="Delimiter">));</span>
 <span id="L492" class="LineNr">492 </span>  <span class="Identifier">return</span> <a href='038new_text.cc.html#L38'>new_mu_text</a><span class="Delimiter">(</span>out<span class="Delimiter">.</span>str<span class="Delimiter">());</span>
 <span id="L493" class="LineNr">493 </span><span class="Delimiter">}</span>
 <span id="L494" class="LineNr">494 </span>
diff --git a/html/channel.mu.html b/html/channel.mu.html
index 8144078a..13dd7638 100644
--- a/html/channel.mu.html
+++ b/html/channel.mu.html
@@ -63,7 +63,7 @@ if ('onhashchange' in window) {
 <span id="L3" class="LineNr"> 3 </span><span class="muRecipe">def</span> <a href='channel.mu.html#L3'>producer</a> <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char<span class="muRecipe"> -&gt; </span><a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char [
 <span id="L4" class="LineNr"> 4 </span>  <span class="Comment"># produce characters 1 to 5 on a channel</span>
 <span id="L5" class="LineNr"> 5 </span>  <span class="Constant">local-scope</span>
-<span id="L6" class="LineNr"> 6 </span>  <span class="Constant">load-ingredients</span>
+<span id="L6" class="LineNr"> 6 </span>  <span class="Constant">load-inputs</span>
 <span id="L7" class="LineNr"> 7 </span>  <span class="Comment"># n = 0</span>
 <span id="L8" class="LineNr"> 8 </span>  n:char <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L9" class="LineNr"> 9 </span>  <span class="Delimiter">{</span>
@@ -82,7 +82,7 @@ if ('onhashchange' in window) {
 <span id="L22" class="LineNr">22 </span><span class="muRecipe">def</span> <a href='channel.mu.html#L22'>consumer</a> <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char<span class="muRecipe"> -&gt; </span><a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char [
 <span id="L23" class="LineNr">23 </span>  <span class="Comment"># consume and print integers from a channel</span>
 <span id="L24" class="LineNr">24 </span>  <span class="Constant">local-scope</span>
-<span id="L25" class="LineNr">25 </span>  <span class="Constant">load-ingredients</span>
+<span id="L25" class="LineNr">25 </span>  <span class="Constant">load-inputs</span>
 <span id="L26" class="LineNr">26 </span>  <span class="Delimiter">{</span>
 <span id="L27" class="LineNr">27 </span>  <span class="Conceal">¦</span> <span class="Comment"># read an integer from the channel</span>
 <span id="L28" class="LineNr">28 </span>  <span class="Conceal">¦</span> n:char, eof?:bool, <a href='075channel.mu.html#L43'>source</a> <span class="Special">&lt;-</span> read <a href='075channel.mu.html#L43'>source</a>
diff --git a/html/chessboard.mu.html b/html/chessboard.mu.html
index 7376039a..77d0c653 100644
--- a/html/chessboard.mu.html
+++ b/html/chessboard.mu.html
@@ -70,7 +70,7 @@ if ('onhashchange' in window) {
 <span id="L6" class="LineNr">  6 </span>  open-console  <span class="Comment"># take control of screen, keyboard and mouse</span>
 <span id="L7" class="LineNr">  7 </span>  <a href='081print.mu.html#L46'>clear-screen</a> <span class="Constant">0/screen</span>  <span class="Comment"># non-scrolling app</span>
 <span id="L8" class="LineNr">  8 </span>
-<span id="L9" class="LineNr">  9 </span>  <span class="Comment"># The chessboard function takes keyboard and screen objects as 'ingredients'.</span>
+<span id="L9" class="LineNr">  9 </span>  <span class="Comment"># The chessboard function takes keyboard and screen objects as inputs.</span>
 <span id="L10" class="LineNr"> 10 </span>  <span class="Comment">#</span>
 <span id="L11" class="LineNr"> 11 </span>  <span class="Comment"># In Mu it is good form (though not required) to explicitly state what</span>
 <span id="L12" class="LineNr"> 12 </span>  <span class="Comment"># hardware a function needs.</span>
@@ -132,7 +132,7 @@ if ('onhashchange' in window) {
 <span id="L68" class="LineNr"> 68 </span>
 <span id="L69" class="LineNr"> 69 </span><span class="muRecipe">def</span> <a href='chessboard.mu.html#L69'>chessboard</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a> [
 <span id="L70" class="LineNr"> 70 </span>  <span class="Constant">local-scope</span>
-<span id="L71" class="LineNr"> 71 </span>  <span class="Constant">load-ingredients</span>
+<span id="L71" class="LineNr"> 71 </span>  <span class="Constant">load-inputs</span>
 <span id="L72" class="LineNr"> 72 </span>  <a href='chessboard.mu.html#L67'>board</a>:<a href='chessboard.mu.html#L67'>board</a> <span class="Special">&lt;-</span> <a href='chessboard.mu.html#L180'>initial-position</a>
 <span id="L73" class="LineNr"> 73 </span>  <span class="Comment"># hook up stdin</span>
 <span id="L74" class="LineNr"> 74 </span>  stdin-in:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, stdin-out:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char <span class="Special">&lt;-</span> <a href='075channel.mu.html#L51'>new-channel</a> <span class="Constant">10/capacity</span>
@@ -170,7 +170,7 @@ if ('onhashchange' in window) {
 <span id="L106" class="LineNr">106 </span>
 <span id="L107" class="LineNr">107 </span><span class="muRecipe">def</span> <a href='chessboard.mu.html#L107'>new-board</a> <a href='chessboard.mu.html#L180'>initial-position</a>:&amp;:@:char<span class="muRecipe"> -&gt; </span><a href='chessboard.mu.html#L67'>board</a>:<a href='chessboard.mu.html#L67'>board</a> [
 <span id="L108" class="LineNr">108 </span>  <span class="Constant">local-scope</span>
-<span id="L109" class="LineNr">109 </span>  <span class="Constant">load-ingredients</span>
+<span id="L109" class="LineNr">109 </span>  <span class="Constant">load-inputs</span>
 <span id="L110" class="LineNr">110 </span>  <span class="Comment"># assert(length(initial-position) == 64)</span>
 <span id="L111" class="LineNr">111 </span>  len:num <span class="Special">&lt;-</span> length *initial-position
 <span id="L112" class="LineNr">112 </span>  correct-length?:bool <span class="Special">&lt;-</span> equal len,<span class="Constant"> 64</span>
@@ -190,7 +190,7 @@ if ('onhashchange' in window) {
 <span id="L126" class="LineNr">126 </span>
 <span id="L127" class="LineNr">127 </span><span class="muRecipe">def</span> <a href='chessboard.mu.html#L127'>new-file</a> position:&amp;:@:char, index:num<span class="muRecipe"> -&gt; </span>result:&amp;:@:char [
 <span id="L128" class="LineNr">128 </span>  <span class="Constant">local-scope</span>
-<span id="L129" class="LineNr">129 </span>  <span class="Constant">load-ingredients</span>
+<span id="L129" class="LineNr">129 </span>  <span class="Constant">load-inputs</span>
 <span id="L130" class="LineNr">130 </span>  index <span class="Special">&lt;-</span> multiply index,<span class="Constant"> 8</span>
 <span id="L131" class="LineNr">131 </span>  result <span class="Special">&lt;-</span> new <span class="Constant">character:type</span>,<span class="Constant"> 8</span>
 <span id="L132" class="LineNr">132 </span>  row:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
@@ -207,7 +207,7 @@ if ('onhashchange' in window) {
 <span id="L143" class="LineNr">143 </span>
 <span id="L144" class="LineNr">144 </span><span class="muRecipe">def</span> <a href='chessboard.mu.html#L144'>print-board</a> <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, <a href='chessboard.mu.html#L67'>board</a>:<a href='chessboard.mu.html#L67'>board</a><span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L145" class="LineNr">145 </span>  <span class="Constant">local-scope</span>
-<span id="L146" class="LineNr">146 </span>  <span class="Constant">load-ingredients</span>
+<span id="L146" class="LineNr">146 </span>  <span class="Constant">load-inputs</span>
 <span id="L147" class="LineNr">147 </span>  row:num <span class="Special">&lt;-</span> copy<span class="Constant"> 7</span>  <span class="Comment"># start printing from the top of the board</span>
 <span id="L148" class="LineNr">148 </span>  space:char <span class="Special">&lt;-</span> copy <span class="Constant">32/space</span>
 <span id="L149" class="LineNr">149 </span>  <span class="Comment"># print each row</span>
@@ -301,7 +301,7 @@ if ('onhashchange' in window) {
 <span id="L237" class="LineNr">237 </span><span class="Comment"># prints only error messages to screen</span>
 <span id="L238" class="LineNr">238 </span><span class="muRecipe">def</span> <a href='chessboard.mu.html#L238'>read-move</a> stdin:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>result:&amp;:<a href='chessboard.mu.html#L229'>move</a>, quit?:bool, error?:bool, stdin:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L239" class="LineNr">239 </span>  <span class="Constant">local-scope</span>
-<span id="L240" class="LineNr">240 </span>  <span class="Constant">load-ingredients</span>
+<span id="L240" class="LineNr">240 </span>  <span class="Constant">load-inputs</span>
 <span id="L241" class="LineNr">241 </span>  from-file:num, quit?:bool, error?:bool <span class="Special">&lt;-</span> <a href='chessboard.mu.html#L266'>read-file</a> stdin, <a href='081print.mu.html#L16'>screen</a>
 <span id="L242" class="LineNr">242 </span>  <span class="muControl">return-if</span> quit?, <span class="Constant">0/dummy</span>
 <span id="L243" class="LineNr">243 </span>  <span class="muControl">return-if</span> error?, <span class="Constant">0/dummy</span>
@@ -329,7 +329,7 @@ if ('onhashchange' in window) {
 <span id="L265" class="LineNr">265 </span><span class="Comment"># valid values for file: 0-7</span>
 <span id="L266" class="LineNr">266 </span><span class="muRecipe">def</span> <a href='chessboard.mu.html#L266'>read-file</a> stdin:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>file:num, quit:bool, error:bool, stdin:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L267" class="LineNr">267 </span>  <span class="Constant">local-scope</span>
-<span id="L268" class="LineNr">268 </span>  <span class="Constant">load-ingredients</span>
+<span id="L268" class="LineNr">268 </span>  <span class="Constant">load-inputs</span>
 <span id="L269" class="LineNr">269 </span>  c:char, eof?:bool, stdin <span class="Special">&lt;-</span> read stdin
 <span id="L270" class="LineNr">270 </span>  <span class="muControl">return-if</span> eof?, <span class="Constant">0/dummy</span>, <span class="Constant">1/quit</span>, <span class="Constant">0/error</span>
 <span id="L271" class="LineNr">271 </span>  q-pressed?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">81/Q</span>
@@ -367,7 +367,7 @@ if ('onhashchange' in window) {
 <span id="L303" class="LineNr">303 </span><span class="Comment"># valid values for rank: 0-7</span>
 <span id="L304" class="LineNr">304 </span><span class="muRecipe">def</span> <a href='chessboard.mu.html#L304'>read-rank</a> stdin:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>rank:num, quit?:bool, error?:bool, stdin:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L305" class="LineNr">305 </span>  <span class="Constant">local-scope</span>
-<span id="L306" class="LineNr">306 </span>  <span class="Constant">load-ingredients</span>
+<span id="L306" class="LineNr">306 </span>  <span class="Constant">load-inputs</span>
 <span id="L307" class="LineNr">307 </span>  c:char, eof?:bool, stdin <span class="Special">&lt;-</span> read stdin
 <span id="L308" class="LineNr">308 </span>  <span class="muControl">return-if</span> eof?, <span class="Constant">0/dummy</span>, <span class="Constant">1/quit</span>, <span class="Constant">0/error</span>
 <span id="L309" class="LineNr">309 </span>  q-pressed?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">81/Q</span>
@@ -405,7 +405,7 @@ if ('onhashchange' in window) {
 <span id="L341" class="LineNr">341 </span><span class="Comment"># return true on error</span>
 <span id="L342" class="LineNr">342 </span><span class="muRecipe">def</span> <a href='chessboard.mu.html#L342'>expect-from-channel</a> stdin:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, expected:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>result:bool, stdin:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
 <span id="L343" class="LineNr">343 </span>  <span class="Constant">local-scope</span>
-<span id="L344" class="LineNr">344 </span>  <span class="Constant">load-ingredients</span>
+<span id="L344" class="LineNr">344 </span>  <span class="Constant">load-inputs</span>
 <span id="L345" class="LineNr">345 </span>  c:char, eof?:bool, stdin <span class="Special">&lt;-</span> read stdin
 <span id="L346" class="LineNr">346 </span>  <span class="muControl">return-if</span> eof? <span class="Constant">1/true</span>
 <span id="L347" class="LineNr">347 </span>  <span class="Delimiter">{</span>
@@ -422,7 +422,7 @@ if ('onhashchange' in window) {
 <span id="L358" class="LineNr">358 </span>  <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char <span class="Special">&lt;-</span> <a href='075channel.mu.html#L51'>new-channel</a> <span class="Constant">2/capacity</span>
 <span id="L359" class="LineNr">359 </span>  read-move-routine:num/routine <span class="Special">&lt;-</span> start-running <a href='chessboard.mu.html#L238'>read-move</a>, <a href='075channel.mu.html#L43'>source</a>, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>
 <span id="L360" class="LineNr">360 </span>  run [
-<span id="L361" class="LineNr">361 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for input</span>
+<span id="L361" class="LineNr">361 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for keypress</span>
 <span id="L362" class="LineNr">362 </span>  <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
 <span id="L363" class="LineNr">363 </span>  <span class="Conceal">¦</span> read-move-state:num <span class="Special">&lt;-</span> routine-state read-move-routine
 <span id="L364" class="LineNr">364 </span>  <span class="Conceal">¦</span> waiting?:bool <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@@ -431,7 +431,7 @@ if ('onhashchange' in window) {
 <span id="L367" class="LineNr">367 </span>  <span class="Conceal">¦</span> <span class="Comment"># press 'a'</span>
 <span id="L368" class="LineNr">368 </span>  <span class="Conceal">¦</span> <a href='075channel.mu.html#L47'>sink</a> <span class="Special">&lt;-</span> <a href='075channel.mu.html#L67'>write</a> <a href='075channel.mu.html#L47'>sink</a>, <span class="Constant">97/a</span>
 <span id="L369" class="LineNr">369 </span>  <span class="Conceal">¦</span> restart read-move-routine
-<span id="L370" class="LineNr">370 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for input</span>
+<span id="L370" class="LineNr">370 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for keypress</span>
 <span id="L371" class="LineNr">371 </span>  <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
 <span id="L372" class="LineNr">372 </span>  <span class="Conceal">¦</span> read-move-state <span class="Special">&lt;-</span> routine-state read-move-routine
 <span id="L373" class="LineNr">373 </span>  <span class="Conceal">¦</span> waiting? <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@@ -440,7 +440,7 @@ if ('onhashchange' in window) {
 <span id="L376" class="LineNr">376 </span>  <span class="Conceal">¦</span> <span class="Comment"># press '2'</span>
 <span id="L377" class="LineNr">377 </span>  <span class="Conceal">¦</span> <a href='075channel.mu.html#L47'>sink</a> <span class="Special">&lt;-</span> <a href='075channel.mu.html#L67'>write</a> <a href='075channel.mu.html#L47'>sink</a>, <span class="Constant">50/'2'</span>
 <span id="L378" class="LineNr">378 </span>  <span class="Conceal">¦</span> restart read-move-routine
-<span id="L379" class="LineNr">379 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for input</span>
+<span id="L379" class="LineNr">379 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for keypress</span>
 <span id="L380" class="LineNr">380 </span>  <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
 <span id="L381" class="LineNr">381 </span>  <span class="Conceal">¦</span> read-move-state <span class="Special">&lt;-</span> routine-state read-move-routine
 <span id="L382" class="LineNr">382 </span>  <span class="Conceal">¦</span> waiting? <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@@ -449,7 +449,7 @@ if ('onhashchange' in window) {
 <span id="L385" class="LineNr">385 </span>  <span class="Conceal">¦</span> <span class="Comment"># press '-'</span>
 <span id="L386" class="LineNr">386 </span>  <span class="Conceal">¦</span> <a href='075channel.mu.html#L47'>sink</a> <span class="Special">&lt;-</span> <a href='075channel.mu.html#L67'>write</a> <a href='075channel.mu.html#L47'>sink</a>, <span class="Constant">45/'-'</span>
 <span id="L387" class="LineNr">387 </span>  <span class="Conceal">¦</span> restart read-move-routine
-<span id="L388" class="LineNr">388 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for input</span>
+<span id="L388" class="LineNr">388 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for keypress</span>
 <span id="L389" class="LineNr">389 </span>  <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
 <span id="L390" class="LineNr">390 </span>  <span class="Conceal">¦</span> read-move-state <span class="Special">&lt;-</span> routine-state read-move-routine
 <span id="L391" class="LineNr">391 </span>  <span class="Conceal">¦</span> waiting? <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@@ -458,7 +458,7 @@ if ('onhashchange' in window) {
 <span id="L394" class="LineNr">394 </span>  <span class="Conceal">¦</span> <span class="Comment"># press 'a'</span>
 <span id="L395" class="LineNr">395 </span>  <span class="Conceal">¦</span> <a href='075channel.mu.html#L47'>sink</a> <span class="Special">&lt;-</span> <a href='075channel.mu.html#L67'>write</a> <a href='075channel.mu.html#L47'>sink</a>, <span class="Constant">97/a</span>
 <span id="L396" class="LineNr">396 </span>  <span class="Conceal">¦</span> restart read-move-routine
-<span id="L397" class="LineNr">397 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for input</span>
+<span id="L397" class="LineNr">397 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for keypress</span>
 <span id="L398" class="LineNr">398 </span>  <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
 <span id="L399" class="LineNr">399 </span>  <span class="Conceal">¦</span> read-move-state <span class="Special">&lt;-</span> routine-state read-move-routine
 <span id="L400" class="LineNr">400 </span>  <span class="Conceal">¦</span> waiting? <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@@ -467,7 +467,7 @@ if ('onhashchange' in window) {
 <span id="L403" class="LineNr">403 </span>  <span class="Conceal">¦</span> <span class="Comment"># press '4'</span>
 <span id="L404" class="LineNr">404 </span>  <span class="Conceal">¦</span> <a href='075channel.mu.html#L47'>sink</a> <span class="Special">&lt;-</span> <a href='075channel.mu.html#L67'>write</a> <a href='075channel.mu.html#L47'>sink</a>, <span class="Constant">52/'4'</span>
 <span id="L405" class="LineNr">405 </span>  <span class="Conceal">¦</span> restart read-move-routine
-<span id="L406" class="LineNr">406 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for input</span>
+<span id="L406" class="LineNr">406 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' still waiting for keypress</span>
 <span id="L407" class="LineNr">407 </span>  <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
 <span id="L408" class="LineNr">408 </span>  <span class="Conceal">¦</span> read-move-state <span class="Special">&lt;-</span> routine-state read-move-routine
 <span id="L409" class="LineNr">409 </span>  <span class="Conceal">¦</span> waiting? <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@@ -495,7 +495,7 @@ if ('onhashchange' in window) {
 <span id="L431" class="LineNr">431 </span>  <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char <span class="Special">&lt;-</span> <a href='075channel.mu.html#L51'>new-channel</a> <span class="Constant">2/capacity</span>
 <span id="L432" class="LineNr">432 </span>  read-move-routine:num <span class="Special">&lt;-</span> start-running <a href='chessboard.mu.html#L238'>read-move</a>, <a href='075channel.mu.html#L43'>source</a>, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>
 <span id="L433" class="LineNr">433 </span>  run [
-<span id="L434" class="LineNr">434 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for input</span>
+<span id="L434" class="LineNr">434 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for keypress</span>
 <span id="L435" class="LineNr">435 </span>  <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
 <span id="L436" class="LineNr">436 </span>  <span class="Conceal">¦</span> read-move-state:num <span class="Special">&lt;-</span> routine-state read-move-routine
 <span id="L437" class="LineNr">437 </span>  <span class="Conceal">¦</span> waiting?:bool <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@@ -523,7 +523,7 @@ if ('onhashchange' in window) {
 <span id="L459" class="LineNr">459 </span>  <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char <span class="Special">&lt;-</span> <a href='075channel.mu.html#L51'>new-channel</a> <span class="Constant">2/capacity</span>
 <span id="L460" class="LineNr">460 </span>  read-move-routine:num <span class="Special">&lt;-</span> start-running <a href='chessboard.mu.html#L238'>read-move</a>, <a href='075channel.mu.html#L43'>source</a>, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>
 <span id="L461" class="LineNr">461 </span>  run [
-<span id="L462" class="LineNr">462 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for input</span>
+<span id="L462" class="LineNr">462 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for keypress</span>
 <span id="L463" class="LineNr">463 </span>  <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
 <span id="L464" class="LineNr">464 </span>  <span class="Conceal">¦</span> read-move-state:num <span class="Special">&lt;-</span> routine-state read-move-routine
 <span id="L465" class="LineNr">465 </span>  <span class="Conceal">¦</span> waiting?:bool <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@@ -545,7 +545,7 @@ if ('onhashchange' in window) {
 <span id="L481" class="LineNr">481 </span>  <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char <span class="Special">&lt;-</span> <a href='075channel.mu.html#L51'>new-channel</a> <span class="Constant">2/capacity</span>
 <span id="L482" class="LineNr">482 </span>  read-move-routine:num <span class="Special">&lt;-</span> start-running <a href='chessboard.mu.html#L238'>read-move</a>, <a href='075channel.mu.html#L43'>source</a>, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>
 <span id="L483" class="LineNr">483 </span>  run [
-<span id="L484" class="LineNr">484 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for input</span>
+<span id="L484" class="LineNr">484 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for keypress</span>
 <span id="L485" class="LineNr">485 </span>  <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
 <span id="L486" class="LineNr">486 </span>  <span class="Conceal">¦</span> read-move-state:num <span class="Special">&lt;-</span> routine-state read-move-routine
 <span id="L487" class="LineNr">487 </span>  <span class="Conceal">¦</span> waiting?:bool <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@@ -568,7 +568,7 @@ if ('onhashchange' in window) {
 <span id="L504" class="LineNr">504 </span>  <a href='075channel.mu.html#L43'>source</a>:&amp;:<a href='075channel.mu.html#L43'>source</a>:char, <a href='075channel.mu.html#L47'>sink</a>:&amp;:<a href='075channel.mu.html#L47'>sink</a>:char <span class="Special">&lt;-</span> <a href='075channel.mu.html#L51'>new-channel</a> <span class="Constant">2/capacity</span>
 <span id="L505" class="LineNr">505 </span>  read-move-routine:num <span class="Special">&lt;-</span> start-running <a href='chessboard.mu.html#L238'>read-move</a>, <a href='075channel.mu.html#L43'>source</a>, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>
 <span id="L506" class="LineNr">506 </span>  run [
-<span id="L507" class="LineNr">507 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for input</span>
+<span id="L507" class="LineNr">507 </span>  <span class="Conceal">¦</span> <span class="Comment"># 'read-move' is waiting for keypress</span>
 <span id="L508" class="LineNr">508 </span>  <span class="Conceal">¦</span> wait-for-routine-to-block read-move-routine
 <span id="L509" class="LineNr">509 </span>  <span class="Conceal">¦</span> read-move-state:num <span class="Special">&lt;-</span> routine-state read-move-routine
 <span id="L510" class="LineNr">510 </span>  <span class="Conceal">¦</span> waiting?:bool <span class="Special">&lt;-</span> not-equal read-move-state, <span class="Constant">2/discontinued</span>
@@ -587,7 +587,7 @@ if ('onhashchange' in window) {
 <span id="L523" class="LineNr">523 </span>
 <span id="L524" class="LineNr">524 </span><span class="muRecipe">def</span> <a href='chessboard.mu.html#L524'>make-move</a> <a href='chessboard.mu.html#L67'>board</a>:<a href='chessboard.mu.html#L67'>board</a>, m:&amp;:<a href='chessboard.mu.html#L229'>move</a><span class="muRecipe"> -&gt; </span><a href='chessboard.mu.html#L67'>board</a>:<a href='chessboard.mu.html#L67'>board</a> [
 <span id="L525" class="LineNr">525 </span>  <span class="Constant">local-scope</span>
-<span id="L526" class="LineNr">526 </span>  <span class="Constant">load-ingredients</span>
+<span id="L526" class="LineNr">526 </span>  <span class="Constant">load-inputs</span>
 <span id="L527" class="LineNr">527 </span>  from-file:num <span class="Special">&lt;-</span> get *m, <span class="Constant">from-file:offset</span>
 <span id="L528" class="LineNr">528 </span>  from-rank:num <span class="Special">&lt;-</span> get *m, <span class="Constant">from-rank:offset</span>
 <span id="L529" class="LineNr">529 </span>  to-file:num <span class="Special">&lt;-</span> get *m, <span class="Constant">to-file:offset</span>
diff --git a/html/continuation1.mu.html b/html/continuation1.mu.html
index 2a63f0bb..d0ec20a1 100644
--- a/html/continuation1.mu.html
+++ b/html/continuation1.mu.html
@@ -77,7 +77,7 @@ if ('onhashchange' in window) {
 <span id="L19" class="LineNr">19 </span>
 <span id="L20" class="LineNr">20 </span><span class="muRecipe">def</span> <a href='continuation1.mu.html#L20'>create-yielder</a><span class="muRecipe"> -&gt; </span>n:num [
 <span id="L21" class="LineNr">21 </span>  <span class="Constant">local-scope</span>
-<span id="L22" class="LineNr">22 </span>  <span class="Constant">load-ingredients</span>
+<span id="L22" class="LineNr">22 </span>  <span class="Constant">load-inputs</span>
 <span id="L23" class="LineNr">23 </span>  return-continuation-until-mark
 <span id="L24" class="LineNr">24 </span>  <span class="muControl">return</span><span class="Constant"> 1</span>
 <span id="L25" class="LineNr">25 </span>]
diff --git a/html/continuation2.mu.html b/html/continuation2.mu.html
index 95756684..823b5227 100644
--- a/html/continuation2.mu.html
+++ b/html/continuation2.mu.html
@@ -88,7 +88,7 @@ if ('onhashchange' in window) {
 <span id="L28" class="LineNr">28 </span>
 <span id="L29" class="LineNr">29 </span><span class="muRecipe">def</span> <a href='continuation2.mu.html#L29'>create-yielder</a> l:&amp;:<a href='064list.mu.html#L6'>list</a>:num<span class="muRecipe"> -&gt; </span>n:num, done?:bool [
 <span id="L30" class="LineNr">30 </span>  <span class="Constant">local-scope</span>
-<span id="L31" class="LineNr">31 </span>  <span class="Constant">load-ingredients</span>
+<span id="L31" class="LineNr">31 </span>  <span class="Constant">load-inputs</span>
 <span id="L32" class="LineNr">32 </span>  return-continuation-until-mark
 <span id="L33" class="LineNr">33 </span>  done? <span class="Special">&lt;-</span> equal l,<span class="Constant"> 0</span>
 <span id="L34" class="LineNr">34 </span>  <span class="muControl">return-if</span> done?,<span class="Constant"> 0</span>
diff --git a/html/continuation4.mu.html b/html/continuation4.mu.html
index 2a1cd000..89fbcd3a 100644
--- a/html/continuation4.mu.html
+++ b/html/continuation4.mu.html
@@ -90,7 +90,7 @@ if ('onhashchange' in window) {
 <span id="L30" class="LineNr">30 </span>
 <span id="L31" class="LineNr">31 </span><span class="muRecipe">def</span> <a href='continuation4.mu.html#L31'>create-yielder</a> l:&amp;:<a href='064list.mu.html#L6'>list</a>:num<span class="muRecipe"> -&gt; </span>n:num, done?:bool [
 <span id="L32" class="LineNr">32 </span>  <span class="Constant">local-scope</span>
-<span id="L33" class="LineNr">33 </span>  <span class="Constant">load-ingredients</span>
+<span id="L33" class="LineNr">33 </span>  <span class="Constant">load-inputs</span>
 <span id="L34" class="LineNr">34 </span>  <span class="Delimiter">{</span>
 <span id="L35" class="LineNr">35 </span>  <span class="Conceal">¦</span> done? <span class="Special">&lt;-</span> equal l,<span class="Constant"> 0</span>
 <span id="L36" class="LineNr">36 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> done?
diff --git a/html/continuation5.mu.html b/html/continuation5.mu.html
index 500e926f..961eea7a 100644
--- a/html/continuation5.mu.html
+++ b/html/continuation5.mu.html
@@ -59,7 +59,7 @@ if ('onhashchange' in window) {
 <body onload='JumpToLine();'>
 <pre id='vimCodeElement'>
 <span id="L1" class="LineNr"> 1 </span><span class="Comment"># Example program showing that a 'paused' continuation can be 'resumed' with</span>
-<span id="L2" class="LineNr"> 2 </span><span class="Comment"># ingredients.</span>
+<span id="L2" class="LineNr"> 2 </span><span class="Comment"># inputs.</span>
 <span id="L3" class="LineNr"> 3 </span><span class="Comment">#</span>
 <span id="L4" class="LineNr"> 4 </span><span class="Comment"># Print out a list of numbers, first adding 0 to the first, 1 to the second, 2</span>
 <span id="L5" class="LineNr"> 5 </span><span class="Comment"># to the third, and so on.</span>
@@ -93,7 +93,7 @@ if ('onhashchange' in window) {
 <span id="L33" class="LineNr">33 </span>
 <span id="L34" class="LineNr">34 </span><span class="muRecipe">def</span> <a href='continuation5.mu.html#L34'>create-yielder</a> l:&amp;:<a href='064list.mu.html#L6'>list</a>:num<span class="muRecipe"> -&gt; </span>n:num, done?:bool [
 <span id="L35" class="LineNr">35 </span>  <span class="Constant">local-scope</span>
-<span id="L36" class="LineNr">36 </span>  <span class="Constant">load-ingredients</span>
+<span id="L36" class="LineNr">36 </span>  <span class="Constant">load-inputs</span>
 <span id="L37" class="LineNr">37 </span>  a:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L38" class="LineNr">38 </span>  <span class="Delimiter">{</span>
 <span id="L39" class="LineNr">39 </span>  <span class="Conceal">¦</span> done? <span class="Special">&lt;-</span> equal l,<span class="Constant"> 0</span>
diff --git a/html/counters.mu.html b/html/counters.mu.html
index a0eaed37..bc824899 100644
--- a/html/counters.mu.html
+++ b/html/counters.mu.html
@@ -60,12 +60,12 @@ if ('onhashchange' in window) {
 <span id="L3" class="LineNr"> 3 </span>
 <span id="L4" class="LineNr"> 4 </span><span class="muRecipe">def</span> <a href='counters.mu.html#L4'>new-counter</a> n:num<span class="muRecipe"> -&gt; </span><span class="Constant">default-space</span>:space [
 <span id="L5" class="LineNr"> 5 </span>  <span class="Constant">default-space</span> <span class="Special">&lt;-</span> new <span class="Constant">location:type</span>,<span class="Constant"> 30</span>
-<span id="L6" class="LineNr"> 6 </span>  <span class="Constant">load-ingredients</span>  <span class="Comment"># initialize n</span>
+<span id="L6" class="LineNr"> 6 </span>  <span class="Constant">load-inputs</span>  <span class="Comment"># initialize n</span>
 <span id="L7" class="LineNr"> 7 </span>]
 <span id="L8" class="LineNr"> 8 </span>
 <span id="L9" class="LineNr"> 9 </span><span class="muRecipe">def</span> <a href='counters.mu.html#L9'>increment-counter</a> outer:space/names:<a href='counters.mu.html#L4'>new-counter</a>, x:num<span class="muRecipe"> -&gt; </span>n:num/space:1 [
 <span id="L10" class="LineNr">10 </span>  <span class="Constant">local-scope</span>
-<span id="L11" class="LineNr">11 </span>  <span class="Constant">load-ingredients</span>
+<span id="L11" class="LineNr">11 </span>  <span class="Constant">load-inputs</span>
 <span id="L12" class="LineNr">12 </span>  0:space/names:<a href='counters.mu.html#L4'>new-counter</a> <span class="Special">&lt;-</span> copy outer  <span class="Comment"># setup outer space; it *must* come from 'new-counter'</span>
 <span id="L13" class="LineNr">13 </span>  n/space:1 <span class="Special">&lt;-</span> add n/space:1, x
 <span id="L14" class="LineNr">14 </span>]
diff --git a/html/edit/001-editor.mu.html b/html/edit/001-editor.mu.html
index 215debfd..2f22aa64 100644
--- a/html/edit/001-editor.mu.html
+++ b/html/edit/001-editor.mu.html
@@ -68,7 +68,7 @@ if ('onhashchange' in window) {
 <span id="L4" class="LineNr">  4 </span><span class="Comment"># screen dimensions, then stop</span>
 <span id="L5" class="LineNr">  5 </span><span class="muRecipe">def</span> main text:text [
 <span id="L6" class="LineNr">  6 </span>  <span class="Constant">local-scope</span>
-<span id="L7" class="LineNr">  7 </span>  <span class="Constant">load-ingredients</span>
+<span id="L7" class="LineNr">  7 </span>  <span class="Constant">load-inputs</span>
 <span id="L8" class="LineNr">  8 </span>  open-console
 <span id="L9" class="LineNr">  9 </span>  <a href='../081print.mu.html#L46'>clear-screen</a> <span class="Constant">0/screen</span>  <span class="Comment"># non-scrolling app</span>
 <span id="L10" class="LineNr"> 10 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> text, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
@@ -114,7 +114,7 @@ if ('onhashchange' in window) {
 <span id="L50" class="LineNr"> 50 </span><span class="Comment">#   right is exclusive</span>
 <span id="L51" class="LineNr"> 51 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L51'>new-editor</a> s:text, left:num, right:num<span class="muRecipe"> -&gt; </span>result:&amp;:editor [
 <span id="L52" class="LineNr"> 52 </span>  <span class="Constant">local-scope</span>
-<span id="L53" class="LineNr"> 53 </span>  <span class="Constant">load-ingredients</span>
+<span id="L53" class="LineNr"> 53 </span>  <span class="Constant">load-inputs</span>
 <span id="L54" class="LineNr"> 54 </span>  <span class="Comment"># no clipping of bounds</span>
 <span id="L55" class="LineNr"> 55 </span>  right <span class="Special">&lt;-</span> subtract right,<span class="Constant"> 1</span>
 <span id="L56" class="LineNr"> 56 </span>  result <span class="Special">&lt;-</span> new <span class="Constant">editor:type</span>
@@ -135,7 +135,7 @@ if ('onhashchange' in window) {
 <span id="L71" class="LineNr"> 71 </span>
 <span id="L72" class="LineNr"> 72 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L72'>insert-text</a> editor:&amp;:editor, text:text<span class="muRecipe"> -&gt; </span>editor:&amp;:editor [
 <span id="L73" class="LineNr"> 73 </span>  <span class="Constant">local-scope</span>
-<span id="L74" class="LineNr"> 74 </span>  <span class="Constant">load-ingredients</span>
+<span id="L74" class="LineNr"> 74 </span>  <span class="Constant">load-inputs</span>
 <span id="L75" class="LineNr"> 75 </span>  curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
 <span id="L76" class="LineNr"> 76 </span>  insert curr, text
 <span id="L77" class="LineNr"> 77 </span>]
@@ -170,7 +170,7 @@ if ('onhashchange' in window) {
 <span id="L106" class="LineNr">106 </span><span class="Comment"># outside text.</span>
 <span id="L107" class="LineNr">107 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L107'>render</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor<span class="muRecipe"> -&gt; </span>last-row:num, last-column:num, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor [
 <span id="L108" class="LineNr">108 </span>  <span class="Constant">local-scope</span>
-<span id="L109" class="LineNr">109 </span>  <span class="Constant">load-ingredients</span>
+<span id="L109" class="LineNr">109 </span>  <span class="Constant">load-inputs</span>
 <span id="L110" class="LineNr">110 </span>  <span class="muControl">return-unless</span> editor, <span class="Constant">1/top</span>, <span class="Constant">0/left</span>
 <span id="L111" class="LineNr">111 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
 <span id="L112" class="LineNr">112 </span>  <a href='../081print.mu.html#L782'>screen-height</a>:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L782'>screen-height</a> <a href='../081print.mu.html#L16'>screen</a>
@@ -270,7 +270,7 @@ if ('onhashchange' in window) {
 <span id="L206" class="LineNr">206 </span>
 <span id="L207" class="LineNr">207 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L207'>clear-screen-from</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, row:num, column:num, left:num, right:num<span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L208" class="LineNr">208 </span>  <span class="Constant">local-scope</span>
-<span id="L209" class="LineNr">209 </span>  <span class="Constant">load-ingredients</span>
+<span id="L209" class="LineNr">209 </span>  <span class="Constant">load-inputs</span>
 <span id="L210" class="LineNr">210 </span><span class="CommentedCode">#?   stash [clear-screen-from] row column [between] left [and] right</span>
 <span id="L211" class="LineNr">211 </span>  <span class="Comment"># if it's the real screen, use the optimized primitive</span>
 <span id="L212" class="LineNr">212 </span>  <span class="Delimiter">{</span>
@@ -286,7 +286,7 @@ if ('onhashchange' in window) {
 <span id="L222" class="LineNr">222 </span>
 <span id="L223" class="LineNr">223 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L223'>clear-rest-of-screen</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, row:num, left:num, right:num<span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L224" class="LineNr">224 </span>  <span class="Constant">local-scope</span>
-<span id="L225" class="LineNr">225 </span>  <span class="Constant">load-ingredients</span>
+<span id="L225" class="LineNr">225 </span>  <span class="Constant">load-inputs</span>
 <span id="L226" class="LineNr">226 </span>  row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
 <span id="L227" class="LineNr">227 </span>  <span class="Comment"># if it's the real screen, use the optimized primitive</span>
 <span id="L228" class="LineNr">228 </span>  <span class="Delimiter">{</span>
@@ -460,7 +460,7 @@ if ('onhashchange' in window) {
 <span id="L396" class="LineNr">396 </span><span class="Comment"># so far the previous color is all the information we need; that may change</span>
 <span id="L397" class="LineNr">397 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L397'>get-color</a> color:num, c:char<span class="muRecipe"> -&gt; </span>color:num [
 <span id="L398" class="LineNr">398 </span>  <span class="Constant">local-scope</span>
-<span id="L399" class="LineNr">399 </span>  <span class="Constant">load-ingredients</span>
+<span id="L399" class="LineNr">399 </span>  <span class="Constant">load-inputs</span>
 <span id="L400" class="LineNr">400 </span>  color-is-white?:bool <span class="Special">&lt;-</span> equal color, <span class="Constant">7/white</span>
 <span id="L401" class="LineNr">401 </span>  <span class="Comment"># if color is white and next character is '#', switch color to blue</span>
 <span id="L402" class="LineNr">402 </span>  <span class="Delimiter">{</span>
diff --git a/html/edit/002-typing.mu.html b/html/edit/002-typing.mu.html
index eb828377..459e32c0 100644
--- a/html/edit/002-typing.mu.html
+++ b/html/edit/002-typing.mu.html
@@ -67,7 +67,7 @@ if ('onhashchange' in window) {
 <span id="L4" class="LineNr">   4 </span><span class="Comment"># hit ctrl-c to exit</span>
 <span id="L5" class="LineNr">   5 </span><span class="muRecipe">def!</span> main text:text [
 <span id="L6" class="LineNr">   6 </span>  <span class="Constant">local-scope</span>
-<span id="L7" class="LineNr">   7 </span>  <span class="Constant">load-ingredients</span>
+<span id="L7" class="LineNr">   7 </span>  <span class="Constant">load-inputs</span>
 <span id="L8" class="LineNr">   8 </span>  open-console
 <span id="L9" class="LineNr">   9 </span>  <a href='../081print.mu.html#L46'>clear-screen</a> <span class="Constant">0/screen</span>  <span class="Comment"># non-scrolling app</span>
 <span id="L10" class="LineNr">  10 </span>  editor:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> text, <span class="Constant">5/left</span>, <span class="Constant">45/right</span>
@@ -78,7 +78,7 @@ if ('onhashchange' in window) {
 <span id="L15" class="LineNr">  15 </span>
 <span id="L16" class="LineNr">  16 </span><span class="muRecipe">def</span> <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>:&amp;:<a href='../084console.mu.html#L23'>console</a>, editor:&amp;:editor<span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>:&amp;:<a href='../084console.mu.html#L23'>console</a>, editor:&amp;:editor [
 <span id="L17" class="LineNr">  17 </span>  <span class="Constant">local-scope</span>
-<span id="L18" class="LineNr">  18 </span>  <span class="Constant">load-ingredients</span>
+<span id="L18" class="LineNr">  18 </span>  <span class="Constant">load-inputs</span>
 <span id="L19" class="LineNr">  19 </span>  <span class="Delimiter">{</span>
 <span id="L20" class="LineNr">  20 </span>  <span class="Conceal">¦</span> <span class="Comment"># looping over each (keyboard or touch) event as it occurs</span>
 <span id="L21" class="LineNr">  21 </span><span class="Constant">  </span><span class="Conceal">¦</span><span class="Constant"> +next-event</span>
@@ -112,7 +112,7 @@ if ('onhashchange' in window) {
 <span id="L49" class="LineNr">  49 </span><span class="Comment"># process click, return if it was on current editor</span>
 <span id="L50" class="LineNr">  50 </span><span class="muRecipe">def</span> move-cursor editor:&amp;:editor, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, t:<a href='../084console.mu.html#L12'>touch-event</a><span class="muRecipe"> -&gt; </span>in-focus?:bool, editor:&amp;:editor [
 <span id="L51" class="LineNr">  51 </span>  <span class="Constant">local-scope</span>
-<span id="L52" class="LineNr">  52 </span>  <span class="Constant">load-ingredients</span>
+<span id="L52" class="LineNr">  52 </span>  <span class="Constant">load-inputs</span>
 <span id="L53" class="LineNr">  53 </span>  <span class="muControl">return-unless</span> editor, <span class="Constant">0/false</span>
 <span id="L54" class="LineNr">  54 </span>  click-row:num <span class="Special">&lt;-</span> get t, <span class="Constant">row:offset</span>
 <span id="L55" class="LineNr">  55 </span>  <span class="muControl">return-unless</span> click-row, <span class="Constant">0/false</span>  <span class="Comment"># ignore clicks on 'menu'</span>
@@ -137,7 +137,7 @@ if ('onhashchange' in window) {
 <span id="L74" class="LineNr">  74 </span><span class="Comment"># past the last line it positions at end of last line.</span>
 <span id="L75" class="LineNr">  75 </span><span class="muRecipe">def</span> <a href='002-typing.mu.html#L75'>snap-cursor</a> editor:&amp;:editor, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, target-row:num, target-column:num<span class="muRecipe"> -&gt; </span>editor:&amp;:editor [
 <span id="L76" class="LineNr">  76 </span>  <span class="Constant">local-scope</span>
-<span id="L77" class="LineNr">  77 </span>  <span class="Constant">load-ingredients</span>
+<span id="L77" class="LineNr">  77 </span>  <span class="Constant">load-inputs</span>
 <span id="L78" class="LineNr">  78 </span>  <span class="muControl">return-unless</span> editor
 <span id="L79" class="LineNr">  79 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
 <span id="L80" class="LineNr">  80 </span>  right:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">right:offset</span>
@@ -228,7 +228,7 @@ if ('onhashchange' in window) {
 <span id="L165" class="LineNr"> 165 </span><span class="Comment"># Set 'go-render?' to true to indicate the caller must perform a non-minimal update.</span>
 <span id="L166" class="LineNr"> 166 </span><span class="muRecipe">def</span> <a href='002-typing.mu.html#L166'>handle-keyboard-event</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor, e:<a href='../084console.mu.html#L4'>event</a><span class="muRecipe"> -&gt; </span>go-render?:bool, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor [
 <span id="L167" class="LineNr"> 167 </span>  <span class="Constant">local-scope</span>
-<span id="L168" class="LineNr"> 168 </span>  <span class="Constant">load-ingredients</span>
+<span id="L168" class="LineNr"> 168 </span>  <span class="Constant">load-inputs</span>
 <span id="L169" class="LineNr"> 169 </span>  <span class="muControl">return-unless</span> editor, <span class="Constant">0/don't-render</span>
 <span id="L170" class="LineNr"> 170 </span>  <a href='../081print.mu.html#L768'>screen-width</a>:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L768'>screen-width</a> <a href='../081print.mu.html#L16'>screen</a>
 <span id="L171" class="LineNr"> 171 </span>  <a href='../081print.mu.html#L782'>screen-height</a>:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L782'>screen-height</a> <a href='../081print.mu.html#L16'>screen</a>
@@ -265,7 +265,7 @@ if ('onhashchange' in window) {
 <span id="L202" class="LineNr"> 202 </span>
 <span id="L203" class="LineNr"> 203 </span><span class="muRecipe">def</span> <a href='002-typing.mu.html#L203'>insert-at-cursor</a> editor:&amp;:editor, c:char, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>go-render?:bool, editor:&amp;:editor, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L204" class="LineNr"> 204 </span>  <span class="Constant">local-scope</span>
-<span id="L205" class="LineNr"> 205 </span>  <span class="Constant">load-ingredients</span>
+<span id="L205" class="LineNr"> 205 </span>  <span class="Constant">load-inputs</span>
 <span id="L206" class="LineNr"> 206 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
 <span id="L207" class="LineNr"> 207 </span>  insert c, before-cursor
 <span id="L208" class="LineNr"> 208 </span>  before-cursor <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
@@ -327,7 +327,7 @@ if ('onhashchange' in window) {
 <span id="L264" class="LineNr"> 264 </span><span class="Comment"># helper for tests</span>
 <span id="L265" class="LineNr"> 265 </span><span class="muRecipe">def</span> <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor<span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor [
 <span id="L266" class="LineNr"> 266 </span>  <span class="Constant">local-scope</span>
-<span id="L267" class="LineNr"> 267 </span>  <span class="Constant">load-ingredients</span>
+<span id="L267" class="LineNr"> 267 </span>  <span class="Constant">load-inputs</span>
 <span id="L268" class="LineNr"> 268 </span>  old-top-idx:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L509'>save-top-idx</a> <a href='../081print.mu.html#L16'>screen</a>
 <span id="L269" class="LineNr"> 269 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
 <span id="L270" class="LineNr"> 270 </span>  right:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">right:offset</span>
@@ -930,7 +930,7 @@ if ('onhashchange' in window) {
 <span id="L867" class="LineNr"> 867 </span>
 <span id="L868" class="LineNr"> 868 </span><span class="muRecipe">def</span> <a href='002-typing.mu.html#L868'>insert-new-line-and-indent</a> editor:&amp;:editor, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>editor:&amp;:editor, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L869" class="LineNr"> 869 </span>  <span class="Constant">local-scope</span>
-<span id="L870" class="LineNr"> 870 </span>  <span class="Constant">load-ingredients</span>
+<span id="L870" class="LineNr"> 870 </span>  <span class="Constant">load-inputs</span>
 <span id="L871" class="LineNr"> 871 </span>  cursor-row:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
 <span id="L872" class="LineNr"> 872 </span>  cursor-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
 <span id="L873" class="LineNr"> 873 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
@@ -976,7 +976,7 @@ if ('onhashchange' in window) {
 <span id="L913" class="LineNr"> 913 </span>
 <span id="L914" class="LineNr"> 914 </span><span class="muRecipe">def</span> <a href='002-typing.mu.html#L914'>at-start-of-wrapped-line?</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L915" class="LineNr"> 915 </span>  <span class="Constant">local-scope</span>
-<span id="L916" class="LineNr"> 916 </span>  <span class="Constant">load-ingredients</span>
+<span id="L916" class="LineNr"> 916 </span>  <span class="Constant">load-inputs</span>
 <span id="L917" class="LineNr"> 917 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
 <span id="L918" class="LineNr"> 918 </span>  cursor-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
 <span id="L919" class="LineNr"> 919 </span>  cursor-at-left?:bool <span class="Special">&lt;-</span> equal cursor-column, left
@@ -996,7 +996,7 @@ if ('onhashchange' in window) {
 <span id="L933" class="LineNr"> 933 </span><span class="Comment"># the number of spaces at the start of the line containing 'curr'.</span>
 <span id="L934" class="LineNr"> 934 </span><span class="muRecipe">def</span> <a href='002-typing.mu.html#L934'>line-indent</a> curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char, start:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char<span class="muRecipe"> -&gt; </span>result:num [
 <span id="L935" class="LineNr"> 935 </span>  <span class="Constant">local-scope</span>
-<span id="L936" class="LineNr"> 936 </span>  <span class="Constant">load-ingredients</span>
+<span id="L936" class="LineNr"> 936 </span>  <span class="Constant">load-inputs</span>
 <span id="L937" class="LineNr"> 937 </span>  result:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L938" class="LineNr"> 938 </span>  <span class="muControl">return-unless</span> curr
 <span id="L939" class="LineNr"> 939 </span>  at-start?:bool <span class="Special">&lt;-</span> equal curr, start
@@ -1178,22 +1178,22 @@ if ('onhashchange' in window) {
 <span id="L1115" class="LineNr">1115 </span>
 <span id="L1116" class="LineNr">1116 </span><span class="muRecipe">def</span> <a href='002-typing.mu.html#L1116'>draw-horizontal</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, row:num, x:num, right:num<span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L1117" class="LineNr">1117 </span>  <span class="Constant">local-scope</span>
-<span id="L1118" class="LineNr">1118 </span>  <span class="Constant">load-ingredients</span>
+<span id="L1118" class="LineNr">1118 </span>  <span class="Constant">load-inputs</span>
 <span id="L1119" class="LineNr">1119 </span>  height:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L782'>screen-height</a> <a href='../081print.mu.html#L16'>screen</a>
 <span id="L1120" class="LineNr">1120 </span>  past-bottom?:bool <span class="Special">&lt;-</span> greater-or-equal row, height
 <span id="L1121" class="LineNr">1121 </span>  <span class="muControl">return-if</span> past-bottom?
-<span id="L1122" class="LineNr">1122 </span>  style:char, style-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L1122" class="LineNr">1122 </span>  style:char, style-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L1123" class="LineNr">1123 </span>  <span class="Delimiter">{</span>
 <span id="L1124" class="LineNr">1124 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> style-found?
 <span id="L1125" class="LineNr">1125 </span>  <span class="Conceal">¦</span> style <span class="Special">&lt;-</span> copy <span class="Constant">9472/horizontal</span>
 <span id="L1126" class="LineNr">1126 </span>  <span class="Delimiter">}</span>
-<span id="L1127" class="LineNr">1127 </span>  color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L1127" class="LineNr">1127 </span>  color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L1128" class="LineNr">1128 </span>  <span class="Delimiter">{</span>
 <span id="L1129" class="LineNr">1129 </span>  <span class="Conceal">¦</span> <span class="Comment"># default color to white</span>
 <span id="L1130" class="LineNr">1130 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> color-found?
 <span id="L1131" class="LineNr">1131 </span>  <span class="Conceal">¦</span> color <span class="Special">&lt;-</span> copy <span class="Constant">245/grey</span>
 <span id="L1132" class="LineNr">1132 </span>  <span class="Delimiter">}</span>
-<span id="L1133" class="LineNr">1133 </span>  bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L1133" class="LineNr">1133 </span>  bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L1134" class="LineNr">1134 </span>  <span class="Delimiter">{</span>
 <span id="L1135" class="LineNr">1135 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> bg-color-found?
 <span id="L1136" class="LineNr">1136 </span>  <span class="Conceal">¦</span> bg-color <span class="Special">&lt;-</span> copy <span class="Constant">0/black</span>
diff --git a/html/edit/003-shortcuts.mu.html b/html/edit/003-shortcuts.mu.html
index 4d24c08d..68459fda 100644
--- a/html/edit/003-shortcuts.mu.html
+++ b/html/edit/003-shortcuts.mu.html
@@ -170,7 +170,7 @@ if ('onhashchange' in window) {
 <span id="L108" class="LineNr"> 108 </span><span class="Comment">#   backspaced-cell - value deleted (or 0 if nothing was deleted) so we can save it for undo, etc.</span>
 <span id="L109" class="LineNr"> 109 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L109'>delete-before-cursor</a> editor:&amp;:editor, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>go-render?:bool, backspaced-cell:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char, editor:&amp;:editor, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L110" class="LineNr"> 110 </span>  <span class="Constant">local-scope</span>
-<span id="L111" class="LineNr"> 111 </span>  <span class="Constant">load-ingredients</span>
+<span id="L111" class="LineNr"> 111 </span>  <span class="Constant">load-inputs</span>
 <span id="L112" class="LineNr"> 112 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
 <span id="L113" class="LineNr"> 113 </span>  data:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
 <span id="L114" class="LineNr"> 114 </span>  <span class="Comment"># if at start of text (before-cursor at § sentinel), return</span>
@@ -217,7 +217,7 @@ if ('onhashchange' in window) {
 <span id="L155" class="LineNr"> 155 </span>
 <span id="L156" class="LineNr"> 156 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L156'>move-cursor-coordinates-left</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>go-render?:bool, editor:&amp;:editor [
 <span id="L157" class="LineNr"> 157 </span>  <span class="Constant">local-scope</span>
-<span id="L158" class="LineNr"> 158 </span>  <span class="Constant">load-ingredients</span>
+<span id="L158" class="LineNr"> 158 </span>  <span class="Constant">load-inputs</span>
 <span id="L159" class="LineNr"> 159 </span>  go-render?:bool <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
 <span id="L160" class="LineNr"> 160 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
 <span id="L161" class="LineNr"> 161 </span>  cursor-row:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
@@ -280,7 +280,7 @@ if ('onhashchange' in window) {
 <span id="L218" class="LineNr"> 218 </span><span class="Comment"># the length of the previous line before the 'curr' pointer.</span>
 <span id="L219" class="LineNr"> 219 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L219'>previous-line-length</a> curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char, start:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char<span class="muRecipe"> -&gt; </span>result:num [
 <span id="L220" class="LineNr"> 220 </span>  <span class="Constant">local-scope</span>
-<span id="L221" class="LineNr"> 221 </span>  <span class="Constant">load-ingredients</span>
+<span id="L221" class="LineNr"> 221 </span>  <span class="Constant">load-inputs</span>
 <span id="L222" class="LineNr"> 222 </span>  result:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L223" class="LineNr"> 223 </span>  <span class="muControl">return-unless</span> curr
 <span id="L224" class="LineNr"> 224 </span>  at-start?:bool <span class="Special">&lt;-</span> equal curr, start
@@ -434,7 +434,7 @@ if ('onhashchange' in window) {
 <span id="L372" class="LineNr"> 372 </span>
 <span id="L373" class="LineNr"> 373 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L373'>delete-at-cursor</a> editor:&amp;:editor, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>go-render?:bool, deleted-cell:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char, editor:&amp;:editor, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L374" class="LineNr"> 374 </span>  <span class="Constant">local-scope</span>
-<span id="L375" class="LineNr"> 375 </span>  <span class="Constant">load-ingredients</span>
+<span id="L375" class="LineNr"> 375 </span>  <span class="Constant">load-inputs</span>
 <span id="L376" class="LineNr"> 376 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
 <span id="L377" class="LineNr"> 377 </span>  data:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
 <span id="L378" class="LineNr"> 378 </span>  deleted-cell:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
@@ -514,7 +514,7 @@ if ('onhashchange' in window) {
 <span id="L452" class="LineNr"> 452 </span>
 <span id="L453" class="LineNr"> 453 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L453'>move-cursor-coordinates-right</a> editor:&amp;:editor, <a href='../081print.mu.html#L782'>screen-height</a>:num<span class="muRecipe"> -&gt; </span>go-render?:bool, editor:&amp;:editor [
 <span id="L454" class="LineNr"> 454 </span>  <span class="Constant">local-scope</span>
-<span id="L455" class="LineNr"> 455 </span>  <span class="Constant">load-ingredients</span>
+<span id="L455" class="LineNr"> 455 </span>  <span class="Constant">load-inputs</span>
 <span id="L456" class="LineNr"> 456 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor <span class="Constant">before-cursor:offset</span>
 <span id="L457" class="LineNr"> 457 </span>  cursor-row:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
 <span id="L458" class="LineNr"> 458 </span>  cursor-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
@@ -1061,7 +1061,7 @@ if ('onhashchange' in window) {
 <span id="L999" class="LineNr"> 999 </span>
 <span id="L1000" class="LineNr">1000 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L1000'>move-to-previous-line</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>go-render?:bool, editor:&amp;:editor [
 <span id="L1001" class="LineNr">1001 </span>  <span class="Constant">local-scope</span>
-<span id="L1002" class="LineNr">1002 </span>  <span class="Constant">load-ingredients</span>
+<span id="L1002" class="LineNr">1002 </span>  <span class="Constant">load-inputs</span>
 <span id="L1003" class="LineNr">1003 </span>  go-render?:bool <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
 <span id="L1004" class="LineNr">1004 </span>  cursor-row:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
 <span id="L1005" class="LineNr">1005 </span>  cursor-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
@@ -1415,7 +1415,7 @@ if ('onhashchange' in window) {
 <span id="L1353" class="LineNr">1353 </span>
 <span id="L1354" class="LineNr">1354 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L1354'>move-to-next-line</a> editor:&amp;:editor, <a href='../081print.mu.html#L782'>screen-height</a>:num<span class="muRecipe"> -&gt; </span>go-render?:bool, editor:&amp;:editor [
 <span id="L1355" class="LineNr">1355 </span>  <span class="Constant">local-scope</span>
-<span id="L1356" class="LineNr">1356 </span>  <span class="Constant">load-ingredients</span>
+<span id="L1356" class="LineNr">1356 </span>  <span class="Constant">load-inputs</span>
 <span id="L1357" class="LineNr">1357 </span>  cursor-row:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
 <span id="L1358" class="LineNr">1358 </span>  cursor-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
 <span id="L1359" class="LineNr">1359 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
@@ -1626,7 +1626,7 @@ if ('onhashchange' in window) {
 <span id="L1564" class="LineNr">1564 </span><span class="Comment"># precondition: cursor-column should be in a consistent state</span>
 <span id="L1565" class="LineNr">1565 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L1565'>move-to-start-of-screen-line</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>editor:&amp;:editor [
 <span id="L1566" class="LineNr">1566 </span>  <span class="Constant">local-scope</span>
-<span id="L1567" class="LineNr">1567 </span>  <span class="Constant">load-ingredients</span>
+<span id="L1567" class="LineNr">1567 </span>  <span class="Constant">load-inputs</span>
 <span id="L1568" class="LineNr">1568 </span>  <span class="Comment"># update cursor column</span>
 <span id="L1569" class="LineNr">1569 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
 <span id="L1570" class="LineNr">1570 </span>  col:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
@@ -1849,7 +1849,7 @@ if ('onhashchange' in window) {
 <span id="L1787" class="LineNr">1787 </span>
 <span id="L1788" class="LineNr">1788 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L1788'>move-to-end-of-line</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>editor:&amp;:editor [
 <span id="L1789" class="LineNr">1789 </span>  <span class="Constant">local-scope</span>
-<span id="L1790" class="LineNr">1790 </span>  <span class="Constant">load-ingredients</span>
+<span id="L1790" class="LineNr">1790 </span>  <span class="Constant">load-inputs</span>
 <span id="L1791" class="LineNr">1791 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
 <span id="L1792" class="LineNr">1792 </span>  cursor-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
 <span id="L1793" class="LineNr">1793 </span>  right:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">right:offset</span>
@@ -2032,7 +2032,7 @@ if ('onhashchange' in window) {
 <span id="L1970" class="LineNr">1970 </span>
 <span id="L1971" class="LineNr">1971 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L1971'>minimal-render-for-ctrl-u</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor, deleted-cells:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char<span class="muRecipe"> -&gt; </span>go-render?:bool, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L1972" class="LineNr">1972 </span>  <span class="Constant">local-scope</span>
-<span id="L1973" class="LineNr">1973 </span>  <span class="Constant">load-ingredients</span>
+<span id="L1973" class="LineNr">1973 </span>  <span class="Constant">load-inputs</span>
 <span id="L1974" class="LineNr">1974 </span>  curr-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
 <span id="L1975" class="LineNr">1975 </span>  <span class="Comment"># accumulate the current line as text and render it</span>
 <span id="L1976" class="LineNr">1976 </span>  buf:&amp;:<a href='../061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='../061text.mu.html#L125'>new-buffer</a><span class="Constant"> 30</span>  <span class="Comment"># accumulator for the text we need to render</span>
@@ -2067,7 +2067,7 @@ if ('onhashchange' in window) {
 <span id="L2005" class="LineNr">2005 </span>
 <span id="L2006" class="LineNr">2006 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L2006'>delete-to-start-of-line</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char, editor:&amp;:editor [
 <span id="L2007" class="LineNr">2007 </span>  <span class="Constant">local-scope</span>
-<span id="L2008" class="LineNr">2008 </span>  <span class="Constant">load-ingredients</span>
+<span id="L2008" class="LineNr">2008 </span>  <span class="Constant">load-inputs</span>
 <span id="L2009" class="LineNr">2009 </span>  <span class="Comment"># compute range to delete</span>
 <span id="L2010" class="LineNr">2010 </span>  init:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
 <span id="L2011" class="LineNr">2011 </span>  top-of-screen:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
@@ -2123,7 +2123,7 @@ if ('onhashchange' in window) {
 <span id="L2061" class="LineNr">2061 </span>
 <span id="L2062" class="LineNr">2062 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L2062'>render-code</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, s:text, left:num, right:num, row:num<span class="muRecipe"> -&gt; </span>row:num, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L2063" class="LineNr">2063 </span>  <span class="Constant">local-scope</span>
-<span id="L2064" class="LineNr">2064 </span>  <span class="Constant">load-ingredients</span>
+<span id="L2064" class="LineNr">2064 </span>  <span class="Constant">load-inputs</span>
 <span id="L2065" class="LineNr">2065 </span>  <span class="muControl">return-unless</span> s
 <span id="L2066" class="LineNr">2066 </span>  color:num <span class="Special">&lt;-</span> copy <span class="Constant">7/white</span>
 <span id="L2067" class="LineNr">2067 </span>  column:num <span class="Special">&lt;-</span> copy left
@@ -2610,7 +2610,7 @@ if ('onhashchange' in window) {
 <span id="L2548" class="LineNr">2548 </span>
 <span id="L2549" class="LineNr">2549 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L2549'>minimal-render-for-ctrl-k</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor, deleted-cells:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char<span class="muRecipe"> -&gt; </span>go-render?:bool, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L2550" class="LineNr">2550 </span>  <span class="Constant">local-scope</span>
-<span id="L2551" class="LineNr">2551 </span>  <span class="Constant">load-ingredients</span>
+<span id="L2551" class="LineNr">2551 </span>  <span class="Constant">load-inputs</span>
 <span id="L2552" class="LineNr">2552 </span>  <span class="Comment"># if we deleted nothing, there's nothing to render</span>
 <span id="L2553" class="LineNr">2553 </span>  <span class="muControl">return-unless</span> deleted-cells, <span class="Constant">0/dont-render</span>
 <span id="L2554" class="LineNr">2554 </span>  <span class="Comment"># if the line used to wrap before, give up and render the whole screen</span>
@@ -2628,7 +2628,7 @@ if ('onhashchange' in window) {
 <span id="L2566" class="LineNr">2566 </span>
 <span id="L2567" class="LineNr">2567 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L2567'>delete-to-end-of-line</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char, editor:&amp;:editor [
 <span id="L2568" class="LineNr">2568 </span>  <span class="Constant">local-scope</span>
-<span id="L2569" class="LineNr">2569 </span>  <span class="Constant">load-ingredients</span>
+<span id="L2569" class="LineNr">2569 </span>  <span class="Constant">load-inputs</span>
 <span id="L2570" class="LineNr">2570 </span>  <span class="Comment"># compute range to delete</span>
 <span id="L2571" class="LineNr">2571 </span>  start:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
 <span id="L2572" class="LineNr">2572 </span>  end:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> start
@@ -2865,7 +2865,7 @@ if ('onhashchange' in window) {
 <span id="L2803" class="LineNr">2803 </span><span class="Comment"># Beware: never return null pointer.</span>
 <span id="L2804" class="LineNr">2804 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L2804'>before-start-of-next-line</a> original:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char, max:num<span class="muRecipe"> -&gt; </span>curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char [
 <span id="L2805" class="LineNr">2805 </span>  <span class="Constant">local-scope</span>
-<span id="L2806" class="LineNr">2806 </span>  <span class="Constant">load-ingredients</span>
+<span id="L2806" class="LineNr">2806 </span>  <span class="Constant">load-inputs</span>
 <span id="L2807" class="LineNr">2807 </span>  count:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L2808" class="LineNr">2808 </span>  curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> copy original
 <span id="L2809" class="LineNr">2809 </span>  <span class="Comment"># skip the initial newline if it exists</span>
@@ -3236,7 +3236,7 @@ if ('onhashchange' in window) {
 <span id="L3174" class="LineNr">3174 </span><span class="Comment"># Beware: never return null pointer.</span>
 <span id="L3175" class="LineNr">3175 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L3175'>before-previous-screen-line</a> in:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char, editor:&amp;:editor<span class="muRecipe"> -&gt; </span>out:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char [
 <span id="L3176" class="LineNr">3176 </span>  <span class="Constant">local-scope</span>
-<span id="L3177" class="LineNr">3177 </span>  <span class="Constant">load-ingredients</span>
+<span id="L3177" class="LineNr">3177 </span>  <span class="Constant">load-inputs</span>
 <span id="L3178" class="LineNr">3178 </span>  curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> copy in
 <span id="L3179" class="LineNr">3179 </span>  c:char <span class="Special">&lt;-</span> get *curr, <span class="Constant">value:offset</span>
 <span id="L3180" class="LineNr">3180 </span>  <span class="Comment"># compute max, number of characters to skip</span>
@@ -3658,7 +3658,7 @@ if ('onhashchange' in window) {
 <span id="L3596" class="LineNr">3596 </span><span class="Comment"># taking up the entire screen</span>
 <span id="L3597" class="LineNr">3597 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L3597'>page-down</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>editor:&amp;:editor [
 <span id="L3598" class="LineNr">3598 </span>  <span class="Constant">local-scope</span>
-<span id="L3599" class="LineNr">3599 </span>  <span class="Constant">load-ingredients</span>
+<span id="L3599" class="LineNr">3599 </span>  <span class="Constant">load-inputs</span>
 <span id="L3600" class="LineNr">3600 </span>  <span class="Comment"># if editor contents don't overflow screen, do nothing</span>
 <span id="L3601" class="LineNr">3601 </span>  bottom-of-screen:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">bottom-of-screen:offset</span>
 <span id="L3602" class="LineNr">3602 </span>  <span class="muControl">return-unless</span> bottom-of-screen
@@ -3683,7 +3683,7 @@ if ('onhashchange' in window) {
 <span id="L3621" class="LineNr">3621 </span><span class="Comment"># jump to previous newline</span>
 <span id="L3622" class="LineNr">3622 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L3622'>move-to-start-of-line</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>editor:&amp;:editor [
 <span id="L3623" class="LineNr">3623 </span>  <span class="Constant">local-scope</span>
-<span id="L3624" class="LineNr">3624 </span>  <span class="Constant">load-ingredients</span>
+<span id="L3624" class="LineNr">3624 </span>  <span class="Constant">load-inputs</span>
 <span id="L3625" class="LineNr">3625 </span>  <span class="Comment"># update cursor column</span>
 <span id="L3626" class="LineNr">3626 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
 <span id="L3627" class="LineNr">3627 </span>  cursor-column:num <span class="Special">&lt;-</span> copy left
@@ -3881,7 +3881,7 @@ if ('onhashchange' in window) {
 <span id="L3819" class="LineNr">3819 </span>
 <span id="L3820" class="LineNr">3820 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L3820'>page-up</a> editor:&amp;:editor, <a href='../081print.mu.html#L782'>screen-height</a>:num<span class="muRecipe"> -&gt; </span>editor:&amp;:editor [
 <span id="L3821" class="LineNr">3821 </span>  <span class="Constant">local-scope</span>
-<span id="L3822" class="LineNr">3822 </span>  <span class="Constant">load-ingredients</span>
+<span id="L3822" class="LineNr">3822 </span>  <span class="Constant">load-inputs</span>
 <span id="L3823" class="LineNr">3823 </span>  max:num <span class="Special">&lt;-</span> subtract <a href='../081print.mu.html#L782'>screen-height</a>, <span class="Constant">1/menu-bar</span>, <span class="Constant">1/overlapping-line</span>
 <span id="L3824" class="LineNr">3824 </span>  count:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L3825" class="LineNr">3825 </span>  top-of-screen:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
@@ -4210,7 +4210,7 @@ if ('onhashchange' in window) {
 <span id="L4148" class="LineNr">4148 </span>
 <span id="L4149" class="LineNr">4149 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L4149'>line-up</a> editor:&amp;:editor, <a href='../081print.mu.html#L782'>screen-height</a>:num<span class="muRecipe"> -&gt; </span>go-render?:bool, editor:&amp;:editor [
 <span id="L4150" class="LineNr">4150 </span>  <span class="Constant">local-scope</span>
-<span id="L4151" class="LineNr">4151 </span>  <span class="Constant">load-ingredients</span>
+<span id="L4151" class="LineNr">4151 </span>  <span class="Constant">load-inputs</span>
 <span id="L4152" class="LineNr">4152 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
 <span id="L4153" class="LineNr">4153 </span>  right:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">right:offset</span>
 <span id="L4154" class="LineNr">4154 </span>  max:num <span class="Special">&lt;-</span> subtract right, left
@@ -4241,7 +4241,7 @@ if ('onhashchange' in window) {
 <span id="L4179" class="LineNr">4179 </span>
 <span id="L4180" class="LineNr">4180 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L4180'>line-down</a> editor:&amp;:editor, <a href='../081print.mu.html#L782'>screen-height</a>:num<span class="muRecipe"> -&gt; </span>go-render?:bool, editor:&amp;:editor [
 <span id="L4181" class="LineNr">4181 </span>  <span class="Constant">local-scope</span>
-<span id="L4182" class="LineNr">4182 </span>  <span class="Constant">load-ingredients</span>
+<span id="L4182" class="LineNr">4182 </span>  <span class="Constant">load-inputs</span>
 <span id="L4183" class="LineNr">4183 </span>  old-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
 <span id="L4184" class="LineNr">4184 </span>  new-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L3175'>before-previous-screen-line</a> old-top, editor
 <span id="L4185" class="LineNr">4185 </span>  movement?:bool <span class="Special">&lt;-</span> not-equal old-top, new-top
@@ -4311,7 +4311,7 @@ if ('onhashchange' in window) {
 <span id="L4249" class="LineNr">4249 </span><span class="Comment"># the caller to go-render? the entire screen.</span>
 <span id="L4250" class="LineNr">4250 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L4250'>render-line-from-start</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor, right-margin:num<span class="muRecipe"> -&gt; </span>go-render?:bool, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L4251" class="LineNr">4251 </span>  <span class="Constant">local-scope</span>
-<span id="L4252" class="LineNr">4252 </span>  <span class="Constant">load-ingredients</span>
+<span id="L4252" class="LineNr">4252 </span>  <span class="Constant">load-inputs</span>
 <span id="L4253" class="LineNr">4253 </span>  before-line-start:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L4280'>before-start-of-screen-line</a> editor
 <span id="L4254" class="LineNr">4254 </span>  line-start:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-line-start
 <span id="L4255" class="LineNr">4255 </span>  color:num <span class="Special">&lt;-</span> copy <span class="Constant">7/white</span>
@@ -4341,7 +4341,7 @@ if ('onhashchange' in window) {
 <span id="L4279" class="LineNr">4279 </span>
 <span id="L4280" class="LineNr">4280 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L4280'>before-start-of-screen-line</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char [
 <span id="L4281" class="LineNr">4281 </span>  <span class="Constant">local-scope</span>
-<span id="L4282" class="LineNr">4282 </span>  <span class="Constant">load-ingredients</span>
+<span id="L4282" class="LineNr">4282 </span>  <span class="Constant">load-inputs</span>
 <span id="L4283" class="LineNr">4283 </span>  cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
 <span id="L4284" class="LineNr">4284 </span>  <span class="Delimiter">{</span>
 <span id="L4285" class="LineNr">4285 </span>  <span class="Conceal">¦</span> <a href='../065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> cursor
diff --git a/html/edit/004-programming-environment.mu.html b/html/edit/004-programming-environment.mu.html
index 6179ca5e..703e71e6 100644
--- a/html/edit/004-programming-environment.mu.html
+++ b/html/edit/004-programming-environment.mu.html
@@ -83,7 +83,7 @@ if ('onhashchange' in window) {
 <span id="L20" class="LineNr"> 20 </span>
 <span id="L21" class="LineNr"> 21 </span><span class="muRecipe">def</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>:&amp;:<a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, test-sandbox-editor-contents:text<span class="muRecipe"> -&gt; </span>result:&amp;:environment [
 <span id="L22" class="LineNr"> 22 </span>  <span class="Constant">local-scope</span>
-<span id="L23" class="LineNr"> 23 </span>  <span class="Constant">load-ingredients</span>
+<span id="L23" class="LineNr"> 23 </span>  <span class="Constant">load-inputs</span>
 <span id="L24" class="LineNr"> 24 </span>  width:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L768'>screen-width</a> <a href='../081print.mu.html#L16'>screen</a>
 <span id="L25" class="LineNr"> 25 </span>  result <span class="Special">&lt;-</span> new <span class="Constant">environment:type</span>
 <span id="L26" class="LineNr"> 26 </span>  <span class="Comment"># recipe editor on the left</span>
@@ -101,7 +101,7 @@ if ('onhashchange' in window) {
 <span id="L38" class="LineNr"> 38 </span>
 <span id="L39" class="LineNr"> 39 </span><span class="muRecipe">def</span> <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>:&amp;:<a href='../084console.mu.html#L23'>console</a>, env:&amp;:environment, <a href='../088file.mu.html#L11'>resources</a>:&amp;:<a href='../088file.mu.html#L11'>resources</a><span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>:&amp;:<a href='../084console.mu.html#L23'>console</a>, env:&amp;:environment, <a href='../088file.mu.html#L11'>resources</a>:&amp;:<a href='../088file.mu.html#L11'>resources</a> [
 <span id="L40" class="LineNr"> 40 </span>  <span class="Constant">local-scope</span>
-<span id="L41" class="LineNr"> 41 </span>  <span class="Constant">load-ingredients</span>
+<span id="L41" class="LineNr"> 41 </span>  <span class="Constant">load-inputs</span>
 <span id="L42" class="LineNr"> 42 </span>  recipes:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">recipes:offset</span>
 <span id="L43" class="LineNr"> 43 </span>  current-sandbox:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">current-sandbox:offset</span>
 <span id="L44" class="LineNr"> 44 </span>  sandbox-in-focus?:bool <span class="Special">&lt;-</span> get *env, <span class="Constant">sandbox-in-focus?:offset</span>
@@ -193,7 +193,7 @@ if ('onhashchange' in window) {
 <span id="L130" class="LineNr">130 </span>
 <span id="L131" class="LineNr">131 </span><span class="muRecipe">def</span> <a href='004-programming-environment.mu.html#L131'>resize</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, env:&amp;:environment<span class="muRecipe"> -&gt; </span>env:&amp;:environment, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L132" class="LineNr">132 </span>  <span class="Constant">local-scope</span>
-<span id="L133" class="LineNr">133 </span>  <span class="Constant">load-ingredients</span>
+<span id="L133" class="LineNr">133 </span>  <span class="Constant">load-inputs</span>
 <span id="L134" class="LineNr">134 </span>  <a href='../081print.mu.html#L46'>clear-screen</a> <a href='../081print.mu.html#L16'>screen</a>  <span class="Comment"># update screen dimensions</span>
 <span id="L135" class="LineNr">135 </span>  width:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L768'>screen-width</a> <a href='../081print.mu.html#L16'>screen</a>
 <span id="L136" class="LineNr">136 </span>  divider:num, _ <span class="Special">&lt;-</span> divide-with-remainder width,<span class="Constant"> 2</span>
@@ -220,7 +220,7 @@ if ('onhashchange' in window) {
 <span id="L157" class="LineNr">157 </span><span class="Comment"># off-screen, it resets cursor-row and cursor-column.</span>
 <span id="L158" class="LineNr">158 </span><span class="muRecipe">def</span> <a href='004-programming-environment.mu.html#L158'>render-without-moving-cursor</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor<span class="muRecipe"> -&gt; </span>last-row:num, last-column:num, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor [
 <span id="L159" class="LineNr">159 </span>  <span class="Constant">local-scope</span>
-<span id="L160" class="LineNr">160 </span>  <span class="Constant">load-ingredients</span>
+<span id="L160" class="LineNr">160 </span>  <span class="Constant">load-inputs</span>
 <span id="L161" class="LineNr">161 </span>  <span class="muControl">return-unless</span> editor, <span class="Constant">1/top</span>, <span class="Constant">0/left</span>
 <span id="L162" class="LineNr">162 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
 <span id="L163" class="LineNr">163 </span>  <a href='../081print.mu.html#L782'>screen-height</a>:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L782'>screen-height</a> <a href='../081print.mu.html#L16'>screen</a>
@@ -464,7 +464,7 @@ if ('onhashchange' in window) {
 <span id="L401" class="LineNr">401 </span>
 <span id="L402" class="LineNr">402 </span><span class="muRecipe">def</span> <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, env:&amp;:environment, render-editor:<a href='004-programming-environment.mu.html#L400'>render-recipe</a><span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, env:&amp;:environment [
 <span id="L403" class="LineNr">403 </span>  <span class="Constant">local-scope</span>
-<span id="L404" class="LineNr">404 </span>  <span class="Constant">load-ingredients</span>
+<span id="L404" class="LineNr">404 </span>  <span class="Constant">load-inputs</span>
 <span id="L405" class="LineNr">405 </span>  trace<span class="Constant"> 10</span>, <span class="Constant">[app]</span>, <span class="Constant">[render all]</span>
 <span id="L406" class="LineNr">406 </span>  <span class="Comment"># top menu</span>
 <span id="L407" class="LineNr">407 </span>  trace<span class="Constant"> 11</span>, <span class="Constant">[app]</span>, <span class="Constant">[render top menu]</span>
@@ -493,7 +493,7 @@ if ('onhashchange' in window) {
 <span id="L430" class="LineNr">430 </span>
 <span id="L431" class="LineNr">431 </span><span class="muRecipe">def</span> <a href='004-programming-environment.mu.html#L431'>render-recipes</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, env:&amp;:environment, render-editor:<a href='004-programming-environment.mu.html#L400'>render-recipe</a><span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, env:&amp;:environment [
 <span id="L432" class="LineNr">432 </span>  <span class="Constant">local-scope</span>
-<span id="L433" class="LineNr">433 </span>  <span class="Constant">load-ingredients</span>
+<span id="L433" class="LineNr">433 </span>  <span class="Constant">load-inputs</span>
 <span id="L434" class="LineNr">434 </span>  trace<span class="Constant"> 11</span>, <span class="Constant">[app]</span>, <span class="Constant">[render recipes]</span>
 <span id="L435" class="LineNr">435 </span>  old-top-idx:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L509'>save-top-idx</a> <a href='../081print.mu.html#L16'>screen</a>
 <span id="L436" class="LineNr">436 </span>  recipes:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">recipes:offset</span>
@@ -515,7 +515,7 @@ if ('onhashchange' in window) {
 <span id="L452" class="LineNr">452 </span><span class="Comment"># replaced in a later layer</span>
 <span id="L453" class="LineNr">453 </span><span class="muRecipe">def</span> render-sandbox-side <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, env:&amp;:environment, render-editor:<a href='004-programming-environment.mu.html#L400'>render-recipe</a><span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, env:&amp;:environment [
 <span id="L454" class="LineNr">454 </span>  <span class="Constant">local-scope</span>
-<span id="L455" class="LineNr">455 </span>  <span class="Constant">load-ingredients</span>
+<span id="L455" class="LineNr">455 </span>  <span class="Constant">load-inputs</span>
 <span id="L456" class="LineNr">456 </span>  trace<span class="Constant"> 11</span>, <span class="Constant">[app]</span>, <span class="Constant">[render sandboxes]</span>
 <span id="L457" class="LineNr">457 </span>  old-top-idx:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L509'>save-top-idx</a> <a href='../081print.mu.html#L16'>screen</a>
 <span id="L458" class="LineNr">458 </span>  current-sandbox:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">current-sandbox:offset</span>
@@ -534,7 +534,7 @@ if ('onhashchange' in window) {
 <span id="L471" class="LineNr">471 </span>
 <span id="L472" class="LineNr">472 </span><span class="muRecipe">def</span> <a href='004-programming-environment.mu.html#L472'>update-cursor</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, recipes:&amp;:editor, current-sandbox:&amp;:editor, sandbox-in-focus?:bool, env:&amp;:environment<span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L473" class="LineNr">473 </span>  <span class="Constant">local-scope</span>
-<span id="L474" class="LineNr">474 </span>  <span class="Constant">load-ingredients</span>
+<span id="L474" class="LineNr">474 </span>  <span class="Constant">load-inputs</span>
 <span id="L475" class="LineNr">475 </span><span class="Constant">  <a href='004-programming-environment.mu.html#L475'>&lt;update-cursor-special-cases&gt;</a></span>
 <span id="L476" class="LineNr">476 </span>  <span class="Delimiter">{</span>
 <span id="L477" class="LineNr">477 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> sandbox-in-focus?
@@ -568,13 +568,13 @@ if ('onhashchange' in window) {
 <span id="L505" class="LineNr">505 </span>
 <span id="L506" class="LineNr">506 </span><span class="muRecipe">def</span> <a href='004-programming-environment.mu.html#L506'>draw-vertical</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, col:num, y:num, bottom:num<span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L507" class="LineNr">507 </span>  <span class="Constant">local-scope</span>
-<span id="L508" class="LineNr">508 </span>  <span class="Constant">load-ingredients</span>
-<span id="L509" class="LineNr">509 </span>  style:char, style-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L508" class="LineNr">508 </span>  <span class="Constant">load-inputs</span>
+<span id="L509" class="LineNr">509 </span>  style:char, style-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L510" class="LineNr">510 </span>  <span class="Delimiter">{</span>
 <span id="L511" class="LineNr">511 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> style-found?
 <span id="L512" class="LineNr">512 </span>  <span class="Conceal">¦</span> style <span class="Special">&lt;-</span> copy <span class="Constant">9474/vertical</span>
 <span id="L513" class="LineNr">513 </span>  <span class="Delimiter">}</span>
-<span id="L514" class="LineNr">514 </span>  color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-ingredient</span>
+<span id="L514" class="LineNr">514 </span>  color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L515" class="LineNr">515 </span>  <span class="Delimiter">{</span>
 <span id="L516" class="LineNr">516 </span>  <span class="Conceal">¦</span> <span class="Comment"># default color to white</span>
 <span id="L517" class="LineNr">517 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> color-found?
diff --git a/html/edit/005-sandbox.mu.html b/html/edit/005-sandbox.mu.html
index 1c6ab31c..51d920f8 100644
--- a/html/edit/005-sandbox.mu.html
+++ b/html/edit/005-sandbox.mu.html
@@ -208,7 +208,7 @@ if ('onhashchange' in window) {
 <span id="L145" class="LineNr"> 145 </span>
 <span id="L146" class="LineNr"> 146 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L146'>run-sandboxes</a> env:&amp;:environment, <a href='../088file.mu.html#L11'>resources</a>:&amp;:<a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>errors-found?:bool, env:&amp;:environment, <a href='../088file.mu.html#L11'>resources</a>:&amp;:<a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L147" class="LineNr"> 147 </span>  <span class="Constant">local-scope</span>
-<span id="L148" class="LineNr"> 148 </span>  <span class="Constant">load-ingredients</span>
+<span id="L148" class="LineNr"> 148 </span>  <span class="Constant">load-inputs</span>
 <span id="L149" class="LineNr"> 149 </span>  errors-found?:bool <span class="Special">&lt;-</span> update-recipes env, <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>
 <span id="L150" class="LineNr"> 150 </span>  <span class="muControl">jump-if</span> errors-found?, <span class="Constant">+return</span>
 <span id="L151" class="LineNr"> 151 </span>  <span class="Comment"># check contents of right editor (sandbox)</span>
@@ -259,7 +259,7 @@ if ('onhashchange' in window) {
 <span id="L196" class="LineNr"> 196 </span><span class="Comment"># replaced in a later layer (whereupon errors-found? will actually be set)</span>
 <span id="L197" class="LineNr"> 197 </span><span class="muRecipe">def</span> update-recipes env:&amp;:environment, <a href='../088file.mu.html#L11'>resources</a>:&amp;:<a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>errors-found?:bool, env:&amp;:environment, <a href='../088file.mu.html#L11'>resources</a>:&amp;:<a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L198" class="LineNr"> 198 </span>  <span class="Constant">local-scope</span>
-<span id="L199" class="LineNr"> 199 </span>  <span class="Constant">load-ingredients</span>
+<span id="L199" class="LineNr"> 199 </span>  <span class="Constant">load-inputs</span>
 <span id="L200" class="LineNr"> 200 </span>  recipes:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">recipes:offset</span>
 <span id="L201" class="LineNr"> 201 </span>  in:text <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L683'>editor-contents</a> recipes
 <span id="L202" class="LineNr"> 202 </span>  <a href='../088file.mu.html#L11'>resources</a> <span class="Special">&lt;-</span> <a href='../088file.mu.html#L127'>dump</a> <a href='../088file.mu.html#L11'>resources</a>, <span class="Constant">[lesson/recipes.mu]</span>, in
@@ -270,7 +270,7 @@ if ('onhashchange' in window) {
 <span id="L207" class="LineNr"> 207 </span><span class="Comment"># replaced in a later layer</span>
 <span id="L208" class="LineNr"> 208 </span><span class="muRecipe">def</span> update-sandbox sandbox:&amp;:sandbox, env:&amp;:environment, idx:num<span class="muRecipe"> -&gt; </span>sandbox:&amp;:sandbox, env:&amp;:environment [
 <span id="L209" class="LineNr"> 209 </span>  <span class="Constant">local-scope</span>
-<span id="L210" class="LineNr"> 210 </span>  <span class="Constant">load-ingredients</span>
+<span id="L210" class="LineNr"> 210 </span>  <span class="Constant">load-inputs</span>
 <span id="L211" class="LineNr"> 211 </span>  data:text <span class="Special">&lt;-</span> get *sandbox, <span class="Constant">data:offset</span>
 <span id="L212" class="LineNr"> 212 </span>  response:text, _, fake-screen:&amp;:<a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> run-sandboxed data
 <span id="L213" class="LineNr"> 213 </span>  *sandbox <span class="Special">&lt;-</span> put *sandbox, <span class="Constant">response:offset</span>, response
@@ -279,14 +279,14 @@ if ('onhashchange' in window) {
 <span id="L216" class="LineNr"> 216 </span>
 <span id="L217" class="LineNr"> 217 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L217'>update-status</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, msg:text, color:num<span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L218" class="LineNr"> 218 </span>  <span class="Constant">local-scope</span>
-<span id="L219" class="LineNr"> 219 </span>  <span class="Constant">load-ingredients</span>
+<span id="L219" class="LineNr"> 219 </span>  <span class="Constant">load-inputs</span>
 <span id="L220" class="LineNr"> 220 </span>  <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> move-cursor <a href='../081print.mu.html#L16'>screen</a>,<span class="Constant"> 0</span>,<span class="Constant"> 2</span>
 <span id="L221" class="LineNr"> 221 </span>  <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> print <a href='../081print.mu.html#L16'>screen</a>, msg, color, <span class="Constant">238/grey/background</span>
 <span id="L222" class="LineNr"> 222 </span>]
 <span id="L223" class="LineNr"> 223 </span>
 <span id="L224" class="LineNr"> 224 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L224'>save-sandboxes</a> env:&amp;:environment, <a href='../088file.mu.html#L11'>resources</a>:&amp;:<a href='../088file.mu.html#L11'>resources</a><span class="muRecipe"> -&gt; </span><a href='../088file.mu.html#L11'>resources</a>:&amp;:<a href='../088file.mu.html#L11'>resources</a> [
 <span id="L225" class="LineNr"> 225 </span>  <span class="Constant">local-scope</span>
-<span id="L226" class="LineNr"> 226 </span>  <span class="Constant">load-ingredients</span>
+<span id="L226" class="LineNr"> 226 </span>  <span class="Constant">load-inputs</span>
 <span id="L227" class="LineNr"> 227 </span>  trace<span class="Constant"> 11</span>, <span class="Constant">[app]</span>, <span class="Constant">[save sandboxes]</span>
 <span id="L228" class="LineNr"> 228 </span>  current-sandbox:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">current-sandbox:offset</span>
 <span id="L229" class="LineNr"> 229 </span>  <span class="Comment"># first clear previous versions, in case we deleted some sandbox</span>
@@ -304,7 +304,7 @@ if ('onhashchange' in window) {
 <span id="L241" class="LineNr"> 241 </span>
 <span id="L242" class="LineNr"> 242 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L242'>save-sandbox</a> <a href='../088file.mu.html#L11'>resources</a>:&amp;:<a href='../088file.mu.html#L11'>resources</a>, sandbox:&amp;:sandbox, sandbox-index:num<span class="muRecipe"> -&gt; </span><a href='../088file.mu.html#L11'>resources</a>:&amp;:<a href='../088file.mu.html#L11'>resources</a> [
 <span id="L243" class="LineNr"> 243 </span>  <span class="Constant">local-scope</span>
-<span id="L244" class="LineNr"> 244 </span>  <span class="Constant">load-ingredients</span>
+<span id="L244" class="LineNr"> 244 </span>  <span class="Constant">load-inputs</span>
 <span id="L245" class="LineNr"> 245 </span>  data:text <span class="Special">&lt;-</span> get *sandbox, <span class="Constant">data:offset</span>
 <span id="L246" class="LineNr"> 246 </span>  filename:text <span class="Special">&lt;-</span> append <span class="Constant">[lesson/]</span>, sandbox-index
 <span id="L247" class="LineNr"> 247 </span>  <a href='../088file.mu.html#L11'>resources</a> <span class="Special">&lt;-</span> <a href='../088file.mu.html#L127'>dump</a> <a href='../088file.mu.html#L11'>resources</a>, filename, data
@@ -313,7 +313,7 @@ if ('onhashchange' in window) {
 <span id="L250" class="LineNr"> 250 </span>
 <span id="L251" class="LineNr"> 251 </span><span class="muRecipe">def!</span> render-sandbox-side <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, env:&amp;:environment, render-editor:<a href='004-programming-environment.mu.html#L400'>render-recipe</a><span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, env:&amp;:environment [
 <span id="L252" class="LineNr"> 252 </span>  <span class="Constant">local-scope</span>
-<span id="L253" class="LineNr"> 253 </span>  <span class="Constant">load-ingredients</span>
+<span id="L253" class="LineNr"> 253 </span>  <span class="Constant">load-inputs</span>
 <span id="L254" class="LineNr"> 254 </span>  trace<span class="Constant"> 11</span>, <span class="Constant">[app]</span>, <span class="Constant">[render sandbox side]</span>
 <span id="L255" class="LineNr"> 255 </span>  old-top-idx:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L509'>save-top-idx</a> <a href='../081print.mu.html#L16'>screen</a>
 <span id="L256" class="LineNr"> 256 </span>  current-sandbox:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">current-sandbox:offset</span>
@@ -340,7 +340,7 @@ if ('onhashchange' in window) {
 <span id="L277" class="LineNr"> 277 </span>
 <span id="L278" class="LineNr"> 278 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L278'>render-sandboxes</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, sandbox:&amp;:sandbox, left:num, right:num, row:num, render-from:num, idx:num<span class="muRecipe"> -&gt; </span>row:num, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, sandbox:&amp;:sandbox [
 <span id="L279" class="LineNr"> 279 </span>  <span class="Constant">local-scope</span>
-<span id="L280" class="LineNr"> 280 </span>  <span class="Constant">load-ingredients</span>
+<span id="L280" class="LineNr"> 280 </span>  <span class="Constant">load-inputs</span>
 <span id="L281" class="LineNr"> 281 </span>  <span class="muControl">return-unless</span> sandbox
 <span id="L282" class="LineNr"> 282 </span>  <a href='../081print.mu.html#L782'>screen-height</a>:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L782'>screen-height</a> <a href='../081print.mu.html#L16'>screen</a>
 <span id="L283" class="LineNr"> 283 </span>  hidden?:bool <span class="Special">&lt;-</span> lesser-than idx, render-from
@@ -395,7 +395,7 @@ if ('onhashchange' in window) {
 <span id="L332" class="LineNr"> 332 </span>
 <span id="L333" class="LineNr"> 333 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L333'>render-sandbox-menu</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, sandbox-index:num, left:num, right:num<span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L334" class="LineNr"> 334 </span>  <span class="Constant">local-scope</span>
-<span id="L335" class="LineNr"> 335 </span>  <span class="Constant">load-ingredients</span>
+<span id="L335" class="LineNr"> 335 </span>  <span class="Constant">load-inputs</span>
 <span id="L336" class="LineNr"> 336 </span>  <a href='../081print.mu.html#L760'>move-cursor-to-column</a> <a href='../081print.mu.html#L16'>screen</a>, left
 <span id="L337" class="LineNr"> 337 </span>  edit-button-left:num, edit-button-right:num, copy-button-left:num, copy-button-right:num, recipe-button-left:num, recipe-button-right:num, delete-button-left:num <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L378'>sandbox-menu-columns</a> left, right
 <span id="L338" class="LineNr"> 338 </span>  print <a href='../081print.mu.html#L16'>screen</a>, sandbox-index, <span class="Constant">232/dark-grey</span>, <span class="Constant">245/grey</span>
@@ -440,7 +440,7 @@ if ('onhashchange' in window) {
 <span id="L377" class="LineNr"> 377 </span><span class="Comment"># all left/right pairs are inclusive</span>
 <span id="L378" class="LineNr"> 378 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L378'>sandbox-menu-columns</a> left:num, right:num<span class="muRecipe"> -&gt; </span>edit-button-left:num, edit-button-right:num, copy-button-left:num, copy-button-right:num, recipe-button-left:num, recipe-button-right:num, delete-button-left:num [
 <span id="L379" class="LineNr"> 379 </span>  <span class="Constant">local-scope</span>
-<span id="L380" class="LineNr"> 380 </span>  <span class="Constant">load-ingredients</span>
+<span id="L380" class="LineNr"> 380 </span>  <span class="Constant">load-inputs</span>
 <span id="L381" class="LineNr"> 381 </span>  start-buttons:num <span class="Special">&lt;-</span> add left, <span class="Constant">4/space-for-sandbox-index</span>
 <span id="L382" class="LineNr"> 382 </span>  buttons-space:num <span class="Special">&lt;-</span> subtract right, start-buttons
 <span id="L383" class="LineNr"> 383 </span>  button-width:num <span class="Special">&lt;-</span> divide-with-remainder buttons-space,<span class="Constant"> 4</span>  <span class="Comment"># integer division</span>
@@ -460,7 +460,7 @@ if ('onhashchange' in window) {
 <span id="L397" class="LineNr"> 397 </span><span class="Comment"># like 'render-code' but without syntax-based colorization</span>
 <span id="L398" class="LineNr"> 398 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L398'>render-text</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, s:text, left:num, right:num, color:num, row:num<span class="muRecipe"> -&gt; </span>row:num, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L399" class="LineNr"> 399 </span>  <span class="Constant">local-scope</span>
-<span id="L400" class="LineNr"> 400 </span>  <span class="Constant">load-ingredients</span>
+<span id="L400" class="LineNr"> 400 </span>  <span class="Constant">load-inputs</span>
 <span id="L401" class="LineNr"> 401 </span>  <span class="muControl">return-unless</span> s
 <span id="L402" class="LineNr"> 402 </span>  column:num <span class="Special">&lt;-</span> copy left
 <span id="L403" class="LineNr"> 403 </span>  <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> move-cursor <a href='../081print.mu.html#L16'>screen</a>, row, column
@@ -537,7 +537,7 @@ if ('onhashchange' in window) {
 <span id="L474" class="LineNr"> 474 </span><span class="Comment"># assumes programming environment has no sandboxes; restores them from previous session</span>
 <span id="L475" class="LineNr"> 475 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L475'>restore-sandboxes</a> env:&amp;:environment, <a href='../088file.mu.html#L11'>resources</a>:&amp;:<a href='../088file.mu.html#L11'>resources</a><span class="muRecipe"> -&gt; </span>env:&amp;:environment [
 <span id="L476" class="LineNr"> 476 </span>  <span class="Constant">local-scope</span>
-<span id="L477" class="LineNr"> 477 </span>  <span class="Constant">load-ingredients</span>
+<span id="L477" class="LineNr"> 477 </span>  <span class="Constant">load-inputs</span>
 <span id="L478" class="LineNr"> 478 </span>  <span class="Comment"># read all scenarios, pushing them to end of a list of scenarios</span>
 <span id="L479" class="LineNr"> 479 </span>  idx:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L480" class="LineNr"> 480 </span>  curr:&amp;:sandbox <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
@@ -571,7 +571,7 @@ if ('onhashchange' in window) {
 <span id="L508" class="LineNr"> 508 </span><span class="Comment"># leave cursor at start of next line</span>
 <span id="L509" class="LineNr"> 509 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L509'>render-screen</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, sandbox-screen:&amp;:<a href='../081print.mu.html#L16'>screen</a>, left:num, right:num, row:num<span class="muRecipe"> -&gt; </span>row:num, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L510" class="LineNr"> 510 </span>  <span class="Constant">local-scope</span>
-<span id="L511" class="LineNr"> 511 </span>  <span class="Constant">load-ingredients</span>
+<span id="L511" class="LineNr"> 511 </span>  <span class="Constant">load-inputs</span>
 <span id="L512" class="LineNr"> 512 </span>  <span class="muControl">return-unless</span> sandbox-screen
 <span id="L513" class="LineNr"> 513 </span>  <span class="Comment"># print 'screen:'</span>
 <span id="L514" class="LineNr"> 514 </span>  row <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L398'>render-text</a> <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[screen:]</span>, left, right, <span class="Constant">245/grey</span>, row
@@ -745,7 +745,7 @@ if ('onhashchange' in window) {
 <span id="L682" class="LineNr"> 682 </span>
 <span id="L683" class="LineNr"> 683 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L683'>editor-contents</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>result:text [
 <span id="L684" class="LineNr"> 684 </span>  <span class="Constant">local-scope</span>
-<span id="L685" class="LineNr"> 685 </span>  <span class="Constant">load-ingredients</span>
+<span id="L685" class="LineNr"> 685 </span>  <span class="Constant">load-inputs</span>
 <span id="L686" class="LineNr"> 686 </span>  buf:&amp;:<a href='../061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='../061text.mu.html#L125'>new-buffer</a><span class="Constant"> 80</span>
 <span id="L687" class="LineNr"> 687 </span>  curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
 <span id="L688" class="LineNr"> 688 </span>  <span class="Comment"># skip § sentinel</span>
@@ -1007,7 +1007,7 @@ if ('onhashchange' in window) {
 <span id="L944" class="LineNr"> 944 </span><span class="Comment"># return 0 if there's no such sandbox, either because 'in' doesn't exist in 'env', or because it's the first sandbox</span>
 <span id="L945" class="LineNr"> 945 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L945'>previous-sandbox</a> env:&amp;:environment, in:&amp;:sandbox<span class="muRecipe"> -&gt; </span>out:&amp;:sandbox [
 <span id="L946" class="LineNr"> 946 </span>  <span class="Constant">local-scope</span>
-<span id="L947" class="LineNr"> 947 </span>  <span class="Constant">load-ingredients</span>
+<span id="L947" class="LineNr"> 947 </span>  <span class="Constant">load-inputs</span>
 <span id="L948" class="LineNr"> 948 </span>  curr:&amp;:sandbox <span class="Special">&lt;-</span> get *env, <span class="Constant">sandbox:offset</span>
 <span id="L949" class="LineNr"> 949 </span>  <span class="muControl">return-unless</span> curr, <span class="Constant">0/nil</span>
 <span id="L950" class="LineNr"> 950 </span>  <a href='../065duplex_list.mu.html#L25'>next</a>:&amp;:sandbox <span class="Special">&lt;-</span> get *curr, <span class="Constant">next-sandbox:offset</span>
diff --git a/html/edit/006-sandbox-copy.mu.html b/html/edit/006-sandbox-copy.mu.html
index 64332fb3..fc003903 100644
--- a/html/edit/006-sandbox-copy.mu.html
+++ b/html/edit/006-sandbox-copy.mu.html
@@ -201,7 +201,7 @@ if ('onhashchange' in window) {
 <span id="L139" class="LineNr">139 </span><span class="Comment"># some preconditions for attempting to copy a sandbox</span>
 <span id="L140" class="LineNr">140 </span><span class="muRecipe">def</span> <a href='006-sandbox-copy.mu.html#L140'>should-attempt-copy?</a> click-row:num, click-column:num, env:&amp;:environment<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L141" class="LineNr">141 </span>  <span class="Constant">local-scope</span>
-<span id="L142" class="LineNr">142 </span>  <span class="Constant">load-ingredients</span>
+<span id="L142" class="LineNr">142 </span>  <span class="Constant">load-inputs</span>
 <span id="L143" class="LineNr">143 </span>  <span class="Comment"># are we below the sandbox editor?</span>
 <span id="L144" class="LineNr">144 </span>  click-sandbox-area?:bool <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L190'>click-on-sandbox-area?</a> click-row, click-column, env
 <span id="L145" class="LineNr">145 </span>  <span class="muControl">return-unless</span> click-sandbox-area?, <span class="Constant">0/false</span>
@@ -220,7 +220,7 @@ if ('onhashchange' in window) {
 <span id="L158" class="LineNr">158 </span>
 <span id="L159" class="LineNr">159 </span><span class="muRecipe">def</span> <a href='006-sandbox-copy.mu.html#L159'>try-copy-sandbox</a> click-row:num, env:&amp;:environment<span class="muRecipe"> -&gt; </span>clicked-on-copy-button?:bool, env:&amp;:environment [
 <span id="L160" class="LineNr">160 </span>  <span class="Constant">local-scope</span>
-<span id="L161" class="LineNr">161 </span>  <span class="Constant">load-ingredients</span>
+<span id="L161" class="LineNr">161 </span>  <span class="Constant">load-inputs</span>
 <span id="L162" class="LineNr">162 </span>  <span class="Comment"># identify the sandbox to copy, if the click was actually on the 'copy' button</span>
 <span id="L163" class="LineNr">163 </span>  sandbox:&amp;:sandbox <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L175'>find-sandbox</a> env, click-row
 <span id="L164" class="LineNr">164 </span>  <span class="muControl">return-unless</span> sandbox, <span class="Constant">0/false</span>
@@ -236,7 +236,7 @@ if ('onhashchange' in window) {
 <span id="L174" class="LineNr">174 </span>
 <span id="L175" class="LineNr">175 </span><span class="muRecipe">def</span> <a href='006-sandbox-copy.mu.html#L175'>find-sandbox</a> env:&amp;:environment, click-row:num<span class="muRecipe"> -&gt; </span>result:&amp;:sandbox [
 <span id="L176" class="LineNr">176 </span>  <span class="Constant">local-scope</span>
-<span id="L177" class="LineNr">177 </span>  <span class="Constant">load-ingredients</span>
+<span id="L177" class="LineNr">177 </span>  <span class="Constant">load-inputs</span>
 <span id="L178" class="LineNr">178 </span>  curr-sandbox:&amp;:sandbox <span class="Special">&lt;-</span> get *env, <span class="Constant">sandbox:offset</span>
 <span id="L179" class="LineNr">179 </span>  <span class="Delimiter">{</span>
 <span id="L180" class="LineNr">180 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> curr-sandbox
@@ -251,7 +251,7 @@ if ('onhashchange' in window) {
 <span id="L189" class="LineNr">189 </span>
 <span id="L190" class="LineNr">190 </span><span class="muRecipe">def</span> <a href='006-sandbox-copy.mu.html#L190'>click-on-sandbox-area?</a> click-row:num, click-column:num, env:&amp;:environment<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L191" class="LineNr">191 </span>  <span class="Constant">local-scope</span>
-<span id="L192" class="LineNr">192 </span>  <span class="Constant">load-ingredients</span>
+<span id="L192" class="LineNr">192 </span>  <span class="Constant">load-inputs</span>
 <span id="L193" class="LineNr">193 </span>  current-sandbox:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">current-sandbox:offset</span>
 <span id="L194" class="LineNr">194 </span>  sandbox-left-margin:num <span class="Special">&lt;-</span> get *current-sandbox, <span class="Constant">left:offset</span>
 <span id="L195" class="LineNr">195 </span>  on-sandbox-side?:bool <span class="Special">&lt;-</span> greater-or-equal click-column, sandbox-left-margin
@@ -264,7 +264,7 @@ if ('onhashchange' in window) {
 <span id="L202" class="LineNr">202 </span>
 <span id="L203" class="LineNr">203 </span><span class="muRecipe">def</span> <a href='006-sandbox-copy.mu.html#L203'>empty-editor?</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L204" class="LineNr">204 </span>  <span class="Constant">local-scope</span>
-<span id="L205" class="LineNr">205 </span>  <span class="Constant">load-ingredients</span>
+<span id="L205" class="LineNr">205 </span>  <span class="Constant">load-inputs</span>
 <span id="L206" class="LineNr">206 </span>  head:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
 <span id="L207" class="LineNr">207 </span>  first:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> head
 <span id="L208" class="LineNr">208 </span>  result <span class="Special">&lt;-</span> not first
@@ -272,7 +272,7 @@ if ('onhashchange' in window) {
 <span id="L210" class="LineNr">210 </span>
 <span id="L211" class="LineNr">211 </span><span class="muRecipe">def</span> <a href='006-sandbox-copy.mu.html#L211'>within-range?</a> x:num, low:num, high:num<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L212" class="LineNr">212 </span>  <span class="Constant">local-scope</span>
-<span id="L213" class="LineNr">213 </span>  <span class="Constant">load-ingredients</span>
+<span id="L213" class="LineNr">213 </span>  <span class="Constant">load-inputs</span>
 <span id="L214" class="LineNr">214 </span>  not-too-far-left?:bool <span class="Special">&lt;-</span> greater-or-equal x, low
 <span id="L215" class="LineNr">215 </span>  not-too-far-right?:bool <span class="Special">&lt;-</span> lesser-or-equal x, high
 <span id="L216" class="LineNr">216 </span>  result <span class="Special">&lt;-</span> and not-too-far-left? not-too-far-right?
@@ -421,7 +421,7 @@ if ('onhashchange' in window) {
 <span id="L359" class="LineNr">359 </span><span class="Comment"># some preconditions for attempting to copy a sandbox into the recipe side</span>
 <span id="L360" class="LineNr">360 </span><span class="muRecipe">def</span> <a href='006-sandbox-copy.mu.html#L360'>should-copy-to-recipe?</a> click-row:num, click-column:num, env:&amp;:environment<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L361" class="LineNr">361 </span>  <span class="Constant">local-scope</span>
-<span id="L362" class="LineNr">362 </span>  <span class="Constant">load-ingredients</span>
+<span id="L362" class="LineNr">362 </span>  <span class="Constant">load-inputs</span>
 <span id="L363" class="LineNr">363 </span>  <span class="Comment"># are we below the sandbox editor?</span>
 <span id="L364" class="LineNr">364 </span>  click-sandbox-area?:bool <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L190'>click-on-sandbox-area?</a> click-row, click-column, env
 <span id="L365" class="LineNr">365 </span>  <span class="muControl">return-unless</span> click-sandbox-area?, <span class="Constant">0/false</span>
@@ -436,7 +436,7 @@ if ('onhashchange' in window) {
 <span id="L374" class="LineNr">374 </span>
 <span id="L375" class="LineNr">375 </span><span class="muRecipe">def</span> <a href='006-sandbox-copy.mu.html#L375'>prepend-sandbox-into-recipe-side</a> click-row:num, env:&amp;:environment<span class="muRecipe"> -&gt; </span>clicked-on-copy-to-recipe-button?:bool, env:&amp;:environment [
 <span id="L376" class="LineNr">376 </span>  <span class="Constant">local-scope</span>
-<span id="L377" class="LineNr">377 </span>  <span class="Constant">load-ingredients</span>
+<span id="L377" class="LineNr">377 </span>  <span class="Constant">load-inputs</span>
 <span id="L378" class="LineNr">378 </span>  sandbox:&amp;:sandbox <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L175'>find-sandbox</a> env, click-row
 <span id="L379" class="LineNr">379 </span>  <span class="muControl">return-unless</span> sandbox, <span class="Constant">0/false</span>
 <span id="L380" class="LineNr">380 </span>  recipe-editor:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">recipes:offset</span>
diff --git a/html/edit/007-sandbox-delete.mu.html b/html/edit/007-sandbox-delete.mu.html
index 6bdae16e..c8fde128 100644
--- a/html/edit/007-sandbox-delete.mu.html
+++ b/html/edit/007-sandbox-delete.mu.html
@@ -144,7 +144,7 @@ if ('onhashchange' in window) {
 <span id="L82" class="LineNr"> 82 </span><span class="Comment"># some preconditions for attempting to delete a sandbox</span>
 <span id="L83" class="LineNr"> 83 </span><span class="muRecipe">def</span> <a href='007-sandbox-delete.mu.html#L83'>should-attempt-delete?</a> click-row:num, click-column:num, env:&amp;:environment<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L84" class="LineNr"> 84 </span>  <span class="Constant">local-scope</span>
-<span id="L85" class="LineNr"> 85 </span>  <span class="Constant">load-ingredients</span>
+<span id="L85" class="LineNr"> 85 </span>  <span class="Constant">load-inputs</span>
 <span id="L86" class="LineNr"> 86 </span>  <span class="Comment"># are we below the sandbox editor?</span>
 <span id="L87" class="LineNr"> 87 </span>  click-sandbox-area?:bool <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L190'>click-on-sandbox-area?</a> click-row, click-column, env
 <span id="L88" class="LineNr"> 88 </span>  <span class="muControl">return-unless</span> click-sandbox-area?, <span class="Constant">0/false</span>
@@ -159,7 +159,7 @@ if ('onhashchange' in window) {
 <span id="L97" class="LineNr"> 97 </span>
 <span id="L98" class="LineNr"> 98 </span><span class="muRecipe">def</span> <a href='007-sandbox-delete.mu.html#L98'>try-delete-sandbox</a> click-row:num, env:&amp;:environment<span class="muRecipe"> -&gt; </span>clicked-on-delete-button?:bool, env:&amp;:environment [
 <span id="L99" class="LineNr"> 99 </span>  <span class="Constant">local-scope</span>
-<span id="L100" class="LineNr">100 </span>  <span class="Constant">load-ingredients</span>
+<span id="L100" class="LineNr">100 </span>  <span class="Constant">load-inputs</span>
 <span id="L101" class="LineNr">101 </span>  <span class="Comment"># identify the sandbox to delete, if the click was actually on the 'delete' button</span>
 <span id="L102" class="LineNr">102 </span>  sandbox:&amp;:sandbox <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L175'>find-sandbox</a> env, click-row
 <span id="L103" class="LineNr">103 </span>  <span class="muControl">return-unless</span> sandbox, <span class="Constant">0/false</span>
@@ -169,7 +169,7 @@ if ('onhashchange' in window) {
 <span id="L107" class="LineNr">107 </span>
 <span id="L108" class="LineNr">108 </span><span class="muRecipe">def</span> <a href='007-sandbox-delete.mu.html#L108'>delete-sandbox</a> env:&amp;:environment, sandbox:&amp;:sandbox<span class="muRecipe"> -&gt; </span>env:&amp;:environment [
 <span id="L109" class="LineNr">109 </span>  <span class="Constant">local-scope</span>
-<span id="L110" class="LineNr">110 </span>  <span class="Constant">load-ingredients</span>
+<span id="L110" class="LineNr">110 </span>  <span class="Constant">load-inputs</span>
 <span id="L111" class="LineNr">111 </span>  curr-sandbox:&amp;:sandbox <span class="Special">&lt;-</span> get *env, <span class="Constant">sandbox:offset</span>
 <span id="L112" class="LineNr">112 </span>  first-sandbox?:bool <span class="Special">&lt;-</span> equal curr-sandbox, sandbox
 <span id="L113" class="LineNr">113 </span>  <span class="Delimiter">{</span>
diff --git a/html/edit/008-sandbox-edit.mu.html b/html/edit/008-sandbox-edit.mu.html
index 4c8025ab..7f6028a7 100644
--- a/html/edit/008-sandbox-edit.mu.html
+++ b/html/edit/008-sandbox-edit.mu.html
@@ -184,7 +184,7 @@ if ('onhashchange' in window) {
 <span id="L122" class="LineNr">122 </span><span class="Comment"># some preconditions for attempting to edit a sandbox</span>
 <span id="L123" class="LineNr">123 </span><span class="muRecipe">def</span> <a href='008-sandbox-edit.mu.html#L123'>should-attempt-edit?</a> click-row:num, click-column:num, env:&amp;:environment<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L124" class="LineNr">124 </span>  <span class="Constant">local-scope</span>
-<span id="L125" class="LineNr">125 </span>  <span class="Constant">load-ingredients</span>
+<span id="L125" class="LineNr">125 </span>  <span class="Constant">load-inputs</span>
 <span id="L126" class="LineNr">126 </span>  <span class="Comment"># are we below the sandbox editor?</span>
 <span id="L127" class="LineNr">127 </span>  click-sandbox-area?:bool <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L190'>click-on-sandbox-area?</a> click-row, click-column, env
 <span id="L128" class="LineNr">128 </span>  <span class="muControl">return-unless</span> click-sandbox-area?, <span class="Constant">0/false</span>
@@ -203,7 +203,7 @@ if ('onhashchange' in window) {
 <span id="L141" class="LineNr">141 </span>
 <span id="L142" class="LineNr">142 </span><span class="muRecipe">def</span> <a href='008-sandbox-edit.mu.html#L142'>try-edit-sandbox</a> click-row:num, env:&amp;:environment<span class="muRecipe"> -&gt; </span>clicked-on-edit-button?:bool, env:&amp;:environment [
 <span id="L143" class="LineNr">143 </span>  <span class="Constant">local-scope</span>
-<span id="L144" class="LineNr">144 </span>  <span class="Constant">load-ingredients</span>
+<span id="L144" class="LineNr">144 </span>  <span class="Constant">load-inputs</span>
 <span id="L145" class="LineNr">145 </span>  <span class="Comment"># identify the sandbox to edit, if the click was actually on the 'edit' button</span>
 <span id="L146" class="LineNr">146 </span>  sandbox:&amp;:sandbox <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L175'>find-sandbox</a> env, click-row
 <span id="L147" class="LineNr">147 </span>  <span class="muControl">return-unless</span> sandbox, <span class="Constant">0/false</span>
diff --git a/html/edit/009-sandbox-test.mu.html b/html/edit/009-sandbox-test.mu.html
index c6ef7017..e311f2c0 100644
--- a/html/edit/009-sandbox-test.mu.html
+++ b/html/edit/009-sandbox-test.mu.html
@@ -214,7 +214,7 @@ if ('onhashchange' in window) {
 <span id="L151" class="LineNr">151 </span>
 <span id="L152" class="LineNr">152 </span><span class="muRecipe">def</span> <a href='009-sandbox-test.mu.html#L152'>find-click-in-sandbox-output</a> env:&amp;:environment, click-row:num<span class="muRecipe"> -&gt; </span>sandbox:&amp;:sandbox, sandbox-index:num [
 <span id="L153" class="LineNr">153 </span>  <span class="Constant">local-scope</span>
-<span id="L154" class="LineNr">154 </span>  <span class="Constant">load-ingredients</span>
+<span id="L154" class="LineNr">154 </span>  <span class="Constant">load-inputs</span>
 <span id="L155" class="LineNr">155 </span>  <span class="Comment"># assert click-row &gt;= sandbox.starting-row-on-screen</span>
 <span id="L156" class="LineNr">156 </span>  sandbox:&amp;:sandbox <span class="Special">&lt;-</span> get *env, <span class="Constant">sandbox:offset</span>
 <span id="L157" class="LineNr">157 </span>  start:num <span class="Special">&lt;-</span> get *sandbox, <span class="Constant">starting-row-on-screen:offset</span>
@@ -242,7 +242,7 @@ if ('onhashchange' in window) {
 <span id="L179" class="LineNr">179 </span>
 <span id="L180" class="LineNr">180 </span><span class="muRecipe">def</span> <a href='009-sandbox-test.mu.html#L180'>toggle-expected-response</a> sandbox:&amp;:sandbox<span class="muRecipe"> -&gt; </span>sandbox:&amp;:sandbox [
 <span id="L181" class="LineNr">181 </span>  <span class="Constant">local-scope</span>
-<span id="L182" class="LineNr">182 </span>  <span class="Constant">load-ingredients</span>
+<span id="L182" class="LineNr">182 </span>  <span class="Constant">load-inputs</span>
 <span id="L183" class="LineNr">183 </span>  expected-response:text <span class="Special">&lt;-</span> get *sandbox, <span class="Constant">expected-response:offset</span>
 <span id="L184" class="LineNr">184 </span>  <span class="Delimiter">{</span>
 <span id="L185" class="LineNr">185 </span>  <span class="Conceal">¦</span> <span class="Comment"># if expected-response is set, reset</span>
@@ -269,7 +269,7 @@ if ('onhashchange' in window) {
 <span id="L206" class="LineNr">206 </span>
 <span id="L207" class="LineNr">207 </span><span class="muRecipe">def</span> <a href='009-sandbox-test.mu.html#L207'>render-sandbox-response</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, sandbox:&amp;:sandbox, left:num, right:num<span class="muRecipe"> -&gt; </span>row:num, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L208" class="LineNr">208 </span>  <span class="Constant">local-scope</span>
-<span id="L209" class="LineNr">209 </span>  <span class="Constant">load-ingredients</span>
+<span id="L209" class="LineNr">209 </span>  <span class="Constant">load-inputs</span>
 <span id="L210" class="LineNr">210 </span>  sandbox-response:text <span class="Special">&lt;-</span> get *sandbox, <span class="Constant">response:offset</span>
 <span id="L211" class="LineNr">211 </span>  expected-response:text <span class="Special">&lt;-</span> get *sandbox, <span class="Constant">expected-response:offset</span>
 <span id="L212" class="LineNr">212 </span>  row:num <span class="Special">&lt;-</span> get *sandbox <span class="Constant">response-starting-row-on-screen:offset</span>
diff --git a/html/edit/010-sandbox-trace.mu.html b/html/edit/010-sandbox-trace.mu.html
index 892be6eb..8f907fa7 100644
--- a/html/edit/010-sandbox-trace.mu.html
+++ b/html/edit/010-sandbox-trace.mu.html
@@ -237,7 +237,7 @@ if ('onhashchange' in window) {
 <span id="L174" class="LineNr">174 </span><span class="Comment"># replaced in a later layer</span>
 <span id="L175" class="LineNr">175 </span><span class="muRecipe">def!</span> update-sandbox sandbox:&amp;:sandbox, env:&amp;:environment, idx:num<span class="muRecipe"> -&gt; </span>sandbox:&amp;:sandbox, env:&amp;:environment [
 <span id="L176" class="LineNr">176 </span>  <span class="Constant">local-scope</span>
-<span id="L177" class="LineNr">177 </span>  <span class="Constant">load-ingredients</span>
+<span id="L177" class="LineNr">177 </span>  <span class="Constant">load-inputs</span>
 <span id="L178" class="LineNr">178 </span>  data:text <span class="Special">&lt;-</span> get *sandbox, <span class="Constant">data:offset</span>
 <span id="L179" class="LineNr">179 </span>  response:text, _, fake-screen:&amp;:<a href='../081print.mu.html#L16'>screen</a>, trace:text <span class="Special">&lt;-</span> run-sandboxed data
 <span id="L180" class="LineNr">180 </span>  *sandbox <span class="Special">&lt;-</span> put *sandbox, <span class="Constant">response:offset</span>, response
@@ -274,7 +274,7 @@ if ('onhashchange' in window) {
 <span id="L211" class="LineNr">211 </span>
 <span id="L212" class="LineNr">212 </span><span class="muRecipe">def</span> <a href='010-sandbox-trace.mu.html#L212'>find-click-in-sandbox-code</a> env:&amp;:environment, click-row:num<span class="muRecipe"> -&gt; </span>sandbox:&amp;:sandbox [
 <span id="L213" class="LineNr">213 </span>  <span class="Constant">local-scope</span>
-<span id="L214" class="LineNr">214 </span>  <span class="Constant">load-ingredients</span>
+<span id="L214" class="LineNr">214 </span>  <span class="Constant">load-inputs</span>
 <span id="L215" class="LineNr">215 </span>  <span class="Comment"># assert click-row &gt;= sandbox.starting-row-on-screen</span>
 <span id="L216" class="LineNr">216 </span>  sandbox <span class="Special">&lt;-</span> get *env, <span class="Constant">sandbox:offset</span>
 <span id="L217" class="LineNr">217 </span>  start:num <span class="Special">&lt;-</span> get *sandbox, <span class="Constant">starting-row-on-screen:offset</span>
diff --git a/html/edit/011-errors.mu.html b/html/edit/011-errors.mu.html
index 136fc31f..8519462b 100644
--- a/html/edit/011-errors.mu.html
+++ b/html/edit/011-errors.mu.html
@@ -70,7 +70,7 @@ if ('onhashchange' in window) {
 <span id="L7" class="LineNr">  7 </span><span class="Comment"># copy code from recipe editor, persist to disk, load, save any errors</span>
 <span id="L8" class="LineNr">  8 </span><span class="muRecipe">def!</span> update-recipes env:&amp;:environment, <a href='../088file.mu.html#L11'>resources</a>:&amp;:<a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>errors-found?:bool, env:&amp;:environment, <a href='../088file.mu.html#L11'>resources</a>:&amp;:<a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L9" class="LineNr">  9 </span>  <span class="Constant">local-scope</span>
-<span id="L10" class="LineNr"> 10 </span>  <span class="Constant">load-ingredients</span>
+<span id="L10" class="LineNr"> 10 </span>  <span class="Constant">load-inputs</span>
 <span id="L11" class="LineNr"> 11 </span>  recipes:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">recipes:offset</span>
 <span id="L12" class="LineNr"> 12 </span>  in:text <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L683'>editor-contents</a> recipes
 <span id="L13" class="LineNr"> 13 </span>  <a href='../088file.mu.html#L11'>resources</a> <span class="Special">&lt;-</span> <a href='../088file.mu.html#L127'>dump</a> <a href='../088file.mu.html#L11'>resources</a>, <span class="Constant">[lesson/recipes.mu]</span>, in
@@ -104,7 +104,7 @@ if ('onhashchange' in window) {
 <span id="L41" class="LineNr"> 41 </span>
 <span id="L42" class="LineNr"> 42 </span><span class="muRecipe">def</span> <a href='011-errors.mu.html#L42'>render-recipe-errors</a> env:&amp;:environment, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
 <span id="L43" class="LineNr"> 43 </span>  <span class="Constant">local-scope</span>
-<span id="L44" class="LineNr"> 44 </span>  <span class="Constant">load-ingredients</span>
+<span id="L44" class="LineNr"> 44 </span>  <span class="Constant">load-inputs</span>
 <span id="L45" class="LineNr"> 45 </span>  recipe-errors:text <span class="Special">&lt;-</span> get *env, <span class="Constant">recipe-errors:offset</span>
 <span id="L46" class="LineNr"> 46 </span>  <span class="muControl">return-unless</span> recipe-errors
 <span id="L47" class="LineNr"> 47 </span>  recipes:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">recipes:offset</span>
@@ -159,7 +159,7 @@ if ('onhashchange' in window) {
 <span id="L96" class="LineNr"> 96 </span>
 <span id="L97" class="LineNr"> 97 </span><span class="muRecipe">def!</span> update-sandbox sandbox:&amp;:sandbox, env:&amp;:environment, idx:num<span class="muRecipe"> -&gt; </span>sandbox:&amp;:sandbox, env:&amp;:environment [
 <span id="L98" class="LineNr"> 98 </span>  <span class="Constant">local-scope</span>
-<span id="L99" class="LineNr"> 99 </span>  <span class="Constant">load-ingredients</span>
+<span id="L99" class="LineNr"> 99 </span>  <span class="Constant">load-inputs</span>
 <span id="L100" class="LineNr">100 </span>  data:text <span class="Special">&lt;-</span> get *sandbox, <span class="Constant">data:offset</span>
 <span id="L101" class="LineNr">101 </span>  response:text, errors:text, fake-screen:&amp;:<a href='../081print.mu.html#L16'>screen</a>, trace:text, completed?:bool <span class="Special">&lt;-</span> run-sandboxed data
 <span id="L102" class="LineNr">102 </span>  *sandbox <span class="Special">&lt;-</span> put *sandbox, <span class="Constant">response:offset</span>, response
diff --git a/html/edit/012-editor-undo.mu.html b/html/edit/012-editor-undo.mu.html
index dcf95a50..0bda1aaf 100644
--- a/html/edit/012-editor-undo.mu.html
+++ b/html/edit/012-editor-undo.mu.html
@@ -264,7 +264,7 @@ if ('onhashchange' in window) {
 <span id="L201" class="LineNr"> 201 </span><span class="Comment"># moving the cursor can lose work on the undo stack.</span>
 <span id="L202" class="LineNr"> 202 </span><span class="muRecipe">def</span> <a href='012-editor-undo.mu.html#L202'>add-operation</a> editor:&amp;:editor, op:&amp;:<a href='012-editor-undo.mu.html#L5'>operation</a><span class="muRecipe"> -&gt; </span>editor:&amp;:editor [
 <span id="L203" class="LineNr"> 203 </span>  <span class="Constant">local-scope</span>
-<span id="L204" class="LineNr"> 204 </span>  <span class="Constant">load-ingredients</span>
+<span id="L204" class="LineNr"> 204 </span>  <span class="Constant">load-inputs</span>
 <span id="L205" class="LineNr"> 205 </span>  undo:&amp;:<a href='../064list.mu.html#L6'>list</a>:&amp;:<a href='012-editor-undo.mu.html#L5'>operation</a> <span class="Special">&lt;-</span> get *editor, <span class="Constant">undo:offset</span>
 <span id="L206" class="LineNr"> 206 </span>  undo <span class="Special">&lt;-</span> push op undo
 <span id="L207" class="LineNr"> 207 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">undo:offset</span>, undo
diff --git a/html/factorial.mu.html b/html/factorial.mu.html
index db134e8f..9a02e01f 100644
--- a/html/factorial.mu.html
+++ b/html/factorial.mu.html
@@ -70,7 +70,7 @@ if ('onhashchange' in window) {
 <span id="L9" class="LineNr"> 9 </span>
 <span id="L10" class="LineNr">10 </span><span class="muRecipe">def</span> <a href='factorial.mu.html#L10'>factorial</a> n:num<span class="muRecipe"> -&gt; </span>result:num [
 <span id="L11" class="LineNr">11 </span>  <span class="Constant">local-scope</span>
-<span id="L12" class="LineNr">12 </span>  <span class="Constant">load-ingredients</span>
+<span id="L12" class="LineNr">12 </span>  <span class="Constant">load-inputs</span>
 <span id="L13" class="LineNr">13 </span>  <span class="Delimiter">{</span>
 <span id="L14" class="LineNr">14 </span>  <span class="Conceal">¦</span> <span class="Comment"># if n=0 return 1</span>
 <span id="L15" class="LineNr">15 </span>  <span class="Conceal">¦</span> zero?:bool <span class="Special">&lt;-</span> equal n,<span class="Constant"> 0</span>
diff --git a/html/http-client.mu.html b/html/http-client.mu.html
index 119a9b6d..91e04cbe 100644
--- a/html/http-client.mu.html
+++ b/html/http-client.mu.html
@@ -62,24 +62,31 @@ if ('onhashchange' in window) {
 <span id="L2" class="LineNr"> 2 </span>
 <span id="L3" class="LineNr"> 3 </span><span class="muRecipe">def</span> <a href='http-client.mu.html#L3'>main</a> [
 <span id="L4" class="LineNr"> 4 </span>  <span class="Constant">local-scope</span>
-<span id="L5" class="LineNr"> 5 </span>  google:&amp;:<a href='075channel.mu.html#L43'>source</a>:char <span class="Special">&lt;-</span> <a href='092socket.mu.html#L69'>start-reading-from-network</a> <span class="Constant">0/real-resources</span>, <span class="Constant">[google.com/]</span>
-<span id="L6" class="LineNr"> 6 </span>  n:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
-<span id="L7" class="LineNr"> 7 </span>  buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 30</span>
-<span id="L8" class="LineNr"> 8 </span>  <span class="Delimiter">{</span>
-<span id="L9" class="LineNr"> 9 </span>  <span class="Conceal">¦</span> c:char, done?:bool <span class="Special">&lt;-</span> read google
-<span id="L10" class="LineNr">10 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> done?
-<span id="L11" class="LineNr">11 </span>  <span class="Conceal">¦</span> n <span class="Special">&lt;-</span> add n,<span class="Constant"> 1</span>
-<span id="L12" class="LineNr">12 </span>  <span class="Conceal">¦</span> buf <span class="Special">&lt;-</span> append buf, c
-<span id="L13" class="LineNr">13 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
-<span id="L14" class="LineNr">14 </span>  <span class="Delimiter">}</span>
-<span id="L15" class="LineNr">15 </span>  result:text <span class="Special">&lt;-</span> <a href='061text.mu.html#L338'>buffer-to-array</a> buf
-<span id="L16" class="LineNr">16 </span>  open-console
-<span id="L17" class="LineNr">17 </span>  <a href='081print.mu.html#L46'>clear-screen</a> <span class="Constant">0/screen</span>  <span class="Comment"># non-scrolling app</span>
-<span id="L18" class="LineNr">18 </span>  len:num <span class="Special">&lt;-</span> length *result
-<span id="L19" class="LineNr">19 </span>  print <span class="Constant">0/real-screen</span>, result
-<span id="L20" class="LineNr">20 </span>  wait-for-some-interaction
-<span id="L21" class="LineNr">21 </span>  close-console
-<span id="L22" class="LineNr">22 </span>]
+<span id="L5" class="LineNr"> 5 </span>  $print <span class="Constant">[aaa]</span> <span class="Constant">10/newline</span>
+<span id="L6" class="LineNr"> 6 </span>  google:&amp;:<a href='075channel.mu.html#L43'>source</a>:char <span class="Special">&lt;-</span> <a href='092socket.mu.html#L69'>start-reading-from-network</a> <span class="Constant">0/real-resources</span>, <span class="Constant">[google.com/]</span>
+<span id="L7" class="LineNr"> 7 </span>  $print <span class="Constant">[bbb]</span> <span class="Constant">10/newline</span>
+<span id="L8" class="LineNr"> 8 </span>  n:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L9" class="LineNr"> 9 </span>  buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 30</span>
+<span id="L10" class="LineNr">10 </span>  <span class="Delimiter">{</span>
+<span id="L11" class="LineNr">11 </span>  <span class="Conceal">¦</span> c:char, done?:bool <span class="Special">&lt;-</span> read google
+<span id="L12" class="LineNr">12 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> done?
+<span id="L13" class="LineNr">13 </span>  <span class="Conceal">¦</span> n <span class="Special">&lt;-</span> add n,<span class="Constant"> 1</span>
+<span id="L14" class="LineNr">14 </span>  <span class="Conceal">¦</span> buf <span class="Special">&lt;-</span> append buf, c
+<span id="L15" class="LineNr">15 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
+<span id="L16" class="LineNr">16 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> _, a:num <span class="Special">&lt;-</span> divide-with-remainder n,<span class="Constant"> 100</span>
+<span id="L17" class="LineNr">17 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> a
+<span id="L18" class="LineNr">18 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> $print n <span class="Constant">10/newline</span>
+<span id="L19" class="LineNr">19 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
+<span id="L20" class="LineNr">20 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
+<span id="L21" class="LineNr">21 </span>  <span class="Delimiter">}</span>
+<span id="L22" class="LineNr">22 </span>  result:text <span class="Special">&lt;-</span> <a href='061text.mu.html#L338'>buffer-to-array</a> buf
+<span id="L23" class="LineNr">23 </span>  open-console
+<span id="L24" class="LineNr">24 </span>  <a href='081print.mu.html#L46'>clear-screen</a> <span class="Constant">0/screen</span>  <span class="Comment"># non-scrolling app</span>
+<span id="L25" class="LineNr">25 </span>  len:num <span class="Special">&lt;-</span> length *result
+<span id="L26" class="LineNr">26 </span>  print <span class="Constant">0/real-screen</span>, result
+<span id="L27" class="LineNr">27 </span>  wait-for-some-interaction
+<span id="L28" class="LineNr">28 </span>  close-console
+<span id="L29" class="LineNr">29 </span>]
 </pre>
 </body>
 </html>
diff --git a/html/immutable-error.mu.html b/html/immutable-error.mu.html
index 07457b69..92113108 100644
--- a/html/immutable-error.mu.html
+++ b/html/immutable-error.mu.html
@@ -65,7 +65,7 @@ if ('onhashchange' in window) {
 <span id="L8" class="LineNr"> 8 </span>
 <span id="L9" class="LineNr"> 9 </span><span class="muRecipe">def</span> <a href='immutable-error.mu.html#L9'>foo</a> x:&amp;:num [
 <span id="L10" class="LineNr">10 </span>  <span class="Constant">local-scope</span>
-<span id="L11" class="LineNr">11 </span>  <span class="Constant">load-ingredients</span>
+<span id="L11" class="LineNr">11 </span>  <span class="Constant">load-inputs</span>
 <span id="L12" class="LineNr">12 </span>  *x <span class="Special">&lt;-</span> copy<span class="Constant"> 34</span>  <span class="Comment"># will cause an error because x is immutable in this function</span>
 <span id="L13" class="LineNr">13 </span>]
 </pre>
diff --git a/html/lambda-to-mu.mu.html b/html/lambda-to-mu.mu.html
index 91c9984b..c6502d25 100644
--- a/html/lambda-to-mu.mu.html
+++ b/html/lambda-to-mu.mu.html
@@ -69,7 +69,7 @@ if ('onhashchange' in window) {
 <span id="L5" class="LineNr">  5 </span><span class="Comment"># potential enhancements:</span>
 <span id="L6" class="LineNr">  6 </span><span class="Comment">#   symbol table</span>
 <span id="L7" class="LineNr">  7 </span><span class="Comment">#   poor man's macros</span>
-<span id="L8" class="LineNr">  8 </span><span class="Comment">#     substitute one instruction with multiple, parameterized by ingredients and products</span>
+<span id="L8" class="LineNr">  8 </span><span class="Comment">#     substitute one instruction with multiple, parameterized by inputs and products</span>
 <span id="L9" class="LineNr">  9 </span>
 <span id="L10" class="LineNr"> 10 </span><span class="muScenario">scenario</span> convert-lambda [
 <span id="L11" class="LineNr"> 11 </span>  run [
@@ -85,7 +85,7 @@ if ('onhashchange' in window) {
 <span id="L21" class="LineNr"> 21 </span>
 <span id="L22" class="LineNr"> 22 </span><span class="muRecipe">def</span> <a href='lambda-to-mu.mu.html#L22'>lambda-to-mu</a> in:text<span class="muRecipe"> -&gt; </span>out:text [
 <span id="L23" class="LineNr"> 23 </span>  <span class="Constant">local-scope</span>
-<span id="L24" class="LineNr"> 24 </span>  <span class="Constant">load-ingredients</span>
+<span id="L24" class="LineNr"> 24 </span>  <span class="Constant">load-inputs</span>
 <span id="L25" class="LineNr"> 25 </span>  out <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L26" class="LineNr"> 26 </span>  cells:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a> <span class="Special">&lt;-</span> parse in
 <span id="L27" class="LineNr"> 27 </span>  out <span class="Special">&lt;-</span> to-mu cells
@@ -105,28 +105,28 @@ if ('onhashchange' in window) {
 <span id="L41" class="LineNr"> 41 </span>
 <span id="L42" class="LineNr"> 42 </span><span class="muRecipe">def</span> <a href='lambda-to-mu.mu.html#L42'>new-atom</a> name:text<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a> [
 <span id="L43" class="LineNr"> 43 </span>  <span class="Constant">local-scope</span>
-<span id="L44" class="LineNr"> 44 </span>  <span class="Constant">load-ingredients</span>
+<span id="L44" class="LineNr"> 44 </span>  <span class="Constant">load-inputs</span>
 <span id="L45" class="LineNr"> 45 </span>  result <span class="Special">&lt;-</span> new <span class="Constant"><a href='lambda-to-mu.mu.html#L31'>cell</a>:type</span>
 <span id="L46" class="LineNr"> 46 </span>  *result <span class="Special">&lt;-</span> merge <span class="Constant">0/tag:atom</span>, name
 <span id="L47" class="LineNr"> 47 </span>]
 <span id="L48" class="LineNr"> 48 </span>
 <span id="L49" class="LineNr"> 49 </span><span class="muRecipe">def</span> <a href='lambda-to-mu.mu.html#L49'>new-pair</a> a:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a>, b:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a><span class="muRecipe"> -&gt; </span>result:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a> [
 <span id="L50" class="LineNr"> 50 </span>  <span class="Constant">local-scope</span>
-<span id="L51" class="LineNr"> 51 </span>  <span class="Constant">load-ingredients</span>
+<span id="L51" class="LineNr"> 51 </span>  <span class="Constant">load-inputs</span>
 <span id="L52" class="LineNr"> 52 </span>  result <span class="Special">&lt;-</span> new <span class="Constant"><a href='lambda-to-mu.mu.html#L31'>cell</a>:type</span>
 <span id="L53" class="LineNr"> 53 </span>  *result <span class="Special">&lt;-</span> merge <span class="Constant">1/tag:<a href='lambda-to-mu.mu.html#L37'>pair</a></span>, a/first, b/rest
 <span id="L54" class="LineNr"> 54 </span>]
 <span id="L55" class="LineNr"> 55 </span>
 <span id="L56" class="LineNr"> 56 </span><span class="muRecipe">def</span> <a href='lambda-to-mu.mu.html#L56'>is-atom?</a> x:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a><span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L57" class="LineNr"> 57 </span>  <span class="Constant">local-scope</span>
-<span id="L58" class="LineNr"> 58 </span>  <span class="Constant">load-ingredients</span>
+<span id="L58" class="LineNr"> 58 </span>  <span class="Constant">load-inputs</span>
 <span id="L59" class="LineNr"> 59 </span>  <span class="muControl">return-unless</span> x, <span class="Constant">0/false</span>
 <span id="L60" class="LineNr"> 60 </span>  _, result <span class="Special">&lt;-</span> maybe-convert *x, <span class="Constant">atom:variant</span>
 <span id="L61" class="LineNr"> 61 </span>]
 <span id="L62" class="LineNr"> 62 </span>
 <span id="L63" class="LineNr"> 63 </span><span class="muRecipe">def</span> <a href='lambda-to-mu.mu.html#L63'>is-pair?</a> x:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a><span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L64" class="LineNr"> 64 </span>  <span class="Constant">local-scope</span>
-<span id="L65" class="LineNr"> 65 </span>  <span class="Constant">load-ingredients</span>
+<span id="L65" class="LineNr"> 65 </span>  <span class="Constant">load-inputs</span>
 <span id="L66" class="LineNr"> 66 </span>  <span class="muControl">return-unless</span> x, <span class="Constant">0/false</span>
 <span id="L67" class="LineNr"> 67 </span>  _, result <span class="Special">&lt;-</span> maybe-convert *x, <span class="Constant"><a href='lambda-to-mu.mu.html#L37'>pair</a>:variant</span>
 <span id="L68" class="LineNr"> 68 </span>]
@@ -159,7 +159,7 @@ if ('onhashchange' in window) {
 <span id="L95" class="LineNr"> 95 </span>
 <span id="L96" class="LineNr"> 96 </span><span class="muRecipe">def</span> <a href='lambda-to-mu.mu.html#L96'>atom-match?</a> x:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a>, pat:text<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L97" class="LineNr"> 97 </span>  <span class="Constant">local-scope</span>
-<span id="L98" class="LineNr"> 98 </span>  <span class="Constant">load-ingredients</span>
+<span id="L98" class="LineNr"> 98 </span>  <span class="Constant">load-inputs</span>
 <span id="L99" class="LineNr"> 99 </span>  s:text, <a href='lambda-to-mu.mu.html#L56'>is-atom?</a>:bool <span class="Special">&lt;-</span> maybe-convert *x, <span class="Constant">atom:variant</span>
 <span id="L100" class="LineNr">100 </span>  <span class="muControl">return-unless</span> <a href='lambda-to-mu.mu.html#L56'>is-atom?</a>, <span class="Constant">0/false</span>
 <span id="L101" class="LineNr">101 </span>  result <span class="Special">&lt;-</span> equal pat, s
@@ -176,7 +176,7 @@ if ('onhashchange' in window) {
 <span id="L112" class="LineNr">112 </span>
 <span id="L113" class="LineNr">113 </span><span class="muRecipe">def</span> first x:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a><span class="muRecipe"> -&gt; </span>result:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a> [
 <span id="L114" class="LineNr">114 </span>  <span class="Constant">local-scope</span>
-<span id="L115" class="LineNr">115 </span>  <span class="Constant">load-ingredients</span>
+<span id="L115" class="LineNr">115 </span>  <span class="Constant">load-inputs</span>
 <span id="L116" class="LineNr">116 </span>  <a href='lambda-to-mu.mu.html#L37'>pair</a>:<a href='lambda-to-mu.mu.html#L37'>pair</a>, pair?:bool <span class="Special">&lt;-</span> maybe-convert *x, <span class="Constant"><a href='lambda-to-mu.mu.html#L37'>pair</a>:variant</span>
 <span id="L117" class="LineNr">117 </span>  <span class="muControl">return-unless</span> pair?, <span class="Constant">0/nil</span>
 <span id="L118" class="LineNr">118 </span>  result <span class="Special">&lt;-</span> get <a href='lambda-to-mu.mu.html#L37'>pair</a>, <span class="Constant">first:offset</span>
@@ -184,7 +184,7 @@ if ('onhashchange' in window) {
 <span id="L120" class="LineNr">120 </span>
 <span id="L121" class="LineNr">121 </span><span class="muRecipe">def</span> rest x:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a><span class="muRecipe"> -&gt; </span>result:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a> [
 <span id="L122" class="LineNr">122 </span>  <span class="Constant">local-scope</span>
-<span id="L123" class="LineNr">123 </span>  <span class="Constant">load-ingredients</span>
+<span id="L123" class="LineNr">123 </span>  <span class="Constant">load-inputs</span>
 <span id="L124" class="LineNr">124 </span>  <a href='lambda-to-mu.mu.html#L37'>pair</a>:<a href='lambda-to-mu.mu.html#L37'>pair</a>, pair?:bool <span class="Special">&lt;-</span> maybe-convert *x, <span class="Constant"><a href='lambda-to-mu.mu.html#L37'>pair</a>:variant</span>
 <span id="L125" class="LineNr">125 </span>  <span class="muControl">return-unless</span> pair?, <span class="Constant">0/nil</span>
 <span id="L126" class="LineNr">126 </span>  result <span class="Special">&lt;-</span> get <a href='lambda-to-mu.mu.html#L37'>pair</a>, <span class="Constant">rest:offset</span>
@@ -192,7 +192,7 @@ if ('onhashchange' in window) {
 <span id="L128" class="LineNr">128 </span>
 <span id="L129" class="LineNr">129 </span><span class="muRecipe">def</span> <a href='lambda-to-mu.mu.html#L129'>set-first</a> base:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a>, new-first:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a><span class="muRecipe"> -&gt; </span>base:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a> [
 <span id="L130" class="LineNr">130 </span>  <span class="Constant">local-scope</span>
-<span id="L131" class="LineNr">131 </span>  <span class="Constant">load-ingredients</span>
+<span id="L131" class="LineNr">131 </span>  <span class="Constant">load-inputs</span>
 <span id="L132" class="LineNr">132 </span>  <a href='lambda-to-mu.mu.html#L37'>pair</a>:<a href='lambda-to-mu.mu.html#L37'>pair</a>, <a href='lambda-to-mu.mu.html#L63'>is-pair?</a>:bool <span class="Special">&lt;-</span> maybe-convert *base, <span class="Constant"><a href='lambda-to-mu.mu.html#L37'>pair</a>:variant</span>
 <span id="L133" class="LineNr">133 </span>  <span class="muControl">return-unless</span> <a href='lambda-to-mu.mu.html#L63'>is-pair?</a>
 <span id="L134" class="LineNr">134 </span>  <a href='lambda-to-mu.mu.html#L37'>pair</a> <span class="Special">&lt;-</span> put <a href='lambda-to-mu.mu.html#L37'>pair</a>, <span class="Constant">first:offset</span>, new-first
@@ -201,7 +201,7 @@ if ('onhashchange' in window) {
 <span id="L137" class="LineNr">137 </span>
 <span id="L138" class="LineNr">138 </span><span class="muRecipe">def</span> <a href='lambda-to-mu.mu.html#L138'>set-rest</a> base:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a>, new-rest:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a><span class="muRecipe"> -&gt; </span>base:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a> [
 <span id="L139" class="LineNr">139 </span>  <span class="Constant">local-scope</span>
-<span id="L140" class="LineNr">140 </span>  <span class="Constant">load-ingredients</span>
+<span id="L140" class="LineNr">140 </span>  <span class="Constant">load-inputs</span>
 <span id="L141" class="LineNr">141 </span>  <a href='lambda-to-mu.mu.html#L37'>pair</a>:<a href='lambda-to-mu.mu.html#L37'>pair</a>, <a href='lambda-to-mu.mu.html#L63'>is-pair?</a>:bool <span class="Special">&lt;-</span> maybe-convert *base, <span class="Constant"><a href='lambda-to-mu.mu.html#L37'>pair</a>:variant</span>
 <span id="L142" class="LineNr">142 </span>  <span class="muControl">return-unless</span> <a href='lambda-to-mu.mu.html#L63'>is-pair?</a>
 <span id="L143" class="LineNr">143 </span>  <a href='lambda-to-mu.mu.html#L37'>pair</a> <span class="Special">&lt;-</span> put <a href='lambda-to-mu.mu.html#L37'>pair</a>, <span class="Constant">rest:offset</span>, new-rest
@@ -239,7 +239,7 @@ if ('onhashchange' in window) {
 <span id="L175" class="LineNr">175 </span>
 <span id="L176" class="LineNr">176 </span><span class="muRecipe">def</span> parse in:text<span class="muRecipe"> -&gt; </span>out:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a> [
 <span id="L177" class="LineNr">177 </span>  <span class="Constant">local-scope</span>
-<span id="L178" class="LineNr">178 </span>  <span class="Constant">load-ingredients</span>
+<span id="L178" class="LineNr">178 </span>  <span class="Constant">load-inputs</span>
 <span id="L179" class="LineNr">179 </span>  s:&amp;:<a href='066stream.mu.html#L2'>stream</a>:char <span class="Special">&lt;-</span> <a href='066stream.mu.html#L7'>new-stream</a> in
 <span id="L180" class="LineNr">180 </span>  out, s <span class="Special">&lt;-</span> parse s
 <span id="L181" class="LineNr">181 </span>  trace<span class="Constant"> 2</span>, <span class="Constant">[app/parse]</span>, out
@@ -247,7 +247,7 @@ if ('onhashchange' in window) {
 <span id="L183" class="LineNr">183 </span>
 <span id="L184" class="LineNr">184 </span><span class="muRecipe">def</span> parse in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:char<span class="muRecipe"> -&gt; </span>out:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a>, in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:char [
 <span id="L185" class="LineNr">185 </span>  <span class="Constant">local-scope</span>
-<span id="L186" class="LineNr">186 </span>  <span class="Constant">load-ingredients</span>
+<span id="L186" class="LineNr">186 </span>  <span class="Constant">load-inputs</span>
 <span id="L187" class="LineNr">187 </span>  <span class="Comment"># skip whitespace</span>
 <span id="L188" class="LineNr">188 </span>  in <span class="Special">&lt;-</span> <a href='lambda-to-mu.mu.html#L274'>skip-whitespace</a> in
 <span id="L189" class="LineNr">189 </span>  c:char, eof?:bool <span class="Special">&lt;-</span> <a href='066stream.mu.html#L42'>peek</a> in
@@ -337,7 +337,7 @@ if ('onhashchange' in window) {
 <span id="L273" class="LineNr">273 </span>
 <span id="L274" class="LineNr">274 </span><span class="muRecipe">def</span> <a href='lambda-to-mu.mu.html#L274'>skip-whitespace</a> in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:char<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='066stream.mu.html#L2'>stream</a>:char [
 <span id="L275" class="LineNr">275 </span>  <span class="Constant">local-scope</span>
-<span id="L276" class="LineNr">276 </span>  <span class="Constant">load-ingredients</span>
+<span id="L276" class="LineNr">276 </span>  <span class="Constant">load-inputs</span>
 <span id="L277" class="LineNr">277 </span>  <span class="Delimiter">{</span>
 <span id="L278" class="LineNr">278 </span>  <span class="Conceal">¦</span> done?:bool <span class="Special">&lt;-</span> <a href='066stream.mu.html#L72'>end-of-stream?</a> in
 <span id="L279" class="LineNr">279 </span>  <span class="Conceal">¦</span> <span class="muControl">return-if</span> done?, <span class="Constant">0/null</span>
@@ -351,7 +351,7 @@ if ('onhashchange' in window) {
 <span id="L287" class="LineNr">287 </span>
 <span id="L288" class="LineNr">288 </span><span class="muRecipe">def</span> to-text x:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a><span class="muRecipe"> -&gt; </span>out:text [
 <span id="L289" class="LineNr">289 </span>  <span class="Constant">local-scope</span>
-<span id="L290" class="LineNr">290 </span>  <span class="Constant">load-ingredients</span>
+<span id="L290" class="LineNr">290 </span>  <span class="Constant">load-inputs</span>
 <span id="L291" class="LineNr">291 </span>  buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 30</span>
 <span id="L292" class="LineNr">292 </span>  buf <span class="Special">&lt;-</span> to-buffer x, buf
 <span id="L293" class="LineNr">293 </span>  out <span class="Special">&lt;-</span> <a href='061text.mu.html#L338'>buffer-to-array</a> buf
@@ -359,7 +359,7 @@ if ('onhashchange' in window) {
 <span id="L295" class="LineNr">295 </span>
 <span id="L296" class="LineNr">296 </span><span class="muRecipe">def</span> to-buffer x:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a>, buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char<span class="muRecipe"> -&gt; </span>buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char [
 <span id="L297" class="LineNr">297 </span>  <span class="Constant">local-scope</span>
-<span id="L298" class="LineNr">298 </span>  <span class="Constant">load-ingredients</span>
+<span id="L298" class="LineNr">298 </span>  <span class="Constant">load-inputs</span>
 <span id="L299" class="LineNr">299 </span>  <span class="Comment"># base case: empty cell</span>
 <span id="L300" class="LineNr">300 </span>  <span class="Delimiter">{</span>
 <span id="L301" class="LineNr">301 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> x
@@ -638,7 +638,7 @@ if ('onhashchange' in window) {
 <span id="L574" class="LineNr">574 </span>
 <span id="L575" class="LineNr">575 </span><span class="muRecipe">def</span> to-mu in:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a><span class="muRecipe"> -&gt; </span>out:text [
 <span id="L576" class="LineNr">576 </span>  <span class="Constant">local-scope</span>
-<span id="L577" class="LineNr">577 </span>  <span class="Constant">load-ingredients</span>
+<span id="L577" class="LineNr">577 </span>  <span class="Constant">load-inputs</span>
 <span id="L578" class="LineNr">578 </span>  buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 30</span>
 <span id="L579" class="LineNr">579 </span>  buf <span class="Special">&lt;-</span> to-mu in, buf
 <span id="L580" class="LineNr">580 </span>  out <span class="Special">&lt;-</span> <a href='061text.mu.html#L338'>buffer-to-array</a> buf
@@ -646,7 +646,7 @@ if ('onhashchange' in window) {
 <span id="L582" class="LineNr">582 </span>
 <span id="L583" class="LineNr">583 </span><span class="muRecipe">def</span> to-mu in:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a>, buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char<span class="muRecipe"> -&gt; </span>buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char, result-name:text [
 <span id="L584" class="LineNr">584 </span>  <span class="Constant">local-scope</span>
-<span id="L585" class="LineNr">585 </span>  <span class="Constant">load-ingredients</span>
+<span id="L585" class="LineNr">585 </span>  <span class="Constant">load-inputs</span>
 <span id="L586" class="LineNr">586 </span>  <span class="Comment"># null cell? no change.</span>
 <span id="L587" class="LineNr">587 </span>  <span class="Comment"># pair with all atoms? gensym a new variable</span>
 <span id="L588" class="LineNr">588 </span>  <span class="Comment"># pair containing other pairs? recurse</span>
diff --git a/html/mutable.mu.html b/html/mutable.mu.html
index 22ab4368..eea20c1b 100644
--- a/html/mutable.mu.html
+++ b/html/mutable.mu.html
@@ -65,7 +65,7 @@ if ('onhashchange' in window) {
 <span id="L8" class="LineNr"> 8 </span>
 <span id="L9" class="LineNr"> 9 </span><span class="muRecipe">def</span> <a href='mutable.mu.html#L9'>foo</a> x:&amp;:num<span class="muRecipe"> -&gt; </span>x:&amp;:num [
 <span id="L10" class="LineNr">10 </span>  <span class="Constant">local-scope</span>
-<span id="L11" class="LineNr">11 </span>  <span class="Constant">load-ingredients</span>
+<span id="L11" class="LineNr">11 </span>  <span class="Constant">load-inputs</span>
 <span id="L12" class="LineNr">12 </span>  *x <span class="Special">&lt;-</span> copy<span class="Constant"> 34</span>
 <span id="L13" class="LineNr">13 </span>]
 </pre>
diff --git a/html/nqueens.mu.html b/html/nqueens.mu.html
index 441561b2..4fc263e0 100644
--- a/html/nqueens.mu.html
+++ b/html/nqueens.mu.html
@@ -71,7 +71,7 @@ if ('onhashchange' in window) {
 <span id="L10" class="LineNr"> 10 </span>
 <span id="L11" class="LineNr"> 11 </span><span class="muRecipe">def</span> <a href='nqueens.mu.html#L11'>nqueens</a> n:num, queens:&amp;:<a href='064list.mu.html#L6'>list</a>:<a href='nqueens.mu.html#L6'>square</a><span class="muRecipe"> -&gt; </span>result:num, queens:&amp;:<a href='064list.mu.html#L6'>list</a>:<a href='nqueens.mu.html#L6'>square</a> [
 <span id="L12" class="LineNr"> 12 </span>  <span class="Constant">local-scope</span>
-<span id="L13" class="LineNr"> 13 </span>  <span class="Constant">load-ingredients</span>
+<span id="L13" class="LineNr"> 13 </span>  <span class="Constant">load-inputs</span>
 <span id="L14" class="LineNr"> 14 </span>  <span class="Comment"># if 'queens' is already long enough, print it and return</span>
 <span id="L15" class="LineNr"> 15 </span>  added-so-far:num <span class="Special">&lt;-</span> length queens
 <span id="L16" class="LineNr"> 16 </span>  <span class="Delimiter">{</span>
@@ -112,7 +112,7 @@ if ('onhashchange' in window) {
 <span id="L51" class="LineNr"> 51 </span><span class="Comment"># only in files and diagonals</span>
 <span id="L52" class="LineNr"> 52 </span><span class="muRecipe">def</span> <a href='nqueens.mu.html#L52'>conflict?</a> curr:<a href='nqueens.mu.html#L6'>square</a>, queens:&amp;:<a href='064list.mu.html#L6'>list</a>:<a href='nqueens.mu.html#L6'>square</a><span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L53" class="LineNr"> 53 </span>  <span class="Constant">local-scope</span>
-<span id="L54" class="LineNr"> 54 </span>  <span class="Constant">load-ingredients</span>
+<span id="L54" class="LineNr"> 54 </span>  <span class="Constant">load-inputs</span>
 <span id="L55" class="LineNr"> 55 </span>  result <span class="Special">&lt;-</span> <a href='nqueens.mu.html#L60'>conflicting-file?</a> curr, queens
 <span id="L56" class="LineNr"> 56 </span>  <span class="muControl">return-if</span> result
 <span id="L57" class="LineNr"> 57 </span>  result <span class="Special">&lt;-</span> <a href='nqueens.mu.html#L76'>conflicting-diagonal?</a> curr, queens
@@ -120,7 +120,7 @@ if ('onhashchange' in window) {
 <span id="L59" class="LineNr"> 59 </span>
 <span id="L60" class="LineNr"> 60 </span><span class="muRecipe">def</span> <a href='nqueens.mu.html#L60'>conflicting-file?</a> curr:<a href='nqueens.mu.html#L6'>square</a>, queens:&amp;:<a href='064list.mu.html#L6'>list</a>:<a href='nqueens.mu.html#L6'>square</a><span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L61" class="LineNr"> 61 </span>  <span class="Constant">local-scope</span>
-<span id="L62" class="LineNr"> 62 </span>  <span class="Constant">load-ingredients</span>
+<span id="L62" class="LineNr"> 62 </span>  <span class="Constant">load-inputs</span>
 <span id="L63" class="LineNr"> 63 </span>  curr-file:num <span class="Special">&lt;-</span> get curr, <span class="Constant">file:offset</span>
 <span id="L64" class="LineNr"> 64 </span>  <span class="Delimiter">{</span>
 <span id="L65" class="LineNr"> 65 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> queens
@@ -136,7 +136,7 @@ if ('onhashchange' in window) {
 <span id="L75" class="LineNr"> 75 </span>
 <span id="L76" class="LineNr"> 76 </span><span class="muRecipe">def</span> <a href='nqueens.mu.html#L76'>conflicting-diagonal?</a> curr:<a href='nqueens.mu.html#L6'>square</a>, queens:&amp;:<a href='064list.mu.html#L6'>list</a>:<a href='nqueens.mu.html#L6'>square</a><span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L77" class="LineNr"> 77 </span>  <span class="Constant">local-scope</span>
-<span id="L78" class="LineNr"> 78 </span>  <span class="Constant">load-ingredients</span>
+<span id="L78" class="LineNr"> 78 </span>  <span class="Constant">load-inputs</span>
 <span id="L79" class="LineNr"> 79 </span>  curr-rank:num <span class="Special">&lt;-</span> get curr, <span class="Constant">rank:offset</span>
 <span id="L80" class="LineNr"> 80 </span>  curr-file:num <span class="Special">&lt;-</span> get curr, <span class="Constant">file:offset</span>
 <span id="L81" class="LineNr"> 81 </span>  <span class="Delimiter">{</span>
diff --git a/html/static-dispatch.mu.html b/html/static-dispatch.mu.html
index ee734f6b..26aa6263 100644
--- a/html/static-dispatch.mu.html
+++ b/html/static-dispatch.mu.html
@@ -65,23 +65,23 @@ if ('onhashchange' in window) {
 <span id="L8" class="LineNr"> 8 </span>
 <span id="L9" class="LineNr"> 9 </span><span class="muRecipe">def</span> test a:num<span class="muRecipe"> -&gt; </span>b:num [
 <span id="L10" class="LineNr">10 </span>  <span class="Constant">local-scope</span>
-<span id="L11" class="LineNr">11 </span>  <span class="Constant">load-ingredients</span>
+<span id="L11" class="LineNr">11 </span>  <span class="Constant">load-inputs</span>
 <span id="L12" class="LineNr">12 </span>  b <span class="Special">&lt;-</span> add a,<span class="Constant"> 1</span>
 <span id="L13" class="LineNr">13 </span>]
 <span id="L14" class="LineNr">14 </span>
 <span id="L15" class="LineNr">15 </span><span class="muRecipe">def</span> test a:num, b:num<span class="muRecipe"> -&gt; </span>c:num [
 <span id="L16" class="LineNr">16 </span>  <span class="Constant">local-scope</span>
-<span id="L17" class="LineNr">17 </span>  <span class="Constant">load-ingredients</span>
+<span id="L17" class="LineNr">17 </span>  <span class="Constant">load-inputs</span>
 <span id="L18" class="LineNr">18 </span>  c <span class="Special">&lt;-</span> add a, b
 <span id="L19" class="LineNr">19 </span>]
 <span id="L20" class="LineNr">20 </span>
 <span id="L21" class="LineNr">21 </span><span class="muRecipe">def</span> <a href='static-dispatch.mu.html#L21'>main</a> [
 <span id="L22" class="LineNr">22 </span>  <span class="Constant">local-scope</span>
-<span id="L23" class="LineNr">23 </span>  a:num <span class="Special">&lt;-</span> test<span class="Constant"> 3</span>  <span class="Comment"># selects single-ingredient version</span>
+<span id="L23" class="LineNr">23 </span>  a:num <span class="Special">&lt;-</span> test<span class="Constant"> 3</span>  <span class="Comment"># selects single-input version</span>
 <span id="L24" class="LineNr">24 </span>  $print a, <span class="Constant">10/newline</span>
-<span id="L25" class="LineNr">25 </span>  b:num <span class="Special">&lt;-</span> test<span class="Constant"> 3</span>,<span class="Constant"> 4</span>  <span class="Comment"># selects double-ingredient version</span>
+<span id="L25" class="LineNr">25 </span>  b:num <span class="Special">&lt;-</span> test<span class="Constant"> 3</span>,<span class="Constant"> 4</span>  <span class="Comment"># selects double-input version</span>
 <span id="L26" class="LineNr">26 </span>  $print b, <span class="Constant">10/newline</span>
-<span id="L27" class="LineNr">27 </span>  c:num <span class="Special">&lt;-</span> test<span class="Constant"> 3</span>,<span class="Constant"> 4</span>,<span class="Constant"> 5</span>  <span class="Comment"># prefers double- to single-ingredient version</span>
+<span id="L27" class="LineNr">27 </span>  c:num <span class="Special">&lt;-</span> test<span class="Constant"> 3</span>,<span class="Constant"> 4</span>,<span class="Constant"> 5</span>  <span class="Comment"># prefers double- to single-input version</span>
 <span id="L28" class="LineNr">28 </span>  $print c, <span class="Constant">10/newline</span>
 <span id="L29" class="LineNr">29 </span>]
 </pre>
diff --git a/html/tangle.mu.html b/html/tangle.mu.html
index f00b1093..65336b80 100644
--- a/html/tangle.mu.html
+++ b/html/tangle.mu.html
@@ -68,7 +68,7 @@ if ('onhashchange' in window) {
 <span id="L8" class="LineNr"> 8 </span>
 <span id="L9" class="LineNr"> 9 </span><span class="muRecipe">def</span> <a href='tangle.mu.html#L9'>factorial</a> n:num<span class="muRecipe"> -&gt; </span>result:num [
 <span id="L10" class="LineNr">10 </span>  <span class="Constant">local-scope</span>
-<span id="L11" class="LineNr">11 </span>  <span class="Constant">load-ingredients</span>
+<span id="L11" class="LineNr">11 </span>  <span class="Constant">load-inputs</span>
 <span id="L12" class="LineNr">12 </span><span class="Constant">  <a href='tangle.mu.html#L12'>&lt;factorial-cases&gt;</a></span>
 <span id="L13" class="LineNr">13 </span>]
 <span id="L14" class="LineNr">14 </span>
diff --git a/http-client.mu b/http-client.mu
index 681b4738..9219a76f 100644
--- a/http-client.mu
+++ b/http-client.mu
@@ -2,7 +2,9 @@
 
 def main [
   local-scope
+  $print [aaa] 10/newline
   google:&:source:char <- start-reading-from-network 0/real-resources, [google.com/]
+  $print [bbb] 10/newline
   n:num <- copy 0
   buf:&:buffer:char <- new-buffer 30
   {
@@ -10,6 +12,11 @@ def main [
     break-if done?
     n <- add n, 1
     buf <- append buf, c
+    {
+      _, a:num <- divide-with-remainder n, 100
+      break-if a
+      $print n 10/newline
+    }
     loop
   }
   result:text <- buffer-to-array buf
diff --git a/immutable-error.mu b/immutable-error.mu
index 2d25d56e..25554b2f 100644
--- a/immutable-error.mu
+++ b/immutable-error.mu
@@ -8,6 +8,6 @@ def main [
 
 def foo x:&:num [
   local-scope
-  load-ingredients
+  load-inputs
   *x <- copy 34  # will cause an error because x is immutable in this function
 ]
diff --git a/lambda-to-mu.mu b/lambda-to-mu.mu
index 2bd74974..31edaf34 100644
--- a/lambda-to-mu.mu
+++ b/lambda-to-mu.mu
@@ -5,7 +5,7 @@
 # potential enhancements:
 #   symbol table
 #   poor man's macros
-#     substitute one instruction with multiple, parameterized by ingredients and products
+#     substitute one instruction with multiple, parameterized by inputs and products
 
 scenario convert-lambda [
   run [
@@ -21,7 +21,7 @@ result <- add a t1]
 
 def lambda-to-mu in:text -> out:text [
   local-scope
-  load-ingredients
+  load-inputs
   out <- copy 0
   cells:&:cell <- parse in
   out <- to-mu cells
@@ -41,28 +41,28 @@ container pair [
 
 def new-atom name:text -> result:&:cell [
   local-scope
-  load-ingredients
+  load-inputs
   result <- new cell:type
   *result <- merge 0/tag:atom, name
 ]
 
 def new-pair a:&:cell, b:&:cell -> result:&:cell [
   local-scope
-  load-ingredients
+  load-inputs
   result <- new cell:type
   *result <- merge 1/tag:pair, a/first, b/rest
 ]
 
 def is-atom? x:&:cell -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless x, 0/false
   _, result <- maybe-convert *x, atom:variant
 ]
 
 def is-pair? x:&:cell -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless x, 0/false
   _, result <- maybe-convert *x, pair:variant
 ]
@@ -95,7 +95,7 @@ scenario pair-is-not-atom [
 
 def atom-match? x:&:cell, pat:text -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   s:text, is-atom?:bool <- maybe-convert *x, atom:variant
   return-unless is-atom?, 0/false
   result <- equal pat, s
@@ -112,7 +112,7 @@ scenario atom-match [
 
 def first x:&:cell -> result:&:cell [
   local-scope
-  load-ingredients
+  load-inputs
   pair:pair, pair?:bool <- maybe-convert *x, pair:variant
   return-unless pair?, 0/nil
   result <- get pair, first:offset
@@ -120,7 +120,7 @@ def first x:&:cell -> result:&:cell [
 
 def rest x:&:cell -> result:&:cell [
   local-scope
-  load-ingredients
+  load-inputs
   pair:pair, pair?:bool <- maybe-convert *x, pair:variant
   return-unless pair?, 0/nil
   result <- get pair, rest:offset
@@ -128,7 +128,7 @@ def rest x:&:cell -> result:&:cell [
 
 def set-first base:&:cell, new-first:&:cell -> base:&:cell [
   local-scope
-  load-ingredients
+  load-inputs
   pair:pair, is-pair?:bool <- maybe-convert *base, pair:variant
   return-unless is-pair?
   pair <- put pair, first:offset, new-first
@@ -137,7 +137,7 @@ def set-first base:&:cell, new-first:&:cell -> base:&:cell [
 
 def set-rest base:&:cell, new-rest:&:cell -> base:&:cell [
   local-scope
-  load-ingredients
+  load-inputs
   pair:pair, is-pair?:bool <- maybe-convert *base, pair:variant
   return-unless is-pair?
   pair <- put pair, rest:offset, new-rest
@@ -175,7 +175,7 @@ scenario cell-operations-on-pair [
 
 def parse in:text -> out:&:cell [
   local-scope
-  load-ingredients
+  load-inputs
   s:&:stream:char <- new-stream in
   out, s <- parse s
   trace 2, [app/parse], out
@@ -183,7 +183,7 @@ def parse in:text -> out:&:cell [
 
 def parse in:&:stream:char -> out:&:cell, in:&:stream:char [
   local-scope
-  load-ingredients
+  load-inputs
   # skip whitespace
   in <- skip-whitespace in
   c:char, eof?:bool <- peek in
@@ -273,7 +273,7 @@ def parse in:&:stream:char -> out:&:cell, in:&:stream:char [
 
 def skip-whitespace in:&:stream:char -> in:&:stream:char [
   local-scope
-  load-ingredients
+  load-inputs
   {
     done?:bool <- end-of-stream? in
     return-if done?, 0/null
@@ -287,7 +287,7 @@ def skip-whitespace in:&:stream:char -> in:&:stream:char [
 
 def to-text x:&:cell -> out:text [
   local-scope
-  load-ingredients
+  load-inputs
   buf:&:buffer:char <- new-buffer 30
   buf <- to-buffer x, buf
   out <- buffer-to-array buf
@@ -295,7 +295,7 @@ def to-text x:&:cell -> out:text [
 
 def to-buffer x:&:cell, buf:&:buffer:char -> buf:&:buffer:char [
   local-scope
-  load-ingredients
+  load-inputs
   # base case: empty cell
   {
     break-if x
@@ -574,7 +574,7 @@ scenario parse-dotted-list-of-more-than-two-atoms [
 
 def to-mu in:&:cell -> out:text [
   local-scope
-  load-ingredients
+  load-inputs
   buf:&:buffer:char <- new-buffer 30
   buf <- to-mu in, buf
   out <- buffer-to-array buf
@@ -582,7 +582,7 @@ def to-mu in:&:cell -> out:text [
 
 def to-mu in:&:cell, buf:&:buffer:char -> buf:&:buffer:char, result-name:text [
   local-scope
-  load-ingredients
+  load-inputs
   # null cell? no change.
   # pair with all atoms? gensym a new variable
   # pair containing other pairs? recurse
diff --git a/mu.vim b/mu.vim
index 83a1f683..9c3106cc 100644
--- a/mu.vim
+++ b/mu.vim
@@ -53,14 +53,14 @@ syntax match muLiteral %[^ ]\+:type/[^ ,]*\|[^ ]\+:type\>%
 syntax match muLiteral %[^ ]\+:offset/[^ ,]*\|[^ ]\+:offset\>%
 syntax match muLiteral %[^ ]\+:variant/[^ ,]*\|[^ ]\+:variant\>%
 highlight link muLiteral Constant
-syntax keyword muKeyword default-space new-default-space local-scope next-ingredient ingredient rewind-ingredients load-ingredients | highlight link muKeyword Constant
+syntax keyword muKeyword default-space new-default-space local-scope next-ingredient next-input ingredient input rewind-ingredients rewind-inputs load-ingredients load-inputs | highlight link muKeyword Constant
 
 syntax match muDelimiter "[{}]" | highlight link muDelimiter Delimiter
 syntax match muAssign "<-"
 syntax match muAssign "\<raw\>"
 highlight link muAssign SpecialChar
 syntax match muGlobal %[^ ]\+:global/\?[^ ,]*% | highlight link muGlobal SpecialChar
-syntax keyword muControl reply reply-if reply-unless return return-if return-unless jump jump-if jump-unless loop loop-if loop-unless break break-if break-unless current-continuation continue-from create-delimited-continuation reply-delimited-continuation | highlight muControl ctermfg=3
+syntax keyword muControl reply reply-if reply-unless return return-if return-unless output output-if output-unless jump jump-if jump-unless loop loop-if loop-unless break break-if break-unless current-continuation continue-from create-delimited-continuation reply-delimited-continuation | highlight muControl ctermfg=3
 " common keywords
 syntax match muRecipe "^recipe\>\|^recipe!\>\|^def\>\|^def!\>\|^before\>\|^after\>\| -> " | highlight muRecipe ctermfg=208
 syntax match muScenario "^scenario\>" | highlight muScenario ctermfg=34
diff --git a/mutable.mu b/mutable.mu
index dced29b6..1a1ec7f0 100644
--- a/mutable.mu
+++ b/mutable.mu
@@ -8,6 +8,6 @@ def main [
 
 def foo x:&:num -> x:&:num [
   local-scope
-  load-ingredients
+  load-inputs
   *x <- copy 34
 ]
diff --git a/nqueens.mu b/nqueens.mu
index e566e474..030ba28b 100644
--- a/nqueens.mu
+++ b/nqueens.mu
@@ -10,7 +10,7 @@ container square [
 
 def nqueens n:num, queens:&:list:square -> result:num, queens:&:list:square [
   local-scope
-  load-ingredients
+  load-inputs
   # if 'queens' is already long enough, print it and return
   added-so-far:num <- length queens
   {
@@ -51,7 +51,7 @@ def nqueens n:num, queens:&:list:square -> result:num, queens:&:list:square [
 # only in files and diagonals
 def conflict? curr:square, queens:&:list:square -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   result <- conflicting-file? curr, queens
   return-if result
   result <- conflicting-diagonal? curr, queens
@@ -59,7 +59,7 @@ def conflict? curr:square, queens:&:list:square -> result:bool [
 
 def conflicting-file? curr:square, queens:&:list:square -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   curr-file:num <- get curr, file:offset
   {
     break-unless queens
@@ -75,7 +75,7 @@ def conflicting-file? curr:square, queens:&:list:square -> result:bool [
 
 def conflicting-diagonal? curr:square, queens:&:list:square -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   curr-rank:num <- get curr, rank:offset
   curr-file:num <- get curr, file:offset
   {
diff --git a/sandbox/001-editor.mu b/sandbox/001-editor.mu
index 807cf442..9f1adbe7 100644
--- a/sandbox/001-editor.mu
+++ b/sandbox/001-editor.mu
@@ -4,7 +4,7 @@
 # screen dimensions, then stop
 def main text:text [
   local-scope
-  load-ingredients
+  load-inputs
   open-console
   clear-screen 0/screen  # non-scrolling app
   e:&:editor <- new-editor text, 0/left, 5/right
@@ -50,7 +50,7 @@ container editor [
 #   right is exclusive
 def new-editor s:text, left:num, right:num -> result:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   # no clipping of bounds
   right <- subtract right, 1
   result <- new editor:type
@@ -71,7 +71,7 @@ def new-editor s:text, left:num, right:num -> result:&:editor [
 
 def insert-text editor:&:editor, text:text -> editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   curr:&:duplex-list:char <- get *editor, data:offset
   insert curr, text
 ]
@@ -106,7 +106,7 @@ scenario editor-initializes-without-data [
 # outside text.
 def render screen:&:screen, editor:&:editor -> last-row:num, last-column:num, screen:&:screen, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless editor, 1/top, 0/left
   left:num <- get *editor, left:offset
   screen-height:num <- screen-height screen
@@ -206,7 +206,7 @@ def render screen:&:screen, editor:&:editor -> last-row:num, last-column:num, sc
 
 def clear-screen-from screen:&:screen, row:num, column:num, left:num, right:num -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   # if it's the real screen, use the optimized primitive
   {
     break-if screen
@@ -221,7 +221,7 @@ def clear-screen-from screen:&:screen, row:num, column:num, left:num, right:num
 
 def clear-rest-of-screen screen:&:screen, row:num, left:num, right:num -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   row <- add row, 1
   # if it's the real screen, use the optimized primitive
   {
@@ -395,7 +395,7 @@ after <character-c-received> [
 # so far the previous color is all the information we need; that may change
 def get-color color:num, c:char -> color:num [
   local-scope
-  load-ingredients
+  load-inputs
   color-is-white?:bool <- equal color, 7/white
   # if color is white and next character is '#', switch color to blue
   {
diff --git a/sandbox/002-typing.mu b/sandbox/002-typing.mu
index f5bbeb6f..709e8d22 100644
--- a/sandbox/002-typing.mu
+++ b/sandbox/002-typing.mu
@@ -4,7 +4,7 @@
 # hit ctrl-c to exit
 def! main text:text [
   local-scope
-  load-ingredients
+  load-inputs
   open-console
   clear-screen 0/screen  # non-scrolling app
   editor:&:editor <- new-editor text, 5/left, 45/right
@@ -15,7 +15,7 @@ def! main text:text [
 
 def editor-event-loop screen:&:screen, console:&:console, editor:&:editor -> screen:&:screen, console:&:console, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   {
     # looping over each (keyboard or touch) event as it occurs
     +next-event
@@ -49,7 +49,7 @@ def editor-event-loop screen:&:screen, console:&:console, editor:&:editor -> scr
 # process click, return if it was on current editor
 def move-cursor editor:&:editor, screen:&:screen, t:touch-event -> in-focus?:bool, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless editor, 0/false
   click-row:num <- get t, row:offset
   return-unless click-row, 0/false  # ignore clicks on 'menu'
@@ -74,7 +74,7 @@ def move-cursor editor:&:editor, screen:&:screen, t:touch-event -> in-focus?:boo
 # past the last line it positions at end of last line.
 def snap-cursor editor:&:editor, screen:&:screen, target-row:num, target-column:num -> editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless editor
   left:num <- get *editor, left:offset
   right:num <- get *editor, right:offset
@@ -165,7 +165,7 @@ def snap-cursor editor:&:editor, screen:&:screen, target-row:num, target-column:
 # Set 'go-render?' to true to indicate the caller must perform a non-minimal update.
 def handle-keyboard-event screen:&:screen, editor:&:editor, e:event -> go-render?:bool, screen:&:screen, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless editor, 0/don't-render
   screen-width:num <- screen-width screen
   screen-height:num <- screen-height screen
@@ -202,7 +202,7 @@ def handle-keyboard-event screen:&:screen, editor:&:editor, e:event -> go-render
 
 def insert-at-cursor editor:&:editor, c:char, screen:&:screen -> go-render?:bool, editor:&:editor, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
   insert c, before-cursor
   before-cursor <- next before-cursor
@@ -264,7 +264,7 @@ def insert-at-cursor editor:&:editor, c:char, screen:&:screen -> go-render?:bool
 # helper for tests
 def editor-render screen:&:screen, editor:&:editor -> screen:&:screen, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   old-top-idx:num <- save-top-idx screen
   left:num <- get *editor, left:offset
   right:num <- get *editor, right:offset
@@ -867,7 +867,7 @@ after <handle-special-character> [
 
 def insert-new-line-and-indent editor:&:editor, screen:&:screen -> editor:&:editor, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   cursor-row:num <- get *editor, cursor-row:offset
   cursor-column:num <- get *editor, cursor-column:offset
   before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
@@ -913,7 +913,7 @@ def insert-new-line-and-indent editor:&:editor, screen:&:screen -> editor:&:edit
 
 def at-start-of-wrapped-line? editor:&:editor -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   left:num <- get *editor, left:offset
   cursor-column:num <- get *editor, cursor-column:offset
   cursor-at-left?:bool <- equal cursor-column, left
@@ -933,7 +933,7 @@ def at-start-of-wrapped-line? editor:&:editor -> result:bool [
 # the number of spaces at the start of the line containing 'curr'.
 def line-indent curr:&:duplex-list:char, start:&:duplex-list:char -> result:num [
   local-scope
-  load-ingredients
+  load-inputs
   result:num <- copy 0
   return-unless curr
   at-start?:bool <- equal curr, start
@@ -1115,22 +1115,22 @@ after <handle-special-key> [
 
 def draw-horizontal screen:&:screen, row:num, x:num, right:num -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   height:num <- screen-height screen
   past-bottom?:bool <- greater-or-equal row, height
   return-if past-bottom?
-  style:char, style-found?:bool <- next-ingredient
+  style:char, style-found?:bool <- next-input
   {
     break-if style-found?
     style <- copy 9472/horizontal
   }
-  color:num, color-found?:bool <- next-ingredient
+  color:num, color-found?:bool <- next-input
   {
     # default color to white
     break-if color-found?
     color <- copy 245/grey
   }
-  bg-color:num, bg-color-found?:bool <- next-ingredient
+  bg-color:num, bg-color-found?:bool <- next-input
   {
     break-if bg-color-found?
     bg-color <- copy 0/black
diff --git a/sandbox/003-shortcuts.mu b/sandbox/003-shortcuts.mu
index 919a1870..c152f504 100644
--- a/sandbox/003-shortcuts.mu
+++ b/sandbox/003-shortcuts.mu
@@ -108,7 +108,7 @@ after <handle-special-character> [
 #   backspaced-cell - value deleted (or 0 if nothing was deleted) so we can save it for undo, etc.
 def delete-before-cursor editor:&:editor, screen:&:screen -> go-render?:bool, backspaced-cell:&:duplex-list:char, editor:&:editor, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
   data:&:duplex-list:char <- get *editor, data:offset
   # if at start of text (before-cursor at § sentinel), return
@@ -154,7 +154,7 @@ def delete-before-cursor editor:&:editor, screen:&:screen -> go-render?:bool, ba
 
 def move-cursor-coordinates-left editor:&:editor -> editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
   cursor-row:num <- get *editor, cursor-row:offset
   cursor-column:num <- get *editor, cursor-column:offset
@@ -215,7 +215,7 @@ def move-cursor-coordinates-left editor:&:editor -> editor:&:editor [
 # the length of the previous line before the 'curr' pointer.
 def previous-line-length curr:&:duplex-list:char, start:&:duplex-list:char -> result:num [
   local-scope
-  load-ingredients
+  load-inputs
   result:num <- copy 0
   return-unless curr
   at-start?:bool <- equal curr, start
@@ -369,7 +369,7 @@ after <handle-special-key> [
 
 def delete-at-cursor editor:&:editor, screen:&:screen -> go-render?:bool, deleted-cell:&:duplex-list:char, editor:&:editor, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
   data:&:duplex-list:char <- get *editor, data:offset
   deleted-cell:&:duplex-list:char <- next before-cursor
@@ -449,7 +449,7 @@ after <handle-special-key> [
 
 def move-cursor-coordinates-right editor:&:editor, screen-height:num -> go-render?:bool, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   before-cursor:&:duplex-list:char <- get *editor before-cursor:offset
   cursor-row:num <- get *editor, cursor-row:offset
   cursor-column:num <- get *editor, cursor-column:offset
@@ -994,7 +994,7 @@ after <handle-special-key> [
 
 def move-to-previous-line editor:&:editor -> editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   cursor-row:num <- get *editor, cursor-row:offset
   cursor-column:num <- get *editor, cursor-column:offset
   before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
@@ -1340,7 +1340,7 @@ after <handle-special-key> [
 
 def move-to-next-line editor:&:editor, screen-height:num -> editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   cursor-row:num <- get *editor, cursor-row:offset
   cursor-column:num <- get *editor, cursor-column:offset
   before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
@@ -1486,7 +1486,7 @@ after <handle-special-key> [
 # precondition: cursor-column should be in a consistent state
 def move-to-start-of-screen-line editor:&:editor -> editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   # update cursor column
   left:num <- get *editor, left:offset
   col:num <- get *editor, cursor-column:offset
@@ -1709,7 +1709,7 @@ after <handle-special-key> [
 
 def move-to-end-of-line editor:&:editor -> editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
   cursor-column:num <- get *editor, cursor-column:offset
   right:num <- get *editor, right:offset
@@ -1892,7 +1892,7 @@ after <handle-special-character> [
 
 def minimal-render-for-ctrl-u screen:&:screen, editor:&:editor, deleted-cells:&:duplex-list:char -> go-render?:bool, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   curr-column:num <- get *editor, cursor-column:offset
   # accumulate the current line as text and render it
   buf:&:buffer:char <- new-buffer 30  # accumulator for the text we need to render
@@ -1927,7 +1927,7 @@ def minimal-render-for-ctrl-u screen:&:screen, editor:&:editor, deleted-cells:&:
 
 def delete-to-start-of-line editor:&:editor -> result:&:duplex-list:char, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   # compute range to delete
   init:&:duplex-list:char <- get *editor, data:offset
   before-cursor:&:duplex-list:char <- get *editor, before-cursor:offset
@@ -1964,7 +1964,7 @@ def delete-to-start-of-line editor:&:editor -> result:&:duplex-list:char, editor
 
 def render-code screen:&:screen, s:text, left:num, right:num, row:num -> row:num, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless s
   color:num <- copy 7/white
   column:num <- copy left
@@ -2285,7 +2285,7 @@ after <handle-special-character> [
 
 def minimal-render-for-ctrl-k screen:&:screen, editor:&:editor, deleted-cells:&:duplex-list:char -> go-render?:bool, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   # if we deleted nothing, there's nothing to render
   return-unless deleted-cells, 0/dont-render
   # if the line used to wrap before, give up and render the whole screen
@@ -2303,7 +2303,7 @@ def minimal-render-for-ctrl-k screen:&:screen, editor:&:editor, deleted-cells:&:
 
 def delete-to-end-of-line editor:&:editor -> result:&:duplex-list:char, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   # compute range to delete
   start:&:duplex-list:char <- get *editor, before-cursor:offset
   end:&:duplex-list:char <- next start
@@ -2491,7 +2491,7 @@ scenario editor-deletes-to-end-of-wrapped-line-with-ctrl-k [
 # beware: never return null pointer.
 def before-start-of-next-line original:&:duplex-list:char, max:num -> curr:&:duplex-list:char [
   local-scope
-  load-ingredients
+  load-inputs
   count:num <- copy 0
   curr:&:duplex-list:char <- copy original
   # skip the initial newline if it exists
@@ -2523,7 +2523,7 @@ def before-start-of-next-line original:&:duplex-list:char, max:num -> curr:&:dup
 # beware: never return null pointer
 def before-previous-screen-line in:&:duplex-list:char, editor:&:editor -> out:&:duplex-list:char [
   local-scope
-  load-ingredients
+  load-inputs
   curr:&:duplex-list:char <- copy in
   c:char <- get *curr, value:offset
   # compute max, number of characters to skip
@@ -2600,7 +2600,7 @@ after <handle-special-character> [
 # the caller to go-render? the entire screen.
 def render-line-from-start screen:&:screen, editor:&:editor, right-margin:num -> go-render?:bool, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   before-line-start:&:duplex-list:char <- before-start-of-screen-line editor
   line-start:&:duplex-list:char <- next before-line-start
   color:num <- copy 7/white
@@ -2630,7 +2630,7 @@ def render-line-from-start screen:&:screen, editor:&:editor, right-margin:num ->
 
 def before-start-of-screen-line editor:&:editor -> result:&:duplex-list:char [
   local-scope
-  load-ingredients
+  load-inputs
   cursor:&:duplex-list:char <- get *editor, before-cursor:offset
   {
     next:&:duplex-list:char <- next cursor
diff --git a/sandbox/004-programming-environment.mu b/sandbox/004-programming-environment.mu
index d79272a8..68d6ef24 100644
--- a/sandbox/004-programming-environment.mu
+++ b/sandbox/004-programming-environment.mu
@@ -15,7 +15,7 @@ container environment [
 
 def new-programming-environment resources:&:resources, screen:&:screen, test-sandbox-editor-contents:text -> result:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   width:num <- screen-width screen
   result <- new environment:type
   # sandbox editor
@@ -26,7 +26,7 @@ def new-programming-environment resources:&:resources, screen:&:screen, test-san
 
 def event-loop screen:&:screen, console:&:console, env:&:environment, resources:&:resources -> screen:&:screen, console:&:console, env:&:environment, resources:&:resources [
   local-scope
-  load-ingredients
+  load-inputs
   current-sandbox:&:editor <- get *env, current-sandbox:offset
   # if we fall behind we'll stop updating the screen, but then we have to
   # render the entire screen when we catch up.
@@ -97,7 +97,7 @@ def event-loop screen:&:screen, console:&:console, env:&:environment, resources:
 
 def resize screen:&:screen, env:&:environment -> env:&:environment, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   clear-screen screen  # update screen dimensions
   width:num <- screen-width screen
   # update sandbox editor
@@ -114,7 +114,7 @@ def resize screen:&:screen, env:&:environment -> env:&:environment, screen:&:scr
 # off-screen, it resets cursor-row and cursor-column.
 def render-without-moving-cursor screen:&:screen, editor:&:editor -> last-row:num, last-column:num, screen:&:screen, editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless editor, 1/top, 0/left
   left:num <- get *editor, left:offset
   screen-height:num <- screen-height screen
@@ -195,7 +195,7 @@ type render-recipe = (recipe (address screen) (address editor) -> number number
 
 def render-all screen:&:screen, env:&:environment, render-editor:render-recipe -> screen:&:screen, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   trace 10, [app], [render all]
   # top menu
   trace 11, [app], [render top menu]
@@ -217,7 +217,7 @@ def render-all screen:&:screen, env:&:environment, render-editor:render-recipe -
 # replaced in a later layer
 def render-sandbox-side screen:&:screen, env:&:environment, render-editor:render-recipe -> screen:&:screen, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   trace 11, [app], [render sandboxes]
   old-top-idx:num <- save-top-idx screen
   current-sandbox:&:editor <- get *env, current-sandbox:offset
@@ -236,7 +236,7 @@ def render-sandbox-side screen:&:screen, env:&:environment, render-editor:render
 
 def update-cursor screen:&:screen, current-sandbox:&:editor, env:&:environment -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   <update-cursor-special-cases>
   cursor-row:num <- get *current-sandbox, cursor-row:offset
   cursor-column:num <- get *current-sandbox, cursor-column:offset
diff --git a/sandbox/005-sandbox.mu b/sandbox/005-sandbox.mu
index ee58638b..89ebf3ca 100644
--- a/sandbox/005-sandbox.mu
+++ b/sandbox/005-sandbox.mu
@@ -136,7 +136,7 @@ after <global-keypress> [
 
 def run-sandboxes env:&:environment, resources:&:resources, screen:&:screen -> errors-found?:bool, env:&:environment, resources:&:resources, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   errors-found?:bool <- update-recipes env, resources, screen
   # check contents of editor
   <begin-run-sandboxes>
@@ -185,7 +185,7 @@ def run-sandboxes env:&:environment, resources:&:resources, screen:&:screen -> e
 # replaced in a later layer (whereupon errors-found? will actually be set)
 def update-recipes env:&:environment, resources:&:resources, screen:&:screen -> errors-found?:bool, env:&:environment, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   in:text <- slurp resources, [lesson/recipes.mu]
   reload in
   errors-found? <- copy 0/false
@@ -194,7 +194,7 @@ def update-recipes env:&:environment, resources:&:resources, screen:&:screen ->
 # replaced in a later layer
 def update-sandbox sandbox:&:sandbox, env:&:environment, idx:num -> sandbox:&:sandbox, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   data:text <- get *sandbox, data:offset
   response:text, _, fake-screen:&:screen <- run-sandboxed data
   *sandbox <- put *sandbox, response:offset, response
@@ -203,14 +203,14 @@ def update-sandbox sandbox:&:sandbox, env:&:environment, idx:num -> sandbox:&:sa
 
 def update-status screen:&:screen, msg:text, color:num -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   screen <- move-cursor screen, 0, 2
   screen <- print screen, msg, color, 238/grey/background
 ]
 
 def save-sandboxes env:&:environment, resources:&:resources -> resources:&:resources [
   local-scope
-  load-ingredients
+  load-inputs
   trace 11, [app], [save sandboxes]
   current-sandbox:&:editor <- get *env, current-sandbox:offset
   # first clear previous versions, in case we deleted some sandbox
@@ -228,7 +228,7 @@ def save-sandboxes env:&:environment, resources:&:resources -> resources:&:resou
 
 def save-sandbox resources:&:resources, sandbox:&:sandbox, sandbox-index:num -> resources:&:resources [
   local-scope
-  load-ingredients
+  load-inputs
   data:text <- get *sandbox, data:offset
   filename:text <- append [lesson/], sandbox-index
   resources <- dump resources, filename, data
@@ -237,7 +237,7 @@ def save-sandbox resources:&:resources, sandbox:&:sandbox, sandbox-index:num ->
 
 def! render-sandbox-side screen:&:screen, env:&:environment, render-editor:render-recipe -> screen:&:screen, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   trace 11, [app], [render sandbox side]
   old-top-idx:num <- save-top-idx screen
   current-sandbox:&:editor <- get *env, current-sandbox:offset
@@ -264,8 +264,8 @@ def! render-sandbox-side screen:&:screen, env:&:environment, render-editor:rende
 
 def render-sandboxes screen:&:screen, sandbox:&:sandbox, left:num, right:num, row:num, render-from:num, idx:num -> row:num, screen:&:screen, sandbox:&:sandbox [
   local-scope
-  load-ingredients
-  env:&:environment, _/optional <- next-ingredient
+  load-inputs
+  env:&:environment, _/optional <- next-input
   return-unless sandbox
   screen-height:num <- screen-height screen
   hidden?:bool <- lesser-than idx, render-from
@@ -320,7 +320,7 @@ def render-sandboxes screen:&:screen, sandbox:&:sandbox, left:num, right:num, ro
 
 def render-sandbox-menu screen:&:screen, sandbox-index:num, left:num, right:num -> screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   move-cursor-to-column screen, left
   edit-button-left:num, edit-button-right:num, copy-button-left:num, copy-button-right:num, delete-button-left:num <- sandbox-menu-columns left, right
   print screen, sandbox-index, 232/dark-grey, 245/grey
@@ -363,7 +363,7 @@ scenario skip-rendering-sandbox-menu-past-bottom-row [
 # all left/right pairs are inclusive
 def sandbox-menu-columns left:num, right:num -> edit-button-left:num, edit-button-right:num, copy-button-left:num, copy-button-right:num, delete-button-left:num [
   local-scope
-  load-ingredients
+  load-inputs
   start-buttons:num <- add left, 4/space-for-sandbox-index
   buttons-space:num <- subtract right, start-buttons
   button-width:num <- divide-with-remainder buttons-space, 3  # integer division
@@ -380,7 +380,7 @@ def sandbox-menu-columns left:num, right:num -> edit-button-left:num, edit-butto
 # clear rest of last line, move cursor to next line
 def render-text screen:&:screen, s:text, left:num, right:num, color:num, row:num -> row:num, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless s
   column:num <- copy left
   screen <- move-cursor screen, row, column
@@ -457,7 +457,7 @@ scenario render-text-wraps-barely-long-lines [
 # assumes programming environment has no sandboxes; restores them from previous session
 def restore-sandboxes env:&:environment, resources:&:resources -> env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   # read all scenarios, pushing them to end of a list of scenarios
   idx:num <- copy 0
   curr:&:sandbox <- copy 0
@@ -491,7 +491,7 @@ def restore-sandboxes env:&:environment, resources:&:resources -> env:&:environm
 # leave cursor at start of next line
 def render-screen screen:&:screen, sandbox-screen:&:screen, left:num, right:num, row:num -> row:num, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   return-unless sandbox-screen
   # print 'screen:'
   row <- render-text screen, [screen:], left, right, 245/grey, row
@@ -664,7 +664,7 @@ scenario run-instruction-manages-screen-per-sandbox [
 
 def editor-contents editor:&:editor -> result:text [
   local-scope
-  load-ingredients
+  load-inputs
   buf:&:buffer:char <- new-buffer 80
   curr:&:duplex-list:char <- get *editor, data:offset
   # skip § sentinel
@@ -822,7 +822,7 @@ after <global-keypress> [
 # return 0 if there's no such sandbox, either because 'in' doesn't exist in 'env', or because it's the first sandbox
 def previous-sandbox env:&:environment, in:&:sandbox -> out:&:sandbox [
   local-scope
-  load-ingredients
+  load-inputs
   curr:&:sandbox <- get *env, sandbox:offset
   return-unless curr, 0/nil
   next:&:sandbox <- get *curr, next-sandbox:offset
diff --git a/sandbox/006-sandbox-copy.mu b/sandbox/006-sandbox-copy.mu
index 33e31cc9..541618e6 100644
--- a/sandbox/006-sandbox-copy.mu
+++ b/sandbox/006-sandbox-copy.mu
@@ -151,7 +151,7 @@ after <global-touch> [
 # some preconditions for attempting to copy a sandbox
 def should-attempt-copy? click-row:num, click-column:num, env:&:environment -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   # are we below the sandbox editor?
   click-sandbox-area?:bool <- click-on-sandbox-area? click-row, env
   return-unless click-sandbox-area?, 0/false
@@ -170,7 +170,7 @@ def should-attempt-copy? click-row:num, click-column:num, env:&:environment -> r
 
 def try-copy-sandbox click-row:num, env:&:environment -> clicked-on-copy-button?:bool, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   # identify the sandbox to copy, if the click was actually on the 'copy' button
   sandbox:&:sandbox <- find-sandbox env, click-row
   return-unless sandbox, 0/false
@@ -184,7 +184,7 @@ def try-copy-sandbox click-row:num, env:&:environment -> clicked-on-copy-button?
 
 def find-sandbox env:&:environment, click-row:num -> result:&:sandbox [
   local-scope
-  load-ingredients
+  load-inputs
   curr-sandbox:&:sandbox <- get *env, sandbox:offset
   {
     break-unless curr-sandbox
@@ -199,7 +199,7 @@ def find-sandbox env:&:environment, click-row:num -> result:&:sandbox [
 
 def click-on-sandbox-area? click-row:num, env:&:environment -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   first-sandbox:&:sandbox <- get *env, sandbox:offset
   return-unless first-sandbox, 0/false
   first-sandbox-begins:num <- get *first-sandbox, starting-row-on-screen:offset
@@ -208,7 +208,7 @@ def click-on-sandbox-area? click-row:num, env:&:environment -> result:bool [
 
 def empty-editor? editor:&:editor -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   head:&:duplex-list:char <- get *editor, data:offset
   first:&:duplex-list:char <- next head
   result <- not first
@@ -216,7 +216,7 @@ def empty-editor? editor:&:editor -> result:bool [
 
 def within-range? x:num, low:num, high:num -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   not-too-far-left?:bool <- greater-or-equal x, low
   not-too-far-right?:bool <- lesser-or-equal x, high
   result <- and not-too-far-left? not-too-far-right?
diff --git a/sandbox/007-sandbox-delete.mu b/sandbox/007-sandbox-delete.mu
index 955eac8f..2e8ab759 100644
--- a/sandbox/007-sandbox-delete.mu
+++ b/sandbox/007-sandbox-delete.mu
@@ -79,7 +79,7 @@ after <global-touch> [
 # some preconditions for attempting to delete a sandbox
 def should-attempt-delete? click-row:num, click-column:num, env:&:environment -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   # are we below the sandbox editor?
   click-sandbox-area?:bool <- click-on-sandbox-area? click-row, env
   return-unless click-sandbox-area?, 0/false
@@ -94,7 +94,7 @@ def should-attempt-delete? click-row:num, click-column:num, env:&:environment ->
 
 def try-delete-sandbox click-row:num, env:&:environment -> clicked-on-delete-button?:bool, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   # identify the sandbox to delete, if the click was actually on the 'delete' button
   sandbox:&:sandbox <- find-sandbox env, click-row
   return-unless sandbox, 0/false
@@ -104,7 +104,7 @@ def try-delete-sandbox click-row:num, env:&:environment -> clicked-on-delete-but
 
 def delete-sandbox env:&:environment, sandbox:&:sandbox -> env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   curr-sandbox:&:sandbox <- get *env, sandbox:offset
   first-sandbox?:bool <- equal curr-sandbox, sandbox
   {
diff --git a/sandbox/008-sandbox-edit.mu b/sandbox/008-sandbox-edit.mu
index aef61619..3cef65ce 100644
--- a/sandbox/008-sandbox-edit.mu
+++ b/sandbox/008-sandbox-edit.mu
@@ -122,7 +122,7 @@ after <global-touch> [
 # some preconditions for attempting to edit a sandbox
 def should-attempt-edit? click-row:num, click-column:num, env:&:environment -> result:bool [
   local-scope
-  load-ingredients
+  load-inputs
   # are we below the sandbox editor?
   click-sandbox-area?:bool <- click-on-sandbox-area? click-row, env
   return-unless click-sandbox-area?, 0/false
@@ -141,7 +141,7 @@ def should-attempt-edit? click-row:num, click-column:num, env:&:environment -> r
 
 def try-edit-sandbox click-row:num, env:&:environment -> clicked-on-edit-button?:bool, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   # identify the sandbox to edit, if the click was actually on the 'edit' button
   sandbox:&:sandbox <- find-sandbox env, click-row
   return-unless sandbox, 0/false
diff --git a/sandbox/009-sandbox-test.mu b/sandbox/009-sandbox-test.mu
index 2bd3aac9..3fd4dafc 100644
--- a/sandbox/009-sandbox-test.mu
+++ b/sandbox/009-sandbox-test.mu
@@ -153,7 +153,7 @@ after <global-touch> [
 
 def find-click-in-sandbox-output env:&:environment, click-row:num -> sandbox:&:sandbox, sandbox-index:num [
   local-scope
-  load-ingredients
+  load-inputs
   # assert click-row >= sandbox.starting-row-on-screen
   sandbox:&:sandbox <- get *env, sandbox:offset
   start:num <- get *sandbox, starting-row-on-screen:offset
@@ -181,7 +181,7 @@ def find-click-in-sandbox-output env:&:environment, click-row:num -> sandbox:&:s
 
 def toggle-expected-response sandbox:&:sandbox -> sandbox:&:sandbox [
   local-scope
-  load-ingredients
+  load-inputs
   expected-response:text <- get *sandbox, expected-response:offset
   {
     # if expected-response is set, reset
@@ -208,7 +208,7 @@ after <render-sandbox-response> [
 
 def render-sandbox-response screen:&:screen, sandbox:&:sandbox, left:num, right:num -> row:num, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   sandbox-response:text <- get *sandbox, response:offset
   expected-response:text <- get *sandbox, expected-response:offset
   row:num <- get *sandbox response-starting-row-on-screen:offset
diff --git a/sandbox/010-sandbox-trace.mu b/sandbox/010-sandbox-trace.mu
index 2c4e40cc..6d775322 100644
--- a/sandbox/010-sandbox-trace.mu
+++ b/sandbox/010-sandbox-trace.mu
@@ -164,7 +164,7 @@ container sandbox [
 # replaced in a later layer
 def! update-sandbox sandbox:&:sandbox, env:&:environment, idx:num -> sandbox:&:sandbox, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   data:text <- get *sandbox, data:offset
   response:text, _, fake-screen:&:screen, trace:text <- run-sandboxed data
   *sandbox <- put *sandbox, response:offset, response
@@ -201,7 +201,7 @@ after <global-touch> [
 
 def find-click-in-sandbox-code env:&:environment, click-row:num -> sandbox:&:sandbox [
   local-scope
-  load-ingredients
+  load-inputs
   # assert click-row >= sandbox.starting-row-on-screen
   sandbox <- get *env, sandbox:offset
   start:num <- get *sandbox, starting-row-on-screen:offset
diff --git a/sandbox/011-errors.mu b/sandbox/011-errors.mu
index 05f6a0af..893515bf 100644
--- a/sandbox/011-errors.mu
+++ b/sandbox/011-errors.mu
@@ -7,7 +7,7 @@ container environment [
 # load code from disk, save any errors
 def! update-recipes env:&:environment, resources:&:resources, screen:&:screen -> errors-found?:bool, env:&:environment, screen:&:screen [
   local-scope
-  load-ingredients
+  load-inputs
   in:text <- slurp resources, [lesson/recipes.mu]
   recipe-errors:text <- reload in
   *env <- put *env, recipe-errors:offset, recipe-errors
@@ -69,7 +69,7 @@ container sandbox [
 
 def! update-sandbox sandbox:&:sandbox, env:&:environment, idx:num -> sandbox:&:sandbox, env:&:environment [
   local-scope
-  load-ingredients
+  load-inputs
   {
     recipe-errors:text <- get *env, recipe-errors:offset
     break-unless recipe-errors
diff --git a/sandbox/012-editor-undo.mu b/sandbox/012-editor-undo.mu
index 20d53f5c..e5782f0c 100644
--- a/sandbox/012-editor-undo.mu
+++ b/sandbox/012-editor-undo.mu
@@ -199,7 +199,7 @@ before <end-insert-enter> [
 # moving the cursor can lose work on the undo stack.
 def add-operation editor:&:editor, op:&:operation -> editor:&:editor [
   local-scope
-  load-ingredients
+  load-inputs
   undo:&:list:&:operation <- get *editor, undo:offset
   undo <- push op undo
   *editor <- put *editor, undo:offset, undo
diff --git a/static-dispatch.mu b/static-dispatch.mu
index ccb3de6a..a0157d13 100644
--- a/static-dispatch.mu
+++ b/static-dispatch.mu
@@ -8,22 +8,22 @@
 
 def test a:num -> b:num [
   local-scope
-  load-ingredients
+  load-inputs
   b <- add a, 1
 ]
 
 def test a:num, b:num -> c:num [
   local-scope
-  load-ingredients
+  load-inputs
   c <- add a, b
 ]
 
 def main [
   local-scope
-  a:num <- test 3  # selects single-ingredient version
+  a:num <- test 3  # selects single-input version
   $print a, 10/newline
-  b:num <- test 3, 4  # selects double-ingredient version
+  b:num <- test 3, 4  # selects double-input version
   $print b, 10/newline
-  c:num <- test 3, 4, 5  # prefers double- to single-ingredient version
+  c:num <- test 3, 4, 5  # prefers double- to single-input version
   $print c, 10/newline
 ]
diff --git a/tangle.mu b/tangle.mu
index e8388a72..91f12dea 100644
--- a/tangle.mu
+++ b/tangle.mu
@@ -8,7 +8,7 @@
 
 def factorial n:num -> result:num [
   local-scope
-  load-ingredients
+  load-inputs
   <factorial-cases>
 ]