Scenario: expressions, bindings, jq, foreach

Expression mutation corpus

specified graph-owned fixture
Open in Inspector ->
source src://expressions/mixed.html rendered rendered://public/expressions/mixed.html echo expressions, set bindings, mixed text, foreach index and item values specified
source src://expressions/mixed.html rendered rendered://public/expressions/mixed.html corpus public://_hypermake/testing/latest.json
Expression source.html
<set key="releasedCount"
  value="{{ items | jq:'[.[] | select(.href)] | length' }}" />

<h2>{{ releasedCount }} -- {{ testNumber }} already available</h2>
<p>prefix {{ testNumber }} suffix</p>

<foreach items="{{ items }}" key="item">
  {{ index + 1 }}. {{ item.title }}
</foreach>
src://expressions/mixed.html
Scope lineage.scope
items          -> data://items.json
releasedCount -> jq([.[] | select(.href)] | length)
testNumber    -> literal scalar 2
item           -> foreach item
index          -> foreach index

fanout:
  releasedCount: h2 + two-expression row
  testNumber: h2 + single + mixed + two-expression
hypermake lzr scope-map src/expressions/mixed.html
Rendered output.html

3 -- 2 already available

3

prefix 2 suffix

rendered://public/expressions/mixed.html

What this tests

  • Echo expression body edits in text nodes.
  • <set> bindings and jq-backed values.
  • Foreach-local item and index scope.

Expected behavior

  • Expression-body edits use expression spans, not generic text replacement.
  • Single-use scalar fanout patches; ambiguous fanout refreshes or refuses visibly.
  • Syntax highlighting separates variables, jq blocks, pipes, and protocol resources.

Inspector pointers

scope cache://hypermake/lzr/tape-ledgers/rendered/public/expressions/mixed.tape-ledger.json

data data://items.json

rendered rendered://public/expressions/mixed.html

Live expression targets

3 -- 2 already available

3

prefix 2 suffix

3 / 2