E01 · F08 — Node editing
Benefit hypothesis: the designer reshapes any contour vertex by vertex.
Split from F03 (Product Owner, 2026-10-11).
Refined with the Product Owner on 2026-10-11 (started with /run), paused after SP-005 while F09 was done, resumed once Q27 was settled. The decisions after F09 below supersede the earlier ones where they differ (ADR-0032, ADR-0033).
Decided in refinement (Product Owner, 2026-10-11)
- A regular polygon becomes a free shape by a dedicated button: it loses its number of corners and its anchor. Converting does not move it. Its vertices keep their exact, fractional coordinates and its radii.
- A rectangle needs no conversion: its points are moved directly, as it loses nothing; it then becomes a free shape of 4 points with its radii, and putting the point back gives the same drawing.
- A point moved lands on integers: only the points moved; the others keep their coordinates.
- Width and height of a free shape are its bounding box: moving a point may change them.
- Moving a point: by typing its x and y in the list of points. Dragging it on the drawing belongs to the editor applications (E02).
- Adding a point: a button Add a point in the middle, active when two neighbouring points are selected; the new point is exactly in the middle, fractions allowed, so that the edge does not change; it has no rounding.
- Deleting points: a Delete button and the Delete key, on a free shape or a rectangle; a shape keeps at least 3 points, the deletion is refused below with a message. A regular polygon is converted first: deleting one of its points is refused with a message saying to convert it.
- Several points selected move together (for the editor applications, with dragging).
- Not in F08, written for later: dragging points, stretching a shape by its width and height from a fixed point chosen in the 3 × 3 grid (as Inkscape), the warning shown when converting with a do not show again box (E02, editor applications); cutting, joining or deleting edges and adding connections between points (E03).
Decided after the spike (Product Owner, 2026-10-11)
- Adding a point may change the drawing: it splits the edge, so a big rounding of a neighbouring corner may shrink. Accepted; the straight contour does not change.
- Negative x and y are allowed: a position may be negative, a size may not.
- Each point keeps its number, wherever it moves; the top-left, clockwise start of Q11 holds at creation only.
- The rectangle is a free shape; the rectangle tool only creates it. Width and height of any free shape stay editable and stretch it, without loss. Done first, in F09.
Decided after F09 (Product Owner, 2026-10-11, Q27)
- Fractions until edited: fractions are accepted until the user types a point, which then lands on integers; a converted polygon keeps its exact points and size (a hexagon in 100 × 100 is 100 × 86.60254) and does not move.
- The x and y typed are those of the SVG, not of the shape's inner box; once a point is typed, the free shape keeps its points as drawn and its box becomes the one around them, so stretching stays without loss.
- A point keeps its radius with it: the free shape stores corners (a point and its radius), not two lists (VAL-006).
- A regular polygon is numbered from its base (the Product Owner's idea, left to the agent): point 1 is the right end of the flat base, point 2 its left end, then clockwise; the base corners keep their numbers, and their radii (F03.AC3), when the number of corners changes.
Settled at the validation (Q28)
- Deleting a point of a free shape joins its two neighbours with a straight edge, so that the shape stays closed (a symbol's shape is a closed contour,
shapes.md§1). Confirmed by the Product Owner at the validation (Q28).
Acceptance criteria
- A regular polygon is turned into a free shape by a button: the same points, exact, the same radii, the same drawing, its size the box around its points; it no longer has a number of corners nor an anchor.
- A point of a free shape (the rectangle included) is moved by typing its x and y, integers, in the coordinates of the SVG; the shape then keeps its points as drawn, and its width and height are the box around them.
- With two neighbouring points selected, a button adds a point exactly in the middle of their edge, without rounding, the edge unchanged.
- Selected points of a rectangle or a free shape are deleted by a button or the Delete key, their neighbours joined; at least 3 points remain, otherwise the deletion is refused with a message; on a regular polygon it is refused with a message to convert it first.
- A free shape stores corners, each a point and its radius; a regular polygon is numbered from the right end of its base, clockwise.
Stories
In delivery order.
| ID | Type | Title | Status |
|---|---|---|---|
| SP-005 | Spike | Research for F08 | done |
| EN-013 | Enabler | A regular polygon numbered from its base | done |
| EN-011 | Enabler | A free shape of corners, fractions until edited | done |
| US-014 | User story | Convert a polygon, move a point by its x, y | done |
| CHK-005 | Checkpoint | Checkpoint in the middle of F08 | done |
| US-015 | User story | Add a point in the middle of an edge | done |
| US-016 | User story | Delete points | done |
| AUD-005 | Audit | Audit F08: node editing | done |
| VAL-005 | Validation | Validate F08 on the reference cases | done |
Feature plan
| Acceptance criterion | Realized by | Verified by |
|---|---|---|
| 1 — polygon converted by a button, unmoved | EN-011, US-014 | [F08.AC1] tests, card, VAL-005 |
| 2 — a point moved by its x, y, on integers | EN-011, US-014 | [F08.AC2] tests, card, VAL-005 |
| 3 — a point added in the middle of an edge | US-015 | [F08.AC3] tests, card, VAL-005 |
| 4 — points deleted, 3 at least | EN-011, US-016 | [F08.AC4] tests, card, VAL-005 |
| 5 — corners stored, polygon numbered from its base | EN-011, EN-013 | [F08.AC5] tests, VAL-005 |