design: crease reference semantics after later folds and flips #28

Closed
opened 2026-07-02 14:03:38 +00:00 by toph · 1 comment
Owner

Named points are material — they track through every fold (eval.ml:52-63). Named creases are frozen table-space lines, bound once and never updated by folds or flip (eval.ml:254). Two independent design reviews flagged this split as the core inconsistency of the current language.

Consequences: after flip or any later fold that moves the containing flap, --d refers to a line that no longer coincides with the physical mark. Spec §4.7's rationale for flip's internal canonical axis ("where the sheet lands is irrelevant") holds for material points and is false for frozen lines — results depend on an axis the spec declares arbitrary. Every planned feature that reuses creases across folds (unfold, reverse folds, sinks, layer selection) hits this.

To decide (brainstorm, then ADR):

  • (a) Material creases — stored per face in paper coordinates, pushed through isometries like points. Consistent with the action model. Open sub-question: the material trace of a crease across an earlier fold is a broken polyline in table space — what does "use as fold axis" mean then (error if not straight? image within the containing face?). The (a,b,c) line type can't represent this; likely wants first-class crease entities in the state (#26).
  • (b) Desk construction lines — creases stay frozen table lines; then flip's axis becomes observable semantics and §4.7 needs rewriting. Cheaper, contradicts the action model.

Outcome: ADR + spec §4.7 correction + eval rework.

Named points are material — they track through every fold (`eval.ml:52-63`). Named creases are frozen table-space lines, bound once and never updated by folds or `flip` (`eval.ml:254`). Two independent design reviews flagged this split as the core inconsistency of the current language. Consequences: after `flip` or any later fold that moves the containing flap, `--d` refers to a line that no longer coincides with the physical mark. Spec §4.7's rationale for flip's internal canonical axis ("where the sheet lands is irrelevant") holds for material points and is false for frozen lines — results depend on an axis the spec declares arbitrary. Every planned feature that reuses creases across folds (unfold, reverse folds, sinks, layer selection) hits this. To decide (brainstorm, then ADR): - **(a) Material creases** — stored per face in paper coordinates, pushed through isometries like points. Consistent with the action model. Open sub-question: the material trace of a crease across an earlier fold is a *broken polyline* in table space — what does "use as fold axis" mean then (error if not straight? image within the containing face?). The `(a,b,c)` line type can't represent this; likely wants first-class crease entities in the state (#26). - **(b) Desk construction lines** — creases stay frozen table lines; then flip's axis becomes observable semantics and §4.7 needs rewriting. Cheaper, contradicts the action model. Outcome: ADR + spec §4.7 correction + eval rework.
Author
Owner

Core decision — path (a), named creases are material — is implemented and merged in #43 (7489ec7). eval.ml binds a named crease as Material (crease_id, line) and pushes it through isometries like a point, so the frozen-line inconsistency is resolved.

The remaining open piece — the broken-polyline "use as fold axis" question and the #(...) / --( --d #(...) ) restrict escape hatch — is superseded by #50, which folds it into the at operator over the bundle model (ADR 0014).

Closing as superseded by #50.

Core decision — path (a), named creases are material — is implemented and merged in #43 (`7489ec7`). `eval.ml` binds a named crease as `Material (crease_id, line)` and pushes it through isometries like a point, so the frozen-line inconsistency is resolved. The remaining open piece — the broken-polyline "use as fold axis" question and the `#(...)` / `--( --d #(...) )` restrict escape hatch — is superseded by #50, which folds it into the `at` operator over the bundle model (ADR 0014). Closing as superseded by #50.
toph closed this issue 2026-07-04 19:06:42 +00:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
toph/beloch#28
No description provided.