Skip to main content

Module lock

Module lock 

Source
Expand description

What a block’s lock protects, as a capability rather than a check.

A locked block freezes its interface: which pins exist, what signal each carries, what each is called. It does not freeze presentation: where a pin sits on the edge, which way the block’s pins face, whether a tag is shown. The split is by what the edit means, not by what it touches — moving a pin from slot 2 to slot 5 changes a drawing, changing it from Input to Output changes a definition.

Material — a lock refusesPresentation — a lock allows
add a pin, add a portmove a pin to another slot or edge
delete a pin or portnudge or relocate a pin group
set the I/O directionflip pins left/right or top/bottom
rename a pinshow or hide a tag
edit a pin’s type linerecolor, resize, retitle the block
edit a pin’s tag textmove or delete the whole block

Stated as types because a rule spread across call sites is a rule that drifts, and this one had: the guard reached the presentation edits it should have left alone, and missed cycle_dir, the one edit that most obviously changes a pin’s meaning. Both errors were invisible because each site decided for itself.

Now a material emitter takes a proof and there is no other way to name its target, so the rule is checked where it is minted and nowhere else. A presentation emitter takes a plain id and is offered no proof, which is how the table above reads in the signatures.

Structs§

MaterialPin
A pin whose owner accepts material edits to its interface.
UnlockedScope
A scope that accepts material interface edits — the document root, which has no lock to carry, or an unlocked block.