Tommaso Bianchi and Claude Opus 5
cbbd24dcb4
Port the exact loop area, the offset traversal fix, and the 2D sketch ladder
...
Carries snaporca 572f794c84, d0f9a0052a, 9f7e4e3627 and 3974f8a170. Parity holds: 17 files
identical, 8 diverging by their expected counts.
EXACT AREA. A loop's area is now integrated entity by entity in traversal order — Green's
theorem — instead of being shoelaced over the render polyline, which faceted every arc into 24
chords and lost 2.02 mm2 on a 3706.86 mm2 stadium. 0.054%, invisible on screen, and wrong in a
number reported as "the area".
OFFSET FOLLOWS THE TRAVERSAL. Offsetting a mirrored profile put one half on the wrong side and
split the loop in two, because the chainer only followed p1->p0 links and each entity's offset
side was taken from its stored direction. Chains are now orientation-aware, seeded at a free end,
offset by `reversed ? -d : d`, and normalised head-to-tail on the way out — so offset is correct
for any input ordering and its own output cannot reintroduce the problem.
Both are the same underlying lesson, which has now cost three separate defects: an entity's
STORED direction is not its direction of TRAVEL around the loop.
THE LADDER. scripts/sketch-ladder.py is a graded suite of 2D sketches judged the way a person
judges them — VERTEX, LENGTH, ARC, TANGENT, SYMMETRY, CLOSED — with area only as a cross-check,
because area is derived and nobody can confirm it by eye. Eight rungs from a rectangle up to
MPD5 from the StudyCadCam corpus, a dia 27 x 95 pin reproduced as its revolve half-profile with
the R5 fillet tangency solved exactly. Entirely 2D: no extrude or any solid feature.
Kernel here: all tests passed, 2681 assertions in 231 test cases, including the new
"profile: a mirrored half offsets as one loop, not two". GUI target builds and links.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-08-22 14:26:46 +02:00
..
2026-06-03 10:19:04 -03:00
2026-08-07 13:22:26 -03:00
2026-08-22 14:26:46 +02:00
2024-10-05 21:53:16 +03:00
2026-05-08 19:22:49 +08:00
2026-08-18 12:19:27 -03:00
2026-08-13 15:22:08 +08:00
2026-08-16 23:40:50 -03:00
2026-06-18 09:13:51 -03:00
2024-08-12 00:00:20 +08:00
2026-08-05 21:42:15 +08:00
2026-07-26 19:16:19 -03:00
2026-08-05 21:42:15 +08:00
2024-05-10 23:47:08 +08:00
2026-05-12 15:09:13 +08:00
2026-08-04 21:56:15 +08:00
2026-08-19 19:15:38 +08:00
2026-08-19 19:15:38 +08:00
2026-03-13 02:12:10 -07:00
2026-03-13 02:12:10 -07:00
2025-09-10 10:05:07 +08:00
2025-01-22 10:03:21 +08:00
2023-12-01 10:42:45 +00:00
2024-08-12 00:00:20 +08:00
2026-06-24 00:36:41 -03:00
2026-08-01 18:07:15 +08:00
2024-01-28 10:12:55 +00:00
2024-06-15 14:56:44 +08:00
2026-08-02 10:54:16 +08:00
2026-07-18 19:57:56 -03:00
2025-09-21 13:47:51 +08:00
2026-04-20 19:18:03 -03:00
2025-11-15 11:11:20 -05:00
2026-07-21 12:42:09 -03:00
2026-07-27 20:11:44 -03:00
2026-02-09 20:42:26 +01:00
2026-02-09 20:42:26 +01:00
2026-07-08 14:20:40 -03:00
2026-07-08 14:20:40 -03:00
2025-11-22 15:39:12 +08:00
2026-07-14 15:34:13 -03:00
2026-07-14 15:34:13 -03:00
2024-09-23 19:26:18 +08:00
2026-08-20 17:45:15 +02:00
2025-06-14 21:05:25 +08:00
2025-05-08 16:00:48 +08:00
2025-10-28 15:30:00 +08:00
2026-07-08 00:05:28 +08:00
2026-08-13 17:28:31 -03:00
2026-05-08 13:22:00 -03:00
2026-04-23 00:21:19 +08:00
2024-06-15 14:56:44 +08:00
2026-05-18 12:57:48 +08:00
2026-05-18 12:57:48 +08:00
2025-10-28 15:29:47 +08:00
2026-04-07 22:22:43 +08:00
2025-02-26 23:07:23 +08:00
2026-04-19 20:28:13 -03:00
2024-02-13 23:56:48 +08:00
2023-09-27 21:44:45 +08:00
2025-06-22 23:10:35 +08:00
2026-03-24 09:18:38 -07:00
2023-12-09 22:46:18 +08:00
2023-12-09 22:46:18 +08:00
2023-12-09 22:46:18 +08:00
2026-08-05 00:13:27 +08:00
2026-07-14 14:42:16 -03:00
2026-03-24 09:18:38 -07:00
2026-07-03 17:27:57 -03:00
2024-08-12 00:00:20 +08:00
2026-05-27 22:07:15 +08:00
2026-02-09 20:42:26 +01:00
2024-01-26 20:18:10 +08:00
2026-07-15 16:59:55 +08:00
2026-07-15 16:59:55 +08:00
2026-07-11 15:00:33 +08:00
2026-07-09 01:16:25 +08:00
2026-07-20 09:47:33 -03:00
2025-06-22 23:10:35 +08:00
2026-01-05 22:41:04 +00:00
2025-09-29 20:38:38 +08:00
2025-09-29 20:38:38 +08:00
2025-09-29 20:38:38 +08:00
2026-08-13 21:52:52 -03:00
2026-08-06 15:48:40 +08:00
2025-09-24 22:49:14 -04:00
2025-11-15 11:11:20 -05:00
2026-08-05 00:09:46 +08:00
2026-07-22 16:30:43 -03:00
2025-04-04 23:07:00 +08:00
2026-05-07 22:32:56 +08:00
2026-06-25 22:10:49 +08:00
2024-06-15 14:56:44 +08:00
2024-06-15 14:56:44 +08:00
2025-06-18 17:50:44 +08:00
2023-12-01 10:42:45 +00:00
2026-07-03 17:27:57 -03:00
2026-07-12 11:45:00 -03:00
2026-06-03 10:16:59 -03:00
2026-03-11 17:20:12 -07:00
2024-05-12 23:35:41 +08:00
2025-07-30 21:22:40 +08:00
2025-10-28 15:29:55 +08:00
2026-03-24 09:18:38 -07:00
2025-09-18 17:08:18 +08:00
2025-09-18 17:08:18 +08:00
2025-10-19 19:27:55 +08:00
2026-01-14 19:51:13 +08:00
2025-10-19 21:57:34 +08:00
2025-02-26 23:07:23 +08:00
2026-08-05 21:42:15 +08:00
2024-11-06 20:19:52 +08:00
2026-04-24 16:28:28 +08:00
2026-04-24 16:28:28 +08:00
2024-05-10 23:47:08 +08:00
2026-07-08 20:24:55 +08:00
2026-07-08 20:24:55 +08:00
2026-08-18 15:33:31 +08:00
2026-07-25 12:28:33 +02:00
2026-06-14 17:42:53 +08:00
2025-12-08 22:42:11 +08:00
2026-07-22 16:49:37 -03:00
2026-07-22 16:49:37 -03:00
2026-07-12 03:24:35 +08:00
2026-07-12 03:24:35 +08:00
2026-03-13 01:56:51 -07:00
2026-03-13 01:56:51 -07:00
2026-06-18 09:13:51 -03:00
2023-12-01 10:42:45 +00:00
2024-05-10 23:47:08 +08:00
2024-05-10 23:47:08 +08:00
2024-06-15 14:56:44 +08:00
2024-06-15 14:56:44 +08:00
2025-09-18 16:10:27 +08:00
2025-09-18 16:10:27 +08:00
2026-07-18 19:57:56 -03:00
2024-05-10 23:47:08 +08:00
2026-07-10 16:21:48 +08:00
2026-08-05 21:45:48 +08:00
2025-10-02 17:07:17 +08:00
2025-10-02 17:07:17 +08:00
2025-04-05 17:47:59 +08:00
2026-08-03 18:02:48 -03:00
2026-06-03 10:12:26 -03:00
2026-08-04 22:01:45 +08:00
2025-07-18 15:43:46 +08:00
2026-07-02 17:49:36 +08:00
2026-07-02 17:49:36 +08:00
2024-01-31 11:23:29 +00:00
2024-01-31 11:23:29 +00:00
2026-03-13 01:56:51 -07:00
2026-03-24 09:18:38 -07:00
2026-05-04 15:52:34 +08:00
2025-06-18 17:50:44 +08:00
2025-06-18 17:50:44 +08:00
2026-03-13 01:56:51 -07:00
2026-07-27 00:48:44 +08:00
2026-08-06 12:24:00 +08:00
2026-07-25 20:00:56 +08:00
2026-08-17 14:34:41 +08:00
2026-07-11 04:38:31 +08:00
2026-08-06 17:58:41 +08:00
2026-07-18 19:57:56 -03:00
2026-08-12 15:42:21 -03:00
2026-07-03 00:14:32 +08:00
2026-06-18 12:45:26 +08:00
2026-08-18 12:19:27 -03:00
2026-08-18 12:19:27 -03:00
2025-12-08 22:42:11 +08:00
2026-08-13 17:09:10 -03:00
2026-06-01 16:00:00 +08:00
2026-06-05 20:45:43 +08:00
2024-01-31 11:23:29 +00:00
2026-05-10 02:21:13 +08:00
2024-05-10 23:47:08 +08:00
2023-11-04 11:41:03 +08:00
2024-08-12 00:00:20 +08:00
2026-07-27 19:52:29 -03:00
2026-07-27 19:52:29 -03:00
2026-06-18 12:45:26 +08:00
2026-06-18 12:45:26 +08:00
2026-06-18 09:13:51 -03:00
2024-08-12 00:00:20 +08:00
2026-05-10 15:12:56 +08:00
2026-05-10 15:12:56 +08:00
2025-10-19 19:27:55 +08:00
2025-02-12 22:10:57 +08:00
2023-09-29 23:39:12 +08:00
2023-09-29 23:39:12 +08:00
2024-06-15 14:56:44 +08:00
2024-01-31 11:23:29 +00:00
2026-08-02 18:20:35 +08:00
2024-06-15 14:56:44 +08:00
2026-05-21 16:24:54 +08:00
2026-01-29 19:19:37 +08:00
2026-01-23 17:05:56 +08:00
2024-06-15 14:56:44 +08:00
2026-04-23 10:34:36 -03:00
2025-12-08 22:42:11 +08:00
2025-12-08 22:42:11 +08:00
2026-05-12 15:09:13 +08:00
2026-02-12 08:42:01 +08:00
2026-05-04 20:33:13 +08:00
2025-02-08 11:34:40 +08:00
2026-05-10 12:35:31 +08:00
2026-05-10 12:35:31 +08:00
2024-08-12 00:00:20 +08:00
2024-08-12 00:00:20 +08:00
2024-05-10 23:47:08 +08:00
2024-08-12 00:00:20 +08:00
2024-06-15 14:56:44 +08:00
2026-07-09 01:16:25 +08:00
2026-07-09 01:16:25 +08:00
2026-02-09 20:42:26 +01:00