017 bridge grammar renders rules and inventions

✓ Passing This code compiles and runs correctly.

Code

input.k

Actual

defined shout
A wire line is exactly one invocation: verb(field: "value", field: "value")
- One invocation per turn. Nothing after the closing ')': no chains (|>), no second line, no trailing text.
- The verb is a bare name from your vocabulary — letters, digits, '-', '_' — immediately followed by '('.
- Every value is a double-quoted string; escape quotes and backslashes inside (\", \\). No bare values.
- A field whose type carries <!name> is a handle: issued by an earlier call, still held. Never invent one.
- Prose is not wire. To speak, call the vocabulary's voice verb; to act, call its verb. Nothing else parses.

Your vocabulary:
echo(text: string)
shout(text: string)
--- done

Expected output

defined shout
A wire line is exactly one invocation: verb(field: "value", field: "value")
- One invocation per turn. Nothing after the closing ')': no chains (|>), no second line, no trailing text.
- The verb is a bare name from your vocabulary — letters, digits, '-', '_' — immediately followed by '('.
- Every value is a double-quoted string; escape quotes and backslashes inside (\", \\). No bare values.
- A field whose type carries <!name> is a handle: issued by an earlier call, still held. Never invent one.
- Prose is not wire. To speak, call the vocabulary's voice verb; to act, call its verb. Nothing else parses.

Your vocabulary:
echo(text: string)
shout(text: string)
--- done

Flows

flow ~register click a branch to expand · @labels scroll to their anchor
register (scope: "api", source: echo(1))
subflow ~do-define click a branch to expand · @labels scroll to their anchor
define (br, source: "tor shout { text: string }\nshout = echo(text)")
subflow ~show-grammar click a branch to expand · @labels scroll to their anchor
grammar (br)
flow ~create click a branch to expand · @labels scroll to their anchor
create (id: "gram", scope: "api")

Test Configuration

MUST_RUN