4339 Commits

Author SHA1 Message Date
jyviko 3a5b38355c Wave 501/509: Kernel rig: a case's continuity can ask for an order per seam (seams: [{order, edges, exact}]) (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 4a4d9c31c jyviko: Known-failing: the shell of a fully rounded box opened at one face fails on SMLib 5e8c9c1 (tangency-labs/smlib#102)
- 303111e4e jyviko: Known-failing: the action matrix's oblique cylinder cut fillet passes on SMLib 5e8c9c1; two shells still fail
- c5332faf4 jyviko: Kernel rig: the boss root's curvature round gets the rig's 1800 s cap: on the CI runners, 8 cases at a time, its G2 certification passed 600 s (tangency-labs/smlib#96)
- 970446dec jyviko: Kernel rig: a case's continuity can ask for an order per seam (seams: [{order, edges, exact}])

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 19:09:20 -05:00
jyviko fb1d5f79ad Wave 500/509: Kernel tests: the box-and-fillet wire fixture records the round's cylinder frame as SMLib now keeps it (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- 72109054c jyviko: Kernel tests: the box-and-fillet wire fixture records the round's cylinder frame as SMLib now keeps it
- f87305648 jyviko: Known failing: two kernel tests' reasons as they fail on SMLib 5e8c9c1 (a partial selection running into an unblended tangent edge)
- 75efb8f0c jyviko: Kernel rig: two curvature rounds get 600 s, past the 180 s default, while G2 certification is slow (tangency-labs/smlib#96)
- 68c3ccb75 jyviko: Oracle: 34-chamfer-then-fillet and 35-fillet-curved-curved pass on SMLib 5e8c9c1 (their STEP edges are on their surfaces)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 19:14:23 -05:00
austin62jake 062a7b8288 Tangent Arc: a first click off a curve's end is refused at once, saying where to click (#10653) (#10655)
* Tangent Arc: a first click off a curve's end is refused at once, saying where to click (#10653)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Tangent Arc: a first click off a curve's end is refused at once, saying where to click (#10653)

The Tangent Arc tool took any first click as its start; a click on a
line between its ends snaps to a place that is no point yet (on:l3:...,
mid:l1), and the second click then failed with "unknown sketch point"
naming that internal reference.

The tool now refuses such a first click at once, with its own hint as
the error, asking the command's rule (tangent_arc_starts_at, factored
out of arc_tangent: the picked point or one at the same place, and a
drawn curve leaving it). The command refuses a snapped start with its
existing message that start must be the end point of a line or arc.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-11-02 00:09:17 +00:00
Colin Faulkingham 5bbfa5ea6c Sketch: preserve source geometry when deleting a pattern (#10651) (#10661)
* claim: #10651

* fix(sketch): preserve source geometry when deleting patterns
2026-11-02 00:09:10 +00:00
austin62jake 75c46dad7b Tests: the autosave scenario crashes once its autosave has landed (#10690) (#10694)
* Tests: the autosave scenario crashes once its autosave has landed (#10690)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Tests: the autosave scenario crashes once its autosave has landed (#10690)

s25_autosave_recovery 'crashed' right after the extrude; under load the
autosave of it, written on a worker thread, had not landed, so the next
launch recovered the earlier autosave without the body (step 16).

The harness's crash restart now runs frames, bounded, until the active
autosave has caught up (Autosaver::caught_up: no write running and the
last autosave holds the design as it is). The app's own ticks still do
the writing, so an autosave that stopped writing still fails the test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-11-02 00:09:03 +00:00
github-actions[bot] af54b09bb1 Regenerate generated files and fold pending files [skip ci] 2026-11-02 01:51:55 +00:00
github-actions[bot] dcbca523a0 Regenerate generated files and fold pending files [skip ci] 2026-11-02 01:42:49 +00:00
froglemonade2 e9b08f4af4 Control channel: report the dialog as data, the open tool windows, and what ui.start opened (#9087) (#10740)
* claim: #9087

* Control channel: report the dialog as data, the open windows, and what ui.start opened (#9087)

`ui.inspect.dialog` (and `ui.editFeature`'s reply) was the dialog's Rust Debug text, which
changed with every refactor and couldn't be parsed. It is now an object: the dialog's command,
title, the feature an edit rebuilds, its selection inputs, its error, and the commands OK runs
(or what it waits for). `hover` in `ui.inspect` and `ui.selection` is a selection-like item
instead of Debug text.

`ui.inspect` gains `windows`: the tool windows open beside the model (Parameters, Bill of
Materials, Design Properties, Sketch Report, material card review) by the command that opens
each, and the Help menu's (About, Updates, Shortcuts, Crash Reports, Report, Messages) by their
`ui.help` item. Before, an agent couldn't tell these windows were open.

`ui.start` and `ui.editFeature` reply with what they opened (tool, dialog, windows), the status
line, and `pending` when the start waits for the history and opens on a later frame.

Scenario `dialog` checks match words of the dialog's state from the app directly, so the
scenario files are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:08:48 +00:00
Dahak Builds 6a7275a5af Agent chat: copy an entire sent prompt or assistant message (#10675) (#10741)
* claim: #10675

* agent chat: Copy message on each sent prompt and assistant text block (#10675)

A visible Copy message button on each copyable transcript message and a
right-click menu with the same action. Assistant replies copy their
original Markdown, prompts copy the text as entered; picture-only prompts
and thoughts get no action. Hover-only message areas keep partial text
selection working.

* agent chat: complete Copy message locales and tests (#10675)

* agent chat: route the message copy menu through ui_kit::Container (ui-containers gate)

---------

Co-authored-by: Dahak Builds <dahakbuilds@users.noreply.github.com>
2026-11-02 00:08:41 +00:00
PapaEcho 666356dba0 Assistant: configurable show/hide shortcut (#10764) (#10767)
* claim: #10764

* Assistant: make show/hide shortcut configurable (#10764)
2026-11-02 00:08:23 +00:00
austin62jake 3fe2b3386f Sketch: Remove Spline Point takes one point out of a spline (#10783) (#10793)
* Sketch: Remove Spline Point takes one fit point out of a spline (#10783)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Sketch: Remove Spline Point takes one point out of a spline (#10783)

sketch.spline.remove_point takes one fit or control point out of a
spline. The spline keeps its id and runs through its other points, which
stay where they are. The point goes with the constraints on it, unless
another curve uses it. A closed spline's closing point, an end joined to
other geometry, the last 2 points (3 when closed), and projected, offset
or patterned splines are refused with a message.

The right-click menu of a spline point, picked alone, offers it beside
Reverse Spline Direction.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-11-02 00:08:11 +00:00
Colin Faulkingham afe06a1a3d Edit Joint: show components for point and frame origins (#7749) (#10838)
* claim: #7749

* fix(ui): show components for point and frame joint origins
2026-11-02 00:07:29 +00:00
Colin Faulkingham eaf34d2528 Construction planes: refuse duplicate feature names (#10707) (#10743)
* claim: #10707

* Fix construction plane name collisions (#10707)
2026-11-02 00:06:59 +00:00
Dahak Builds 2b9261050f Sketch: stop tying expression-placed points to the origin with an automatic Coincident (#10703) (#10722)
* claim: #10703

* Sketch: do not tie expression-placed points to the origin with an automatic Coincident

A point whose coordinates are parameter expressions follows those
expressions. When they came to 0 at draw time the point landed on the
origin and connect_points tied it there with a Coincident, exactly like
a snapped click; the next parameter change then conflicted with the tie.
connect_points now skips points that carry exprs; plain-number points
keep the snap.

---------

Co-authored-by: Dahak Builds <dahakbuilds@users.noreply.github.com>
2026-11-02 00:06:51 +00:00
semmelrinde eac1425661 Hole: a face name shared by two bodies is no split face (#10699) (#10872)
* Face names: one name on two bodies is no split face (#10699)

A hole placed on the top of one of two bodies an extrude made, or on a
piece of a split body, warned "face `F2:top` was split; using the piece
nearest the picked point": the face name is on both bodies, and any
name found more than once counted as split. A name on several bodies,
one face on each, now finds the face the point lies on without the
note; pieces on one body, or a point on none of them, still say split.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Hole: look for a face name shared by two bodies on the body the point is on (#10699)

The lookup over every body counts a name on several bodies as split on
purpose (a copy's face is not a piece of the source's, see
`the_same_face_on_a_copy_is_not_a_piece_of_the_named_bodys_face`), so
the first change, which made it unique there, is undone. A hole whose
face name is found split while its point lies on one of those faces now
looks again on that body alone: one face of the name there is the face,
whole; pieces on that body still say split.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:06:43 +00:00
github-actions[bot] 88dbda42a7 Regenerate generated files and fold pending files [skip ci] 2026-11-02 00:31:13 +00:00
Homero Thompson 9e30ff5878 fix(#5505): a zero length dimension keeps constraining the sketch (#10790)
The residual of a length dimension is the magnitude of the distance between
the line's two ends. At zero the magnitude has no derivative, so the rank
analysis read the constraint as if it were not there and the sketch reported
a degree of freedom that was not there.

At zero the two ends of the line meet, so the residual says it with the
vector between them, the way a coincidence does. That is the treatment a
distance of zero already gets (upstream #4397); the length family was left
out of it.

Regression test: crates/sketch/src/tests.rs, zero_length_keeps_the_line_constrained.

Co-authored-by: Homero Thompson <homero@local>
2026-11-02 00:05:09 +00:00
thocsmith 4c4c768d57 Cancel button on the Computing toast (#8266) (#10366)
* claim: #8266

* Computing toast: a Cancel that gives up on the move (#8266)

The Computing toast for a history command (marker move, undo, redo,
suppress, reorder) or a delete's check computing off the window thread now
has a Cancel button. It drops the job and the commands queued behind it;
the design stays as it was, since a deferred command only runs for real
once its evaluation is in. A feature edit applying keeps its dialog's own
Cancel, so its toast shows none.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: thocsmith <193096300+thocsmith@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:04:53 +00:00
Dahak Builds 83fe1f874f Sketch Project: keep hidden origin planes hidden in Project (#10778) (#10834)
* claim: #10778

* Sketch Project: keep hidden origin planes hidden (#10778)

WIP from dead worker: fix + test written, gates not yet run.

---------

Co-authored-by: Dahak Builds <dahakbuilds@users.noreply.github.com>
2026-11-02 00:04:45 +00:00
Colin Faulkingham 0734616104 View cube: follow the selected projection (#10634) (#10640)
* claim: #10634

* Make navigation cube follow viewport projection (#10634)
2026-11-02 00:04:43 +00:00
Dahak Builds d68d86dae9 Dialog form cards widen their label column for the current language (#10620) (#10646)
* claim: #10620

* widen dialog form-card label columns to the measured label width (#10620)

* fix compile of the grow tests

* grow the card only past the label cap and tag the form scope in place (#10620)

* keep scope_grow crate-internal so the gallery scan stays element-only (#10620)

---------

Co-authored-by: Dahak Builds <dahakbuilds@users.noreply.github.com>
2026-11-02 00:04:41 +00:00
rugbymauri 7d86a8cfd3 Sketch: dragging a constrained centre point of a centre rectangle moves it, not resizes it (#10510) (#10535)
* claim: #10510

Signed-off-by: Maurizio Monticelli <maurizio@whatwedo.ch>

* Sketch: dragging a centre rectangle's constrained centre point keeps the rectangle's size

A centre rectangle's centre sits on the middle of its diagonal, and a
press there picked the diagonal's midpoint before the centre point. The
drag then took the diagonal by its middle: with the centre free the
rectangle moved along, but with the centre held (on the origin, on a
line) the diagonal turned and stretched about it, and the rectangle
grew or shrank with the pointer, many times its size.

A drag that starts on a line's middle where a point is held by a
Midpoint constraint now drags that point, as a drag that starts on the
point does. A centre held on the origin stays there and the rectangle
keeps its size; a centre on a line slides the whole rectangle along it;
a free centre still moves the rectangle. Clicking the middle still
selects the line's midpoint for constraints.

Fixes #10510

Signed-off-by: Maurizio Monticelli <maurizio@whatwedo.ch>

---------

Signed-off-by: Maurizio Monticelli <maurizio@whatwedo.ch>
2026-11-02 00:04:38 +00:00
semmelrinde cea07cbc66 Sketch Slice: cut at the sketch plane while a Section Analysis is on (#10705) (#10768)
With a section on, Slice in the Sketch Palette lit up but the model was
still cut only by the section: the viewport took the sketch's plane only
when there was no section. Slice now takes it whenever it is on in the
sketch being edited; the section comes back when Slice is turned off or
the sketch closes. A slice is hatched as it is without a section.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 00:02:59 +00:00
Colin Faulkingham 0b90731096 Dialogs: readable sketch selection labels (#10752) (#10770)
* claim: #10752

* Fix readable sketch selection labels in dialogs (#10752)
2026-11-02 00:02:37 +00:00
jyviko 0aa6f15b82 Wave 499/509: Ladder: 016 and 018 refused, their r3 chain takes the vertical edge; 020 and 021 recorded (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- d5cd5f303 jyviko: Known failing: two 851 chains whose corner piece is a ball of tube-centre radius 0
- ea49dff48 jyviko: Ladder: 016 and 018 refused, their r3 chain takes the vertical edge; 020 and 021 recorded
- 38385ab5d jyviko: Kernel tests: three rounds at a box corner end on one rational patch on the ball's sphere, not an analytic sphere
- 459937e52 jyviko: Kernel rig: the curvature round on a pipe on a plate is listed: a seam grades G3 where exactly G2 is wanted

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 18:38:05 -05:00
SilentWolf75 afa4f72f7d Insert SVG: say why a sketch is too large (#10874) (#10880)
* claim: #10874

Co-authored-by: Cursor <cursoragent@cursor.com>

* Insert drawing: name the sketch size cap when a file is too dense (#10874)

A large SVG/DXF failed with opaque \"sketch is too large\". Say the 20000 point/curve limit and that scale alone does not reduce entity count, and refuse dense drawings before adding them.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-11-01 23:37:55 +00:00
Sebastian Höpfl cfc46448a8 Joints: an edge origin shares the joint faces' measurement (#10866)
`face_of` called `Body::faces`, which tessellates the whole body, on every
solve. Face origins went through the cached `ModelBody::joint_faces`, at
the same tolerance, but edge origins never did, so one edge origin on a
large body cost a drag or a Drive Joints step far more than the solve.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 22:51:42 +00:00
github-actions[bot] 58c64ca4d4 Regenerate generated files and fold pending files [skip ci] 2026-11-01 22:29:27 +00:00
Nathan Dane 5c7e50cb67 Preferences redesign 2/11: shared widgets and painters in ui_kit (#9874) (#9890)
* claim: #9874

* Add shared Preferences cards, figure painters and gallery entries to ui_kit

* Preferences: Arabic, Hebrew and Vietnamese carousel labels

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Use the app's selection colours in the Preferences cards

* Measure Preferences figure inks and use shared palette metrics

---------

Co-authored-by: bherbruck <brennen.herbruck@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 21:58:35 +00:00
Colin Faulkingham b6aabb88ff Insert Design: place reused links from their parent origin (#10813) (#10825)
* claim: #10813

* fix: place reused linked designs from parent origin (#10813)
2026-11-01 21:47:53 +00:00
DuBearte a1dc849e8d Sketch Fillet and Chamfer: a refused size's error goes once the size fits (#9316) (#9469)
A corner dialog copied the preview's error into its own, where nothing
cleared it when the preview recovered. The dialog already shows the
preview's error, so the copy is gone.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 21:25:21 +00:00
Kushagra Kumar 446590dca1 fix(engine): report design variant in timeline.inspect and accept in timeline.add (#10748) (#10792)
* fix(engine): report design variant in timeline.inspect and accept in timeline.add (#10748)

* ci: refresh checks to clear cancelled workflow run
2026-11-01 21:00:44 +00:00
CamWight 303236e524 Tests: io's byte mutator moves to a testkit crate, a dev-dependency only (#5184) (#7682)
* Tests: io's byte mutator moves to a testkit crate, a dev-dependency only (no behaviour change)

`solidcraft-testkit` (the Testkit class xtask/src/layers.rs reserves) holds the mutator and the
no-panic check unchanged: the same seeds, mutations, budget and doc comment. io's reader fuzz
tests use it as a dev-dependency and give the same case counts; the mutator's own test moves
with it. The co-editing wire's decoders will fuzz with it too (#5184, CE6).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Cargo.lock: testkit at the workspace version

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: bherbruck <brennen.herbruck@gmail.com>
2026-11-01 20:28:58 +00:00
bherbruck 97336ccfe7 Kernel pause: pull requests are judged by the kernel directories they change (#10807)
A pull request outside crates/kernel, crates/geom and vendor/truck* is no longer labelled for a
kernel word in its title. Issues and discussions keep the title check.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 20:19:41 +00:00
cronos e1d4cb433c Cover sketch line-arc fillets in both selection orders (#10242) 2026-11-01 20:19:16 +00:00
Thodoris Tsagkogeorgas 0ad74f2577 Revolve: keep the angle grab point when the sweep is zero (#9601) (#9602)
A revolve of 0° still builds no solid. The handle stays on the profile so the angle can be dragged back into range.
2026-11-01 20:18:27 +00:00
semmelrinde 835e261593 Coil: up and down arrows on the Revolutions field (#7481) (#7766)
* claim: #7481

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Coil: step arrows on the Revolutions field (#7481)

The Coil dialog drew Revolutions as a plain expression row, the one
count without the step arrows the pattern quantities have. It is now a
count row from 1 to 200 turns (the helix's limit); a fraction still
types in, and an arrow steps it to the next whole turn.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 20:12:56 +00:00
github-actions[bot] 84c3b6356c Regenerate generated files and fold pending files [skip ci] 2026-11-01 20:42:12 +00:00
github-actions[bot] d730a273dc Regenerate generated files and fold pending files [skip ci] 2026-11-01 20:33:03 +00:00
semmelrinde 89cb651084 Warnings: quote a long generated name by its start and end (#8673)
A chamfer's warning quoted the full generated names of fourteen split edges,
122,701 characters (#8541). Names over about 80 characters are now quoted by
their first 48 and last 24 characters.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 20:12:42 +00:00
Kai Evans 9efcb461f8 Feature edits: OK computes off the window thread in a dialog without a live preview too (#7388)
Offset Plane and a cosmetic Thread have no live preview, so their edits' OK ran on the window
thread and recomputed every later feature there. Any edit now goes through the off-thread
transaction. The editor's pinned original is used only while the dialog previews, as
open_feature_edit keeps it: a Thread switched from Modeled to cosmetic edits the design as it is,
so a body hidden meanwhile doesn't refuse it as a changed design.
2026-11-01 20:11:05 +00:00
Daniel 958ab867cd Press Pull on a chamfer or fillet face edits it where you clicked (#4986) (#9771)
* claim: #4986

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Press Pull on a chamfer's face changes the chamfer's distance (#4986)

A chamfer's face is flat, so solid.press_pull and the Press Pull start
path in the UI took it for a planar face and extruded it. Both now look
for a fillet's or chamfer's face before asking whether the face is
planar, so a chamfer's face reopens the chamfer and its distance grows
by the distance pulled, as a fillet's radius already does. A first pick
with Press Pull already open is routed the same way.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Press Pull on a blend face puts the arrow on the edge clicked

A fillet or chamfer reopened by Press Pull from one of its faces drew
its radius or distance arrow on the feature's first stored edge, which
can be a corner the user did not click and cannot see (the Sample
Plate's fillet, from the far corner). The click's point now goes with
the reopened dialog as a hint that is never saved, and the arrow sits
on the feature's edge nearest it, at the point on that edge nearest the
click. Opened any other way (the history, Edit Feature) the arrow stays
on the first edge as before.

A click point that is not finite is not kept, and a point on a flat face next to a chamfer still extrudes that face (tested).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 20:11:00 +00:00
Jesper We cffa6e1580 Loft and Surface Loft: two sections from one sketch (#8221) (#8222)
* claim: #8221

* Loft and Surface Loft: two sections from one sketch (#8221)
2026-11-01 20:10:13 +00:00
semmelrinde ce296a1ad5 Extrude preview: a round face sweeps round walls, with lines up its corners only (#8838)
The live preview of extruding a picked face built its walls from the
face's display triangles and drew a line up the wall at every boundary
point, each wall piece shaded flat. A round face (the Bolted Flange's
flange) looked like a polygon while extruding. Lines now go up only
where an edge of the face ends and the outline turns there more than
its curves do, and a wall's normal turns with it between smooth pieces.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 20:09:21 +00:00
semmelrinde 0515dee9ce Colour popover: a held step button keeps stepping, and R, G and B have tooltips (#10201) (#10203)
* Colour popover: a held step button keeps stepping, and R, G and B have tooltips (#10201)

The step buttons beside each colour number sensed clicks only. egui
stops counting a press as a possible click once it outlasts its longest
click (0.8 s), so the held button stopped repeating after 8 steps. They
now sense drags too, which keeps a long press down on the button until
it is let go.

R, G and B now carry tooltips (Red, Green, Blue) as H, S and V already
did: a single letter doesn't name the colour in every language.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Colour popover: the R, G and B tooltips in Vietnamese too, a complete catalog (#10201)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 20:08:43 +00:00
Vvynot 0478f7e401 Hole: reference Distance shows the document precision (#10693) (#10777)
* Hole: reference Distance shows the document precision (#10693)

A measured reference distance showed the raw float (10.000000868569572 mm).
The field now reads at the document's length precision while Refs keeps the
measured value for the model, so OK still sends what was measured.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Hole: restored literals use the document precision (#10693)

Round every literal reference distance on Edit Feature, including comma
decimals and exact whole values; expressions stay as written.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-11-01 20:05:49 +00:00
Rec0iL 52f0b52b45 Agent chat: a searchable model picker with a custom entry, listed from every provider, and OpenClaw and OpenRouter presets (#2582) (#10255)
* ui_kit: search_picker, a filtered dropdown with a custom entry

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Agent chat: endpoints list their models with names, say when listing fails, and OpenClaw and OpenRouter presets (#2582)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Agent chat: a typed model goes to endpoints and to agents that offer a model option

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Agent chat: the header's model pickers search and take a custom model

The popup can't grow once it is open, so search_picker now fixes the height of what changes below
its box when it opens: the custom row or a late list could otherwise end up out of reach.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* AI preferences: pick an endpoint's model when adding it and on its card (#2582)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Agent chat: model picker rows read from the left, and a refused typed model says which

From running it: list_picker centres its text, which reads badly for a long list of ids, and an
agent's own refusal can say no more than "Internal error". The search box also asks for a repaint
while it waits for the focus, so an idle window does not stop short of it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Agent chat: docs for the model picker

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Agent chat: an endpoint's answer that is no model list says so, an empty list too, and editing lists with the kept key

A 200 without a `data` array (a web page where the endpoint should be, as OpenClaw's gateway
serves until its chat endpoint is enabled) was cached as a successful, empty listing, so the
picker stayed blank with nothing to say and never asked again. Now it is an error with its own
note, an empty list says so, and both are asked for again the next time.

The Edit dialog lists its endpoint's models when it opens, with the kept key read from the
keychain on the listing's thread, as the card does; the key stays out of the field.

The method-not-found test expects the refusal notice that names the model, as every refused
model gets since this branch.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Agent chat: models from several providers fold under their providers inside the picker

As Chemiseblanc does in #10187: with two or more groups, `search_picker` draws each group as a
header with a chevron, the name and how many of its choices are listed, and a click folds or opens
it. Before anything is typed only the current value's group (and the one the caller asks for) is
open; a group with a match opens once something is typed; a fold made by hand stays until the popup
closes. Enter takes the first row shown, so never one folded away. A lone group keeps its plain
heading.

The header's model picker feeds its providers in as groups, so the separate provider drop-down
goes; the control channel's `provider` now says which group opens first. A header click gives the
focus back to the search box, so typing goes on filtering.

The dialog's listing test checks what kind of listing it got rather than translated words, which
the listing thread may render in another language than the test's.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Agent chat: rustfmt the provider groups

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Agent chat: an endpoint's models named `Vendor: Model` fold under their vendors

OpenRouter lists `openai/gpt-6.1-terra` as "OpenAI: GPT-6.1 Terra". A listing whose ids read
`vendor/model` and whose names read `Vendor: Model` now names its providers, so the picker folds
it under its vendors like a multi-provider agent; the rows read the model's name, and the id stays
in the tooltip and in the search. An agent's own `Provider: …` word still comes first. One vendor
is one flat list, as before.

The Add dialog's picker has no current model to prefer, so with nothing to prefer every group
starts open; folding is a click away.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 20:01:26 +00:00
jyviko 8f691ac257 Wave 498/509: Kernel rig: the partial-selection cases kept as -partial-chain copies, tangent chain off (and 3 more)
4 commits, squashed; the originals stay reachable from tag archive/merge-main-develop.

- ce8b01fa3 jyviko: Kernel rig: the partial-selection cases kept as -partial-chain copies, tangent chain off
- 78ed75162 jyviko: Kernel rig: the concave arc between the block's tangent sides kept with tangent chain off
- ee3ed66a4 jyviko: Kernel rig: two chains that now build graded by their exact volumes
- f2ff6f0d4 jyviko: Kernel rig: a curvature chain round a round's end refused for its size; the concave half circle builds

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M41G8Nua7HvuFPZkmJ
2026-11-01 14:55:27 -05:00
ABDULLAH 1ae93218a7 Arabic: outline term in the cut preview tint help (#10801) 2026-11-01 19:50:21 +00:00
P'tite Tête 3017641b41 fix: Projection d'une silhouette à congés coniques fermée en un profil (#10773)
- snap_tangent_arcs : chaque extrémité d'arc prend la ligne la plus proche
- une ligne ne prend qu'une extrémité d'un arc ; l'autre passe à sa ligne suivante
- une ligne plus loin sur le contour est ignorée quand l'extrémité touche déjà une autre pièce
- tests : 4 unitaires (project_order.rs) et the_silhouette_of_conic_rounds_closes

Co-authored-by: P'tite Tête <asso@ptitetete.com>
2026-11-01 19:41:32 +00:00