Tommaso Bianchi and Claude Opus 5
cd30fb891e
the same phantom-endpoint bug in Coincident, and the two unguarded branches next to it
...
Port of snaporca da8d011b87; parity holds (DesignPanel.cpp still exactly 32 divergent
lines). Verified independently on this fork's own rig: full ladder 126/126 against
BuildID 96c697a3, built from this tree.
Reviewing the DistanceX/Y fix for OTHER members of its class found three more live defects
on the constrain toolbar. All four share one root: a branch assumes every picked entity has
two endpoints, and the solver's refusal to resolve a role it cannot find is silent.
COINCIDENT had the identical closest-pair walk over {P0,p0},{P1,p1}. For two Points the
phantom (0,0) pair sits at distance 0, which is the smallest distance there is, so it
ALWAYS won: ptOf(Point,P1) -> 0, ref_ok fails (SketchSolver.cpp:185), constraint dropped.
Not sometimes -- every press.
HORIZONTAL/VERTICAL hardcoded ra=P0, rb=P1 with no type check. With a Point picked the
constraint is dropped by the same mechanism but still STORED: constraints goes 0 -> 1 after
the commit and nothing moves, so the Constraints list shows a dimension that can never do
anything. Worse than refusing -- the panel claims the sketch is constrained when it is not.
ANGLE computed p1-p0 on whatever was picked. On a circle that is (0,0)-centre, so two
circles pre-filled the field with the angle between their centre POSITION VECTORS (178.83
deg for two on the x axis), and accepting it emits SLVS_C_ANGLE on two circle prims.
Both branches now refuse with a message. entity_ends()/closest_ends() are file-scope and
shared by Coincident and DistanceX/Y, so there is one implementation instead of two that
drift.
Two smaller findings from the same review: infer_auto_constraints' roles_of omitted
EllipseArc while heal_coincidences' identical copy has it; and set_point(Circle, Center)
wrote e.center and not e.p0, breaking the "p0 mirrors centre" invariant for the duration of
a live drag.
New rungs D8 and D9, both RED against the shipped binary and green here.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01MrMzTpAf78U4NG2M8jfvHY
2026-08-31 13:52:12 +02:00
..
2026-08-31 13:52:12 +02:00
2026-08-26 07:38:52 -03:00
2026-08-26 07:38:52 -03:00
2026-08-27 17:06:37 +08:00
2026-08-09 13:24:04 +08:00
2026-07-22 16:30:43 -03:00
2026-08-28 08:05:59 -03:00
2026-08-28 08:05:59 -03:00
2026-03-05 11:33:07 -03:00
2026-04-13 19:45:39 +08:00
2026-06-30 00:24:39 +02:00
2026-08-23 22:11:48 +08:00
2026-07-09 01:16:26 +08:00
2026-07-11 20:24:03 +03:00
2026-07-17 19:32:44 +08:00
2026-07-16 13:08:48 +08:00
2026-07-24 09:41:24 -03:00
2026-07-17 05:06:09 +08:00
2026-07-24 09:41:24 -03:00
2026-07-18 01:46:23 +08:00
2026-07-18 01:46:10 +08:00
2026-08-11 14:51:25 +08:00
2026-07-18 01:46:23 +08:00
2026-07-17 13:20:41 +08:00
2026-07-17 06:48:15 +08:00
2025-10-28 15:29:47 +08:00
2026-07-29 19:37:17 +08:00
2026-03-25 11:28:00 +08:00
2026-07-15 17:18:46 +08:00
2026-06-18 12:45:26 +08:00
2026-07-11 20:24:03 +03:00
2025-09-18 17:04:10 +08:00
2026-03-24 20:50:44 +08:00
2025-10-05 16:02:17 +08:00
2025-09-16 20:11:02 +08:00
2025-12-18 12:14:56 +00:00
2025-10-28 15:29:51 +08:00
2026-06-11 02:47:33 +08:00
2026-04-20 19:27:38 -03:00
2026-06-18 09:13:51 -03:00
2026-07-28 14:32:55 +08:00
2026-01-03 23:06:57 +08:00
2026-04-13 19:45:39 +08:00
2026-03-25 11:26:32 +08:00
2026-03-25 11:26:32 +08:00
2026-07-11 20:24:03 +03:00
2026-07-27 20:11:44 -03:00
2026-07-27 20:11:44 -03:00
2026-07-28 14:32:55 +08:00
2025-10-28 15:30:00 +08:00
2026-07-29 19:37:17 +08:00
2026-06-18 09:13:51 -03:00
2025-10-28 15:29:59 +08:00
2026-06-18 09:13:51 -03:00
2025-09-17 14:17:13 +08:00
2026-06-18 09:13:51 -03:00
2026-01-03 23:06:57 +08:00
2026-08-26 19:14:30 -03:00
2026-05-16 19:13:40 +08:00
2026-07-09 01:16:26 +08:00
2026-08-25 08:18:48 -03:00
2026-06-18 09:13:51 -03:00
2026-08-25 08:18:48 -03:00
2026-07-28 14:32:55 +08:00
2026-07-09 01:16:26 +08:00
2026-04-13 19:45:39 +08:00
2025-09-09 09:39:43 +08:00
2026-07-17 06:48:15 +08:00
2025-11-08 20:44:37 +08:00
2025-09-09 15:40:26 +08:00
2026-07-28 14:32:55 +08:00
2026-08-25 00:04:14 +03:00
2026-08-23 22:11:48 +08:00
2026-08-23 22:11:48 +08:00
2026-08-23 22:11:48 +08:00
2026-08-23 22:43:41 +08:00
2026-08-07 13:31:04 -03:00
2026-08-21 16:56:52 +08:00
2026-08-21 16:56:52 +08:00
2026-08-12 18:50:49 +08:00
2025-10-02 17:07:21 +08:00
2026-06-07 13:12:51 +08:00
2026-05-19 20:03:54 +00:00
2026-08-21 16:56:52 +08:00
2025-09-18 17:13:09 +08:00
2026-06-18 09:13:51 -03:00
2026-05-19 17:13:07 +08:00
2026-05-19 17:13:07 +08:00
2026-06-18 09:13:51 -03:00
2026-04-13 17:21:05 +08:00
2026-07-18 01:46:10 +08:00
2026-07-18 03:15:11 +08:00
2026-08-14 15:12:18 +08:00
2026-08-12 18:50:49 +08:00
2026-07-28 19:17:05 +08:00
2026-08-24 15:37:47 -03:00
2026-07-11 16:37:50 +08:00
2026-07-11 16:37:50 +08:00
2026-01-09 21:25:48 +08:00
2025-09-30 14:31:54 +08:00
2025-10-01 15:47:44 +08:00
2026-07-05 10:39:25 +08:00
2026-07-05 10:39:25 +08:00
2026-05-19 01:01:53 +08:00
2026-05-17 02:29:39 -05:00
2026-07-28 14:32:55 +08:00
2025-12-18 12:14:56 +00:00
2026-08-06 06:16:28 +08:00
2026-08-25 08:18:48 -03:00
2026-08-23 22:43:41 +08:00
2026-08-23 22:43:41 +08:00
2026-07-09 18:57:05 +08:00
2026-07-09 18:57:05 +08:00
2026-07-11 16:37:50 +08:00
2026-07-11 16:37:50 +08:00
2026-07-24 09:41:24 -03:00
2026-07-11 16:37:50 +08:00
2026-07-28 14:32:55 +08:00
2025-12-18 12:14:56 +00:00
2026-07-08 20:24:55 +08:00
2026-08-23 12:18:22 -03:00
2026-07-29 16:27:15 -03:00
2026-08-28 02:19:41 +08:00
2026-08-28 02:19:41 +08:00
2026-07-12 13:30:55 -03:00
2026-02-10 13:08:22 +08:00
2026-04-13 19:45:39 +08:00
2026-04-13 19:45:39 +08:00
2026-07-12 21:44:30 -03:00
2026-05-19 01:38:37 +08:00
2025-10-31 16:53:08 +08:00
2026-08-25 00:47:25 +08:00
2026-08-23 22:11:49 +08:00
2026-08-27 23:13:41 +08:00
2026-08-29 01:56:48 +08:00
2026-08-24 22:02:47 +03:00
2026-04-24 16:28:28 +08:00
2026-06-18 09:13:51 -03:00
2025-09-24 22:49:14 -04:00
2025-11-17 10:29:44 +08:00
2026-08-23 22:43:41 +08:00
2026-05-17 02:29:39 -05:00
2026-08-07 13:31:04 -03:00
2026-08-07 13:31:04 -03:00
2026-06-30 08:55:09 +08:00
2026-06-30 08:55:09 +08:00
2026-08-07 13:31:04 -03:00
2026-08-07 13:31:04 -03:00
2025-11-15 11:11:20 -05:00
2025-09-24 22:49:14 -04:00
2026-08-01 11:28:07 +08:00
2026-08-26 07:38:52 -03:00
2026-08-24 15:37:47 -03:00
2026-08-04 22:01:45 +08:00
2025-09-07 23:58:51 +08:00
2025-09-07 23:58:51 +08:00
2026-06-18 09:13:51 -03:00
2026-08-18 19:00:53 +08:00
2026-08-18 19:00:53 +08:00
2026-07-19 20:16:17 +08:00
2025-10-02 09:30:48 +08:00
2026-05-01 18:01:29 +08:00
2026-05-01 18:01:29 +08:00
2026-07-24 09:41:24 -03:00
2026-04-13 19:45:39 +08:00
2026-08-28 08:05:59 -03:00
2025-11-17 15:30:35 +00:00
2026-07-24 09:41:24 -03:00
2026-08-25 22:10:49 +08:00
2026-08-23 22:11:49 +08:00
2026-08-05 21:41:04 +08:00
2026-05-15 00:46:05 +08:00
2026-07-16 11:02:55 +08:00
2026-07-16 11:02:55 +08:00
2026-05-15 00:57:52 +08:00
2026-07-24 09:41:24 -03:00
2026-04-13 19:45:39 +08:00
2026-04-13 19:45:39 +08:00
2026-08-29 01:56:48 +08:00
2026-08-28 14:11:23 +02:00
2026-07-24 09:41:24 -03:00
2025-10-02 09:30:48 +08:00
2026-07-17 08:30:22 +08:00
2026-03-11 14:59:29 +08:00
2026-04-13 19:45:39 +08:00
2026-08-25 00:04:14 +03:00
2026-08-25 00:47:25 +08:00
2025-10-28 15:29:56 +08:00
2026-08-19 01:37:23 +08:00
2026-07-17 08:30:22 +08:00
2025-10-28 15:29:56 +08:00
2026-07-15 15:06:17 +08:00
2026-08-04 22:01:45 +08:00
2026-08-04 22:01:45 +08:00
2026-05-18 19:46:47 +08:00
2026-05-18 19:46:47 +08:00
2026-02-27 11:19:22 -03:00
2026-02-04 11:40:02 +00:00
2025-09-21 23:01:08 +08:00
2026-07-29 19:37:17 +08:00
2025-10-02 09:30:48 +08:00
2025-09-25 20:33:50 +08:00
2026-02-04 11:40:02 +00:00
2026-07-28 14:32:55 +08:00
2026-07-21 01:21:40 +03:00
2026-07-28 14:32:55 +08:00
2026-08-19 14:08:19 +08:00
2026-08-19 14:08:19 +08:00
2026-07-28 19:17:05 +08:00
2026-08-23 22:11:49 +08:00
2025-12-18 12:14:56 +00:00
2025-12-18 12:14:56 +00:00
2026-06-21 18:20:58 +08:00
2026-06-21 18:20:58 +08:00
2026-06-18 09:13:51 -03:00
2026-04-15 22:36:25 +08:00
2026-07-24 09:41:24 -03:00
2026-05-21 09:04:27 +08:00
2026-07-16 11:02:55 +08:00
2026-03-24 20:39:45 +08:00
2026-08-04 18:12:19 +08:00
2026-08-02 10:54:16 +08:00
2026-05-10 15:14:35 +08:00
2026-06-14 18:55:40 +08:00
2026-04-25 18:14:51 +08:00
2026-08-28 02:07:25 +08:00
2026-08-28 02:07:25 +08:00
2025-09-26 10:55:19 +08:00
2026-07-28 14:32:55 +08:00
2026-05-21 13:18:52 +03:00
2026-08-04 18:12:20 +08:00
2026-08-04 18:12:19 +08:00
2026-08-31 18:04:12 +08:00
2026-08-29 18:52:15 +08:00
2026-08-25 00:47:25 +08:00
2026-08-23 22:11:48 +08:00
2026-07-02 17:49:36 +08:00
2026-07-15 20:12:51 +08:00
2026-07-04 22:14:55 +08:00
2026-07-04 22:14:55 +08:00
2026-07-17 16:09:19 +08:00
2026-07-17 16:09:19 +08:00
2026-07-31 14:15:51 +08:00
2026-07-31 14:15:51 +08:00
2026-07-06 18:14:26 +08:00
2026-07-31 14:15:22 +08:00
2026-07-06 12:31:34 +08:00
2026-07-28 19:17:26 +08:00
2026-07-17 21:12:55 +08:00
2026-07-17 16:09:19 +08:00
2026-07-10 19:57:35 +08:00
2026-08-29 01:56:48 +08:00
2026-07-29 16:27:15 -03:00
2026-07-22 19:09:57 -03:00
2026-07-22 19:09:57 -03:00
2026-07-05 10:39:25 +08:00
2026-07-05 10:39:25 +08:00
2026-08-06 06:16:28 +08:00
2026-06-24 00:36:42 -03:00
2026-06-05 20:45:43 +08:00
2026-07-13 12:19:33 -03:00
2026-07-22 15:14:49 -03:00
2026-05-16 15:22:31 +08:00
2026-05-28 19:45:03 +08:00
2026-05-16 15:22:31 +08:00
2026-07-24 09:41:24 -03:00
2026-08-25 08:18:48 -03:00
2026-07-28 14:32:55 +08:00
2026-07-16 19:28:50 +08:00
2025-12-18 12:14:56 +00:00
2025-12-18 12:14:56 +00:00
2026-07-02 17:49:36 +08:00
2026-07-02 17:49:36 +08:00
2026-08-06 06:08:02 +08:00
2026-08-06 06:08:02 +08:00
2026-07-28 14:32:55 +08:00
2026-07-10 15:41:57 +08:00
2026-07-10 15:41:57 +08:00
2025-11-17 10:29:44 +08:00
2025-12-18 12:14:56 +00:00
2025-12-18 12:14:56 +00:00
2026-08-12 18:50:49 +08:00
2026-02-11 16:00:04 +08:00
2026-03-03 17:36:42 -03:00
2025-10-28 15:29:54 +08:00
2026-08-09 02:08:54 +03:00
2026-08-06 22:58:39 +08:00
2025-10-14 08:56:18 +08:00
2025-10-14 08:56:18 +08:00
2026-08-27 08:06:50 -03:00
2026-08-27 08:06:50 -03:00
2026-08-06 15:48:40 +08:00
2026-06-18 09:13:51 -03:00
2026-08-28 08:05:59 -03:00
2026-08-25 08:18:48 -03:00
2026-08-12 18:50:49 +08:00
2026-01-03 23:06:57 +08:00
2026-06-18 09:13:51 -03:00
2026-01-23 17:05:56 +08:00
2026-04-13 19:45:39 +08:00
2026-08-28 08:05:59 -03:00
2026-08-25 08:18:48 -03:00
2026-04-13 19:45:39 +08:00
2025-09-26 14:35:06 +08:00
2026-06-18 09:13:51 -03:00
2026-07-17 22:37:56 +08:00
2026-07-17 22:37:56 +08:00
2026-07-24 09:41:24 -03:00
2026-07-17 09:41:01 +08:00
2026-07-28 14:32:55 +08:00
2026-07-03 17:19:24 -03:00
2026-08-23 22:43:41 +08:00
2026-08-25 08:18:48 -03:00
2026-08-24 15:37:47 -03:00
2026-08-26 19:06:33 +08:00
2026-08-25 22:10:49 +08:00
2026-02-04 11:40:02 +00:00
2026-08-26 07:38:52 -03:00
2026-03-25 15:58:39 +08:00
2026-08-25 08:18:48 -03:00
2026-01-23 17:05:56 +08:00
2026-01-23 17:05:56 +08:00
2026-07-02 17:49:36 +08:00
2026-07-02 17:49:36 +08:00
2026-04-13 19:45:39 +08:00
2026-08-25 00:47:25 +08:00
2026-08-25 00:47:25 +08:00
2025-10-28 15:30:06 +08:00
2025-10-28 15:30:06 +08:00
2026-07-28 14:32:55 +08:00
2026-07-28 14:32:55 +08:00
2026-07-28 14:32:55 +08:00
2026-08-25 08:18:48 -03:00
2026-07-28 14:32:55 +08:00
2026-07-19 20:16:17 +08:00
2026-07-17 09:41:01 +08:00
2026-05-01 18:01:29 +08:00
2025-10-28 15:29:56 +08:00
2026-08-21 16:56:52 +08:00
2026-08-21 16:56:52 +08:00
2026-07-13 12:19:33 -03:00
2026-05-01 18:01:29 +08:00
2026-07-24 09:41:24 -03:00
2026-05-01 18:01:29 +08:00
2026-08-23 22:43:41 +08:00
2026-08-23 22:11:48 +08:00
2026-08-23 22:11:49 +08:00
2026-08-23 22:11:49 +08:00
2026-03-24 20:44:32 +08:00
2026-07-26 22:15:53 +08:00
2026-05-13 00:01:10 +08:00