A flesh body does only what its signal's frame says
Pitfall 27 of writing Soma, the programming language: a habit from another language, or a rule that surprises, with what the Soma compiler answers and the form to write.
skeleton Orders {
memory { log: Map<String, String> }
face { signal place(id: String) -> String }
}
flesh Orders {
on place(id) { log.set(id, "x") return id }
}
// error: `Orders.place` writes `log`, outside its frame (no `writes`) — if the design
// means it, add it to `signal place` in `skeleton Orders`: `writes log`skeleton Orders {
memory { log: Map<String, String> }
face { signal place(id: String) -> String writes log }
}
flesh Orders {
on place(id) { log.set(id, "x") return id }
}A frame is closed: reads / writes slots, moves machine edges, calls other signals and effectful builtins (now, random, think, …), emits. A signal with no clause is pure. soma skeleton app.cell Orders.place prints what one signal may touch.