{"at":"2026-10-10T20:05:45.526Z","ok":true,"prs":[{"n":370,"title":"fix(viewport): time the first preview frame with a fence, not a readback","draft":false,"roadmap":["other"],"opened":"2026-10-10T04:21:10Z","state":"passed","checks":{"done":38,"total":38,"failed":0}},{"n":484,"title":"perf(app): a painted plate slices in at most 4 layer ranges in the browser","draft":false,"roadmap":["repeat"],"opened":"2026-10-10T19:26:34Z","state":"failing","checks":{"done":74,"total":74,"failed":2}},{"n":483,"title":"fix(slicer): encodeParts writes the parts' paint, as the engine's raw format carries it","draft":false,"roadmap":["stability"],"opened":"2026-10-10T19:26:01Z","state":"passed","checks":{"done":100,"total":100,"failed":0}},{"n":474,"title":"feat(core): join solid surface lines however long the turn is","draft":false,"roadmap":["stability"],"opened":"2026-10-10T18:33:53Z","state":"passed","checks":{"done":92,"total":92,"failed":0}},{"n":485,"title":"test(web): the filament hue check leaves out what passes over the view, toasts included","draft":false,"roadmap":["other"],"opened":"2026-10-10T19:30:49Z","state":"passed","checks":{"done":74,"total":74,"failed":0}},{"n":480,"title":"test(connect): keep test runs on loopback","draft":false,"roadmap":["other"],"opened":"2026-10-10T19:15:06Z","state":"passed","checks":{"done":74,"total":74,"failed":0}},{"n":478,"title":"fix(web): keep the Open dialog's file input in the page until the dialog answers","draft":false,"roadmap":["other"],"opened":"2026-10-10T19:10:31Z","state":"failing","checks":{"done":100,"total":100,"failed":1}},{"n":475,"title":"test(e2e): wait for the hand pause to reach the mock printer","draft":false,"roadmap":["other"],"opened":"2026-10-10T18:40:49Z","state":"passed","checks":{"done":76,"total":76,"failed":0}},{"n":469,"title":"feat(viewport): move, turn and scale a multi-selection together","draft":false,"roadmap":["other"],"opened":"2026-10-10T18:12:01Z","state":"passed","checks":{"done":100,"total":100,"failed":0}},{"n":476,"title":"test(connect): deepen the Prusa, Elegoo and Snapmaker printer simulators","draft":false,"roadmap":["printers"],"opened":"2026-10-10T19:00:43Z","state":"passed","checks":{"done":76,"total":76,"failed":0}},{"n":477,"title":"fix(app): settings tabs on a phone are 44 px targets in one sideways row","draft":false,"roadmap":["phone"],"opened":"2026-10-10T19:07:47Z","state":"passed","checks":{"done":100,"total":100,"failed":0}},{"n":470,"title":"fix(app): lay out Slice on a phone in rows, so Print is always in reach","draft":false,"roadmap":["phone"],"opened":"2026-10-10T18:12:25Z","state":"failing","checks":{"done":92,"total":92,"failed":2}},{"n":436,"title":"feat(app): auto slice by size: quick plates slice by themselves, big ones wait for Slice","draft":false,"roadmap":["slice"],"opened":"2026-10-10T12:36:04Z","state":"failing","checks":{"done":56,"total":56,"failed":2}},{"n":445,"title":"feat(app): compact object rows with a tree, one Add button, and tools in the card","draft":false,"roadmap":["slice"],"opened":"2026-10-10T14:22:19Z","state":"passed","checks":{"done":56,"total":56,"failed":0}},{"n":473,"title":"ci: list the fit-check prime tower move test as flaky on the GPU lane","draft":false,"roadmap":[],"opened":"2026-10-10T18:24:43Z","state":"passed","checks":{"done":20,"total":20,"failed":0}},{"n":467,"title":"test(e2e): check the open-no-blank frames up to the one that draws the new model","draft":false,"roadmap":[],"opened":"2026-10-10T17:29:07Z","state":"passed","checks":{"done":58,"total":58,"failed":0}},{"n":466,"title":"fix(ui): a held control makes at most 120 corrections per press","draft":false,"roadmap":[],"opened":"2026-10-10T17:11:15Z","state":"failing","checks":{"done":56,"total":56,"failed":2}},{"n":219,"title":"fix(web): say so when the slicing engine fails to start, and offer to try again","draft":false,"roadmap":[],"opened":"2026-10-09T08:29:17Z","state":"failing","checks":{"done":31,"total":31,"failed":2}},{"n":40,"title":"feat(connect): link an existing printer through BamBuddy","draft":true,"roadmap":[],"opened":"2026-10-07T23:49:24Z","state":"failing","checks":{"done":10,"total":10,"failed":2}}],"merged":[{"n":471,"title":"test(core): a canceled slice leaves its session as a fresh one","roadmap":[],"mergedAt":"2026-10-10T19:59:58Z"},{"n":406,"title":"fix(embed): let the viewport pick its quality from the graphics it finds","roadmap":["other"],"mergedAt":"2026-10-10T19:54:01Z"},{"n":482,"title":"ci: list the camera guard hold card test as flaky","roadmap":["other"],"mergedAt":"2026-10-10T19:48:04Z"},{"n":479,"title":"fix(core): an empty layer range writes neither the start nor the end of the print","roadmap":["stability"],"mergedAt":"2026-10-10T19:42:39Z"},{"n":463,"title":"test(core): a late pool worker prints its ranges as the first worker does","roadmap":[],"mergedAt":"2026-10-10T19:00:10Z"},{"n":462,"title":"fix(core): a layer range reads bridge clusters below its window the same as one range","roadmap":[],"mergedAt":"2026-10-10T19:00:10Z"},{"n":459,"title":"fix(ui): a toast stays up as long as its text takes to read","roadmap":[],"mergedAt":"2026-10-10T18:25:45Z"},{"n":444,"title":"feat(app): print settings in tabs in Advanced and Expert, with Color only for two filaments","roadmap":[],"mergedAt":"2026-10-10T18:23:59Z"},{"n":453,"title":"feat(core): route travels round the printer's keep-out zones","roadmap":[],"mergedAt":"2026-10-10T18:09:43Z"},{"n":443,"title":"test(e2e): aim the fit-check drag after the open's first slice lands","roadmap":[],"mergedAt":"2026-10-10T17:58:51Z"},{"n":464,"title":"fix(app): a phone's open sheet takes its content's height and holds it","roadmap":[],"mergedAt":"2026-10-10T17:58:17Z"},{"n":405,"title":"feat(app): move arrows when Move is picked, and a toolbar that keeps still","roadmap":[],"mergedAt":"2026-10-10T17:36:06Z"},{"n":465,"title":"ci: take the filament slot editor test off quarantine","roadmap":[],"mergedAt":"2026-10-10T17:35:31Z"},{"n":455,"title":"desktop 0.2.3 hotfix: CI for the release commit (not to be merged)","roadmap":[],"mergedAt":"2026-10-10T17:17:44Z"},{"n":458,"title":"ci: take Slice in Simple out of quarantine","roadmap":[],"mergedAt":"2026-10-10T17:07:56Z"},{"n":447,"title":"fix(app): on a phone, a toast floats above an open sheet instead of over its controls","roadmap":[],"mergedAt":"2026-10-10T16:42:24Z"},{"n":452,"title":"fix(ui): a held control never loops on its own writes, or on a dialog over the pane","roadmap":[],"mergedAt":"2026-10-10T16:28:41Z"},{"n":440,"title":"feat(core): decide narrow internal solid per piece on Bambu Lab printers","roadmap":[],"mergedAt":"2026-10-10T16:28:41Z"},{"n":441,"title":"test(e2e): read the printer switch note from every toast drawn, not only the one still on screen","roadmap":[],"mergedAt":"2026-10-10T16:06:53Z"},{"n":391,"title":"fix(app): opening the preset list keeps settings changed after a preset","roadmap":[],"mergedAt":"2026-10-10T15:57:27Z"},{"n":454,"title":"fix(core): every layer range of a by-object plate ends at the plate's top","roadmap":[],"mergedAt":"2026-10-10T15:55:12Z"},{"n":451,"title":"fix(app): the camera guard listens before the bridge says Connected","roadmap":[],"mergedAt":"2026-10-10T15:44:44Z"},{"n":437,"title":"fix(core): check travels against keep-out zones with a nozzle-width clearance","roadmap":[],"mergedAt":"2026-10-10T15:22:50Z"},{"n":427,"title":"test(e2e): edge tabs read the view width only once the panes are still","roadmap":[],"mergedAt":"2026-10-10T15:21:12Z"},{"n":424,"title":"fix(core): a ledge narrower than the outer wall does not start in mid-air","roadmap":[],"mergedAt":"2026-10-10T15:10:15Z"},{"n":450,"title":"ci: quarantine two tests that fail on main until their fixes land","roadmap":[],"mergedAt":"2026-10-10T15:08:16Z"},{"n":409,"title":"fix(mobile): close a phone approval card that was answered in SlicerX","roadmap":[],"mergedAt":"2026-10-10T14:17:05Z"},{"n":432,"title":"fix(core): read Bambu Studio's zig-zag as rectilinear in every pattern key","roadmap":[],"mergedAt":"2026-10-10T14:16:30Z"},{"n":431,"title":"feat(app): a filament rail that picks a slot's filament out in the view","roadmap":[],"mergedAt":"2026-10-10T13:27:57Z"},{"n":430,"title":"fix(ui): a pressed control holds even when frames come late","roadmap":[],"mergedAt":"2026-10-10T13:26:12Z"},{"n":394,"title":"test(web): drop the next STEP file only after the assembly's open ends","roadmap":[],"mergedAt":"2026-10-10T13:08:32Z"},{"n":417,"title":"test(web): read the auto slice's stale mark in the same turn as the edit","roadmap":[],"mergedAt":"2026-10-10T12:42:09Z"},{"n":418,"title":"test(e2e): the feature tooltip test keeps its pointer and checks the hand over on a fake clock","roadmap":[],"mergedAt":"2026-10-10T12:41:00Z"},{"n":419,"title":"fix(geom): an edge round coarsens only the faces it touches","roadmap":[],"mergedAt":"2026-10-10T12:24:17Z"},{"n":415,"title":"fix(app): a slice that no longer matches the plate never passes for it","roadmap":[],"mergedAt":"2026-10-10T12:19:09Z"},{"n":402,"title":"fix(app): close an approval card that was answered on another device","roadmap":[],"mergedAt":"2026-10-10T12:11:44Z"},{"n":398,"title":"perf(app): write the autosave's project file in the project worker","roadmap":[],"mergedAt":"2026-10-10T12:06:37Z"},{"n":400,"title":"fix(app): a partner app's print card names the partner, not an AI agent","roadmap":[],"mergedAt":"2026-10-10T11:56:54Z"},{"n":401,"title":"ci: fail a pull request whose Cargo.lock does not match the manifests","roadmap":[],"mergedAt":"2026-10-10T11:51:45Z"},{"n":397,"title":"fix(app): hold the autosave while a slice runs, so the progress bars move","roadmap":[],"mergedAt":"2026-10-10T11:45:05Z"},{"n":389,"title":"feat(app): the Slice footer: the estimate on one line, a breakdown behind the time, and a split Print","roadmap":[],"mergedAt":"2026-10-10T11:39:48Z"},{"n":393,"title":"fix(app): an opened project keeps its flush volumes and prime tower spot","roadmap":[],"mergedAt":"2026-10-10T11:35:14Z"},{"n":387,"title":"fix(link): search the network for printers only when asked","roadmap":[],"mergedAt":"2026-10-10T11:27:58Z"},{"n":363,"title":"fix(ui): pressing a control never moves it or anything above it","roadmap":[],"mergedAt":"2026-10-10T11:22:58Z"},{"n":403,"title":"test(e2e): the plate reveal spec waits for the plate it compares","roadmap":[],"mergedAt":"2026-10-10T11:16:59Z"},{"n":425,"title":"chore(engine): 0.1.3","roadmap":[],"mergedAt":"2026-10-10T11:10:32Z"},{"n":423,"title":"perf(app): the layer plan runs on its own and only when its inputs change","roadmap":[],"mergedAt":"2026-10-10T10:51:25Z"},{"n":422,"title":"fix(settings): read Bambu Studio's reduce_infill_retraction_mode","roadmap":[],"mergedAt":"2026-10-10T10:40:14Z"},{"n":421,"title":"ci: list the edge tabs Slice rail test as flaky","roadmap":[],"mergedAt":"2026-10-10T10:25:50Z"},{"n":416,"title":"fix(core): the filament used counts what the change G-code extrudes and flushes","roadmap":[],"mergedAt":"2026-10-10T10:23:19Z"},{"n":388,"title":"feat(settings): stock G-code fingerprints from the presets released apps ship","roadmap":[],"mergedAt":"2026-10-10T09:49:04Z"},{"n":383,"title":"test(app): the hard-coded plate check compares paths with forward slashes","roadmap":[],"mergedAt":"2026-10-10T09:38:22Z"},{"n":410,"title":"feat(core): paint is cut on the union of an object's parts","roadmap":[],"mergedAt":"2026-10-10T08:54:22Z"},{"n":375,"title":"ci: build sx-link and run the bridge spec in the e2e shards","roadmap":[],"mergedAt":"2026-10-10T09:36:19Z"},{"n":377,"title":"fix(app): a cleared plate stops its slice, so the next design opens at once","roadmap":[],"mergedAt":"2026-10-10T09:25:53Z"},{"n":353,"title":"perf(core): work out each layer's auto lift overhang once","roadmap":[],"mergedAt":"2026-10-10T09:24:54Z"},{"n":246,"title":"feat(app): the pill names the step that made the picked face, and opens it","roadmap":[],"mergedAt":"2026-10-10T09:16:23Z"},{"n":412,"title":"fix(app): run the fit check with the right pane shut","roadmap":[],"mergedAt":"2026-10-10T09:13:11Z"},{"n":404,"title":"docs(integrators): prepare in the viewport and slice with sx","roadmap":[],"mergedAt":"2026-10-10T09:06:15Z"},{"n":411,"title":"fix(mcp): a Bambu Studio 2 project's per-variant settings are read as the app reads them","roadmap":[],"mergedAt":"2026-10-10T09:02:08Z"},{"n":408,"title":"fix(core): the H2D flush is timed and templated as Bambu Studio does","roadmap":[],"mergedAt":"2026-10-10T08:51:24Z"},{"n":407,"title":"ci: GPU runners share the machine under a GPU hold, timing specs run alone","roadmap":[],"mergedAt":"2026-10-10T08:41:35Z"},{"n":395,"title":"fix(core): painted tops and bottoms read the project's color penetration, and smaller specks go","roadmap":[],"mergedAt":"2026-10-10T08:20:28Z"},{"n":386,"title":"fix(core): no \"plate has none\" support warning when an object has enforcers","roadmap":[],"mergedAt":"2026-10-10T08:20:28Z"},{"n":396,"title":"feat(mcp): say when a slice names no printer","roadmap":[],"mergedAt":"2026-10-10T08:08:58Z"},{"n":355,"title":"feat(embed): Prepare tools with move arrows, a reveal per plate and a calm bed outline in the embedded view","roadmap":[],"mergedAt":"2026-10-10T08:07:44Z"},{"n":238,"title":"feat(app): Model's shelf and steps use the Model icons","roadmap":[],"mergedAt":"2026-10-10T07:55:53Z"},{"n":390,"title":"fix(mcp): a project's flush volumes, nozzle map and tower spot reach the engine","roadmap":[],"mergedAt":"2026-10-10T07:54:27Z"},{"n":378,"title":"fix(build): lock sx-wasm's libm dependency","roadmap":[],"mergedAt":"2026-10-10T07:44:07Z"},{"n":384,"title":"fix(geom): sleipnir ends exactly on the model's top, without a sliver","roadmap":[],"mergedAt":"2026-10-10T07:44:07Z"},{"n":392,"title":"fix(ui): a toast's time starts once it is on screen","roadmap":[],"mergedAt":"2026-10-10T07:27:01Z"},{"n":379,"title":"fix(core): seam visibility rays find the nearest face","roadmap":[],"mergedAt":"2026-10-10T07:09:44Z"},{"n":234,"title":"fix(ui): lift a menu out of a panel too short for it, so the Model shelf's menus show whole","roadmap":[],"mergedAt":"2026-10-10T07:09:44Z"},{"n":352,"title":"fix(viewport): white lights and quieter plastics, so a filament keeps its hue on every face","roadmap":[],"mergedAt":"2026-10-10T06:44:55Z"},{"n":374,"title":"fix(app): bring the presets in use back without marking the plate unsaved","roadmap":[],"mergedAt":"2026-10-10T06:39:27Z"},{"n":373,"title":"ci: run the MCP tests that slice with the real sx","roadmap":[],"mergedAt":"2026-10-10T06:34:40Z"},{"n":372,"title":"ci: keep node_modules between runs on the GPU lane","roadmap":[],"mergedAt":"2026-10-10T06:29:55Z"},{"n":345,"title":"feat(geom): flat faces filled again with well shaped triangles","roadmap":[],"mergedAt":"2026-10-10T06:21:19Z"},{"n":359,"title":"fix(ui): a toast with a button waits while it is hovered or focused","roadmap":[],"mergedAt":"2026-10-10T06:17:26Z"},{"n":368,"title":"test(devkit): wait for the drawn plate before the headless browser screenshots","roadmap":[],"mergedAt":"2026-10-10T06:10:48Z"},{"n":358,"title":"feat: partner app keys for apps that work with SlicerX's printer bridge","roadmap":[],"mergedAt":"2026-10-10T06:06:42Z"},{"n":362,"title":"feat(core): sx plans sleipnir layers when a request turns smart_layer on and sends none","roadmap":[],"mergedAt":"2026-10-10T06:00:53Z"},{"n":356,"title":"feat(app): the right pane stays shut and glows when it wants a look; long names stay on one line","roadmap":[],"mergedAt":"2026-10-10T06:00:53Z"},{"n":371,"title":"ci: list the fit-check unsaved-work test as flaky on the GPU lane","roadmap":[],"mergedAt":"2026-10-10T05:42:33Z"},{"n":357,"title":"test(web): trace where fit-check's Mod+O goes when it opens no dialog","roadmap":[],"mergedAt":"2026-10-10T04:50:36Z"},{"n":360,"title":"perf(core): painted layers share one cut of each neighbor","roadmap":[],"mergedAt":"2026-10-10T04:16:28Z"},{"n":354,"title":"ci: list the fit-check starter test as flaky on the GPU lane","roadmap":[],"mergedAt":"2026-10-10T03:21:11Z"},{"n":349,"title":"test(mcp): hold the A1 print-by-object tests to its 73 mm radius","roadmap":[],"mergedAt":"2026-10-10T02:51:12Z"},{"n":344,"title":"mcp: slice with the SlicerX default process when none is named","roadmap":[],"mergedAt":"2026-10-10T02:51:12Z"},{"n":350,"title":"feat(viewport): the reveal's trace moves like a mass on a track, and a softer bloom","roadmap":[],"mergedAt":"2026-10-10T02:34:02Z"},{"n":340,"title":"feat(app): reshape the Slice sidebar: pinned printer row, objects in the right pane, Simple without scrolling","roadmap":[],"mergedAt":"2026-10-10T02:15:03Z"},{"n":348,"title":"fix(core): painted tops and bottoms color the shell layers beyond them","roadmap":[],"mergedAt":"2026-10-10T02:04:13Z"},{"n":341,"title":"perf(core): work each object's footprint out once, side by side","roadmap":[],"mergedAt":"2026-10-10T01:45:52Z"},{"n":338,"title":"feat(viewport): a near-black silhouette round Model's parts in the CAD look","roadmap":[],"mergedAt":"2026-10-10T01:44:31Z"},{"n":324,"title":"fix(app): a plain 3MF keeps its objects' heights, and touching objects open as one object with parts","roadmap":[],"mergedAt":"2026-10-10T01:37:28Z"},{"n":347,"title":"perf(app): time where a slice's time goes, up to its preview drawn","roadmap":[],"mergedAt":"2026-10-10T01:30:42Z"},{"n":346,"title":"ci: run the rust job in a duplicate pull request run too","roadmap":[],"mergedAt":"2026-10-10T01:27:33Z"},{"n":339,"title":"test(e2e): record frames from a page that is already still","roadmap":[],"mergedAt":"2026-10-10T01:05:37Z"},{"n":343,"title":"fix(mcp): report plate collisions as collision, with the objects and layers","roadmap":[],"mergedAt":"2026-10-10T01:00:36Z"},{"n":342,"title":"ci: never replace a remote's heavy.sh with the tested commit's copy","roadmap":[],"mergedAt":"2026-10-10T00:53:01Z"},{"n":337,"title":"feat(models): the showcase X is modeled with SlicerX's CAD tools","roadmap":[],"mergedAt":"2026-10-10T00:12:53Z"},{"n":336,"title":"fix(cad): the geometry worker no longer loads the tool panels","roadmap":[],"mergedAt":"2026-10-10T00:08:20Z"},{"n":332,"title":"perf(app): check a mesh for crossing faces after the slice and the fit check","roadmap":[],"mergedAt":"2026-10-10T00:01:21Z"},{"n":311,"title":"feat(viewport): a model added to the plate fades in beside the others","roadmap":[],"mergedAt":"2026-10-09T23:35:06Z"},{"n":314,"title":"perf(app): hold a big auto slice until the open and the fit check are done","roadmap":[],"mergedAt":"2026-10-09T23:15:46Z"},{"n":320,"title":"feat(app): the loading wait in two phases, ravens before the first frame and a wisp after it","roadmap":[],"mergedAt":"2026-10-09T23:12:21Z"},{"n":330,"title":"perf(preview): less kept in the page after a slice","roadmap":[],"mergedAt":"2026-10-09T23:06:47Z"},{"n":319,"title":"test(e2e): list plate-reveal's reduced-motion test while its fix lands","roadmap":[],"mergedAt":"2026-10-09T23:02:21Z"},{"n":316,"title":"feat(models): a showcase X with exact faces, and sample:x-mark serves it","roadmap":[],"mergedAt":"2026-10-09T23:02:22Z"},{"n":327,"title":"perf: hand a slice's preview to the page without a copy","roadmap":[],"mergedAt":"2026-10-09T22:42:49Z"},{"n":315,"title":"perf(app): bring the import's meshes back from the engine raw","roadmap":[],"mergedAt":"2026-10-09T22:21:27Z"},{"n":313,"title":"perf(geom): hash the mesh code's lookup maps with a fast hasher","roadmap":[],"mergedAt":"2026-10-09T22:21:27Z"},{"n":321,"title":"ci: never cancel a merge queue run","roadmap":[],"mergedAt":"2026-10-09T22:06:35Z"},{"n":328,"title":"ci: run cargo-deny from its pinned release, not a Docker action","roadmap":[],"mergedAt":"2026-10-09T21:47:55Z"},{"n":310,"title":"feat(viewport): the plate reveal plays in Model too, on its first open and for a new job","roadmap":[],"mergedAt":"2026-10-09T20:49:08Z"},{"n":312,"title":"docs(core): cut the api changelog into 0.1.0, 0.1.1 and 0.1.2","roadmap":[],"mergedAt":"2026-10-09T20:15:37Z"},{"n":307,"title":"perf(app): slice a shown STL while the engine's import still runs","roadmap":[],"mergedAt":"2026-10-09T20:06:46Z"},{"n":306,"title":"perf(viewport): keep paint as its texts and build its overlay in one pass","roadmap":[],"mergedAt":"2026-10-09T20:06:46Z"},{"n":300,"title":"ci: skip a pull request's duplicate run instead of cancelling it","roadmap":[],"mergedAt":"2026-10-09T19:38:44Z"},{"n":299,"title":"fix(app): opening a model over another keeps the old scene until the new one draws","roadmap":[],"mergedAt":"2026-10-09T19:34:09Z"},{"n":301,"title":"chore(engine): 0.1.2","roadmap":[],"mergedAt":"2026-10-09T19:26:55Z"},{"n":289,"title":"perf(geom): weld exactly equal corners with one lookup each","roadmap":[],"mergedAt":"2026-10-09T19:22:58Z"},{"n":297,"title":"fix(app): a model the engine splits keeps its pieces in place, so nothing moves after it shows","roadmap":[],"mergedAt":"2026-10-09T19:16:41Z"},{"n":295,"title":"perf(app): import an STL from the mesh the page read","roadmap":[],"mergedAt":"2026-10-09T19:09:03Z"},{"n":298,"title":"fix(mcp): center a project's plate on the bed with room for a skirt","roadmap":[],"mergedAt":"2026-10-09T19:03:22Z"},{"n":296,"title":"fix(viewport): a more visible bed grid","roadmap":[],"mergedAt":"2026-10-09T18:58:41Z"},{"n":287,"title":"feat(viewport): Model draws parts in a CAD look, a neutral gray with dark feature edges","roadmap":[],"mergedAt":"2026-10-09T18:51:34Z"},{"n":294,"title":"test(e2e): say why fit-check's Open shortcut opened no dialog","roadmap":[],"mergedAt":"2026-10-09T18:13:57Z"},{"n":292,"title":"test(e2e): list fit-check's drag test, whose Open shortcut sometimes misses","roadmap":[],"mergedAt":"2026-10-09T18:07:25Z"},{"n":290,"title":"perf(viewport): measure how the view's start splits up","roadmap":[],"mergedAt":"2026-10-09T17:53:02Z"},{"n":288,"title":"feat(app): every number in a modeling tool reads named values, in the body font","roadmap":[],"mergedAt":"2026-10-09T17:35:47Z"},{"n":275,"title":"perf(app): check a mesh file for faces that cross after the model shows","roadmap":[],"mergedAt":"2026-10-09T17:20:37Z"},{"n":285,"title":"fix(app): say when the geometry engine does not load","roadmap":[],"mergedAt":"2026-10-09T17:00:35Z"},{"n":284,"title":"test(e2e): wait for the camera move in the brim ears test","roadmap":[],"mergedAt":"2026-10-09T16:51:36Z"},{"n":282,"title":"fix(app): ask again for the 3D view's context before falling back to 2D","roadmap":[],"mergedAt":"2026-10-09T16:45:41Z"},{"n":283,"title":"test(e2e): take model-tree and model-box off the flaky list","roadmap":[],"mergedAt":"2026-10-09T16:40:34Z"},{"n":281,"title":"ci: wait for a working GPU context before the GPU lane's tests","roadmap":[],"mergedAt":"2026-10-09T16:36:48Z"},{"n":273,"title":"feat(app): one footer for every modeling tool: Cancel, Apply and Apply and repeat","roadmap":[],"mergedAt":"2026-10-09T16:31:33Z"},{"n":280,"title":"build(desktop): build the geometry engine into every bridge build","roadmap":[],"mergedAt":"2026-10-09T16:04:43Z"},{"n":278,"title":"fix(app): start every fresh plate with sleipnir on","roadmap":[],"mergedAt":"2026-10-09T15:50:00Z"},{"n":276,"title":"feat(bridge): report what the geometry engine has answered","roadmap":[],"mergedAt":"2026-10-09T15:46:52Z"},{"n":274,"title":"ci: never fail the e2e result over its report download","roadmap":[],"mergedAt":"2026-10-09T15:34:51Z"},{"n":272,"title":"test(e2e): read model-box's points once the top view has stopped","roadmap":[],"mergedAt":"2026-10-09T15:25:54Z"},{"n":271,"title":"fix(ui): leave focus where it went after a context menu closes","roadmap":[],"mergedAt":"2026-10-09T15:25:54Z"},{"n":270,"title":"perf(geom): send meshes to the geometry engine as raw binary, and end big idle workers","roadmap":[],"mergedAt":"2026-10-09T15:07:12Z"},{"n":269,"title":"test(e2e): list three Model specs that pass only on a retry","roadmap":[],"mergedAt":"2026-10-09T15:01:37Z"},{"n":261,"title":"fix(desktop): a desktop build with no backend starts signed out","roadmap":[],"mergedAt":"2026-10-09T14:57:00Z"},{"n":265,"title":"perf(geom): fit check in seconds on parts of millions of triangles, same results","roadmap":[],"mergedAt":"2026-10-09T14:51:42Z"},{"n":260,"title":"fix(core): refuse a malformed 3MF or STL instead of guessing","roadmap":[],"mergedAt":"2026-10-09T14:38:20Z"},{"n":263,"title":"perf(app): show a binary STL from its own triangles while the engine imports it","roadmap":[],"mergedAt":"2026-10-09T14:25:40Z"},{"n":262,"title":"ci: keep hardware WebGL up when the GPU lane's browsers start at once","roadmap":[],"mergedAt":"2026-10-09T14:18:41Z"},{"n":258,"title":"perf(app): autosave only a project with changes since it was opened or saved","roadmap":[],"mergedAt":"2026-10-09T14:11:44Z"},{"n":251,"title":"perf: open big projects without holding the page or the window","roadmap":[],"mergedAt":"2026-10-09T13:54:13Z"},{"n":257,"title":"build(wasm): inline #[inline] functions up to a cost of 60, and the budget back to 1040 KB","roadmap":[],"mergedAt":"2026-10-09T13:50:32Z"},{"n":229,"title":"ci: run every Rust test in the merge queue","roadmap":[],"mergedAt":"2026-10-09T13:28:46Z"},{"n":256,"title":"test(app): open a Bambu Studio project's -1 values on its own printer","roadmap":[],"mergedAt":"2026-10-09T13:25:44Z"},{"n":252,"title":"feat(app): Model's inspector folds Transform under a tool and shows a multi-selection","roadmap":[],"mergedAt":"2026-10-09T13:22:32Z"},{"n":254,"title":"docs: Bambu Studio is the reference for Bambu printers where it and Orca differ","roadmap":[],"mergedAt":"2026-10-09T13:17:22Z"},{"n":253,"title":"ci: run the drawing and pointer e2e specs on the project's GPU runner","roadmap":[],"mergedAt":"2026-10-09T13:14:15Z"},{"n":216,"title":"perf(app): slice soon after an edit, and once per drag","roadmap":[],"mergedAt":"2026-10-09T13:09:42Z"},{"n":157,"title":"feat(viewport): reveal the plate on a window's first load","roadmap":[],"mergedAt":"2026-10-09T13:06:23Z"},{"n":249,"title":"fix(core): scale a 3MF's paint to millimeters with its positions","roadmap":[],"mergedAt":"2026-10-09T12:59:02Z"},{"n":248,"title":"fix(core): map tied H2D filaments as Bambu Studio does","roadmap":[],"mergedAt":"2026-10-09T12:55:17Z"},{"n":222,"title":"test(app): a saved goal and Simple-mode settings leave an opened project's process alone","roadmap":[],"mergedAt":"2026-10-09T12:51:15Z"},{"n":247,"title":"feat(app): a machine card with printer, nozzle and plate type chips","roadmap":[],"mergedAt":"2026-10-09T10:44:22Z"},{"n":243,"title":"test(web): turn on the debug hooks in the Tab focus spec, which reads the store","roadmap":[],"mergedAt":"2026-10-09T10:38:27Z"},{"n":244,"title":"perf(web): split a plate with few layers into fewer layer ranges","roadmap":[],"mergedAt":"2026-10-09T10:33:30Z"},{"n":242,"title":"feat(app): pick faces and edges in Model, with a selection pill, then open a tool on them","roadmap":[],"mergedAt":"2026-10-09T10:28:32Z"},{"n":236,"title":"perf(core): drop the specks where painted colors meet, and cut painted layers once","roadmap":[],"mergedAt":"2026-10-09T10:25:01Z"},{"n":205,"title":"feat(app): Huginn and Muninn through the longer waits","roadmap":[],"mergedAt":"2026-10-09T10:20:07Z"},{"n":241,"title":"test(web): open the phone sheet in the mode chip and plain words shots","roadmap":[],"mergedAt":"2026-10-09T10:11:36Z"},{"n":239,"title":"test(core): let the height range test allow 77 mm/s outer wall stretches off its range","roadmap":[],"mergedAt":"2026-10-09T10:07:58Z"},{"n":237,"title":"feat(app): type to filter the Model tree, and a rollback row to drag through history","roadmap":[],"mergedAt":"2026-10-09T10:03:46Z"},{"n":226,"title":"fix(core): map filaments to the H2D's extruders as OrcaSlicer does","roadmap":[],"mergedAt":"2026-10-09T10:00:19Z"},{"n":233,"title":"fix(app): Tab switches the view only while the 3D view has focus","roadmap":[],"mergedAt":"2026-10-09T09:48:14Z"},{"n":231,"title":"feat(app): a lighter Model shelf in four groups, with a next slot for the pick","roadmap":[],"mergedAt":"2026-10-09T09:47:17Z"},{"n":228,"title":"test(web): reach folded tabs through More and open the Slice sheet on a phone","roadmap":[],"mergedAt":"2026-10-09T09:41:51Z"},{"n":227,"title":"test(core): follow the nozzle through the whole file when measuring one layer","roadmap":[],"mergedAt":"2026-10-09T09:36:42Z"},{"n":223,"title":"fix(app): set a project object a hair under the bed down on it","roadmap":[],"mergedAt":"2026-10-09T09:36:12Z"},{"n":213,"title":"feat(app): menus for the Model tree's objects and steps, with rename","roadmap":[],"mergedAt":"2026-10-09T09:29:08Z"},{"n":210,"title":"feat(desktop): show a desktop slice's real progress","roadmap":[],"mergedAt":"2026-10-09T09:27:38Z"},{"n":221,"title":"feat(app): Shift and drag box select in Model","roadmap":[],"mergedAt":"2026-10-09T09:21:45Z"},{"n":217,"title":"fix(app): clear paint on the parts repair, simplify, hollow, subtract and text rebuild","roadmap":[],"mergedAt":"2026-10-09T08:44:39Z"},{"n":214,"title":"ci: split the hosted phone e2e into four shards","roadmap":[],"mergedAt":"2026-10-09T08:30:41Z"},{"n":199,"title":"fix(app): give the Sliced plate card's warnings their own line","roadmap":[],"mergedAt":"2026-10-09T08:30:25Z"},{"n":195,"title":"fix(core): check whole moves against excluded bed areas, not their ends","roadmap":[],"mergedAt":"2026-10-09T08:24:10Z"},{"n":209,"title":"fix(core): keep paint in the raw parts format, so every web worker slices with it","roadmap":[],"mergedAt":"2026-10-09T08:14:42Z"},{"n":206,"title":"feat(app): calm rows in the Model tree, with a More menu and keyboard navigation","roadmap":[],"mergedAt":"2026-10-09T08:09:47Z"},{"n":208,"title":"ci: list the seam paint test as flaky","roadmap":[],"mergedAt":"2026-10-09T08:09:47Z"},{"n":204,"title":"fix(core): give an extruder that prints nothing no first filament","roadmap":[],"mergedAt":"2026-10-09T08:04:45Z"},{"n":203,"title":"test(bench): compare painted colors with OrcaSlicer and Bambu Studio","roadmap":[],"mergedAt":"2026-10-09T08:04:45Z"},{"n":191,"title":"test: Model never shows the slice, in e2e and the release gate","roadmap":[],"mergedAt":"2026-10-09T07:59:28Z"},{"n":190,"title":"test(web): wait for the slice in Slice in the heimdall print sequence spec","roadmap":[],"mergedAt":"2026-10-09T07:59:28Z"},{"n":176,"title":"perf(web): load the slicer pool beside the startup shell, not in it","roadmap":[],"mergedAt":"2026-10-09T07:53:18Z"},{"n":188,"title":"perf(app): slice painted objects from their parts and paint, without writing a 3MF","roadmap":[],"mergedAt":"2026-10-09T07:45:51Z"},{"n":202,"title":"build(wasm): raise the engine module's budget from 1040 to 1044 KB gzip","roadmap":[],"mergedAt":"2026-10-09T07:45:27Z"},{"n":201,"title":"test(web): bring two specs up to the single Slice view and the phone legend","roadmap":[],"mergedAt":"2026-10-09T07:38:25Z"},{"n":200,"title":"feat(app): phone sheets for Model's and Slice's panes, opened from their edge tabs","roadmap":[],"mergedAt":"2026-10-09T07:38:25Z"},{"n":197,"title":"feat(app): set the settings mode from a chip in the Slice pane title","roadmap":[],"mergedAt":"2026-10-09T07:22:23Z"},{"n":193,"title":"fix(app): release finished slices once nothing holds them","roadmap":[],"mergedAt":"2026-10-09T07:02:56Z"}],"ci":{"running":3,"queued":0},"runners":[{"kind":"windows","online":2,"busy":0},{"kind":"linux","online":2,"busy":0}],"machines":[{"kind":"mac","busy":true,"jobs":1},{"kind":"windows","busy":false,"jobs":0}],"events":[{"t":"2026-10-10T20:05:31.583Z","kind":"passed","n":370,"text":"All checks passed on #370"},{"t":"2026-10-10T20:05:11.918Z","kind":"runner","machine":"windows","busy":false,"text":"A Windows runner finished a job"},{"t":"2026-10-10T20:05:08.664Z","kind":"machine","machine":"windows","busy":false,"text":"A Windows machine is idle again"},{"t":"2026-10-10T20:03:13.935Z","kind":"machine","machine":"windows","busy":true,"text":"A Windows machine started a test"},{"t":"2026-10-10T20:02:56.856Z","kind":"runner","machine":"windows","busy":true,"text":"A Windows runner picked up a job"},{"t":"2026-10-10T19:59:58Z","kind":"merged","n":471,"text":"#471 merged"},{"t":"2026-10-10T20:00:11.863Z","kind":"runner","machine":"windows","busy":false,"text":"A Windows runner finished a job"},{"t":"2026-10-10T20:00:03.137Z","kind":"machine","machine":"windows","busy":false,"text":"A Windows machine is idle again"},{"t":"2026-10-10T19:58:22.276Z","kind":"machine","machine":"windows","busy":true,"text":"A Windows machine started a test"},{"t":"2026-10-10T19:57:56.808Z","kind":"runner","machine":"windows","busy":true,"text":"A Windows runner picked up a job"},{"t":"2026-10-10T19:54:01Z","kind":"merged","n":406,"text":"#406 merged"},{"t":"2026-10-10T19:48:04Z","kind":"merged","n":482,"text":"#482 merged"},{"t":"2026-10-10T19:42:39Z","kind":"merged","n":479,"text":"#479 merged"},{"t":"2026-10-10T19:00:10Z","kind":"merged","n":462,"text":"#462 merged"},{"t":"2026-10-10T19:00:10Z","kind":"merged","n":463,"text":"#463 merged"},{"t":"2026-10-10T18:25:45Z","kind":"merged","n":459,"text":"#459 merged"},{"t":"2026-10-10T18:23:59Z","kind":"merged","n":444,"text":"#444 merged"},{"t":"2026-10-10T18:09:43Z","kind":"merged","n":453,"text":"#453 merged"},{"t":"2026-10-10T17:58:51Z","kind":"merged","n":443,"text":"#443 merged"},{"t":"2026-10-10T17:58:17Z","kind":"merged","n":464,"text":"#464 merged"},{"t":"2026-10-10T17:36:06Z","kind":"merged","n":405,"text":"#405 merged"},{"t":"2026-10-10T17:35:31Z","kind":"merged","n":465,"text":"#465 merged"},{"t":"2026-10-10T17:17:44Z","kind":"merged","n":455,"text":"#455 merged"},{"t":"2026-10-10T17:07:56Z","kind":"merged","n":458,"text":"#458 merged"},{"t":"2026-10-10T16:42:24Z","kind":"merged","n":447,"text":"#447 merged"},{"t":"2026-10-10T16:28:41Z","kind":"merged","n":440,"text":"#440 merged"},{"t":"2026-10-10T16:28:41Z","kind":"merged","n":452,"text":"#452 merged"},{"t":"2026-10-10T16:06:53Z","kind":"merged","n":441,"text":"#441 merged"},{"t":"2026-10-10T15:57:27Z","kind":"merged","n":391,"text":"#391 merged"},{"t":"2026-10-10T15:55:12Z","kind":"merged","n":454,"text":"#454 merged"},{"t":"2026-10-10T15:44:44Z","kind":"merged","n":451,"text":"#451 merged"},{"t":"2026-10-10T15:22:50Z","kind":"merged","n":437,"text":"#437 merged"},{"t":"2026-10-10T15:21:12Z","kind":"merged","n":427,"text":"#427 merged"},{"t":"2026-10-10T15:10:15Z","kind":"merged","n":424,"text":"#424 merged"},{"t":"2026-10-10T15:08:16Z","kind":"merged","n":450,"text":"#450 merged"},{"t":"2026-10-10T14:17:05Z","kind":"merged","n":409,"text":"#409 merged"},{"t":"2026-10-10T14:16:30Z","kind":"merged","n":432,"text":"#432 merged"},{"t":"2026-10-10T13:27:57Z","kind":"merged","n":431,"text":"#431 merged"},{"t":"2026-10-10T13:26:12Z","kind":"merged","n":430,"text":"#430 merged"},{"t":"2026-10-10T13:08:32Z","kind":"merged","n":394,"text":"#394 merged"},{"t":"2026-10-10T12:42:09Z","kind":"merged","n":417,"text":"#417 merged"},{"t":"2026-10-10T12:41:00Z","kind":"merged","n":418,"text":"#418 merged"},{"t":"2026-10-10T12:24:17Z","kind":"merged","n":419,"text":"#419 merged"},{"t":"2026-10-10T12:19:09Z","kind":"merged","n":415,"text":"#415 merged"},{"t":"2026-10-10T12:11:44Z","kind":"merged","n":402,"text":"#402 merged"},{"t":"2026-10-10T12:06:37Z","kind":"merged","n":398,"text":"#398 merged"},{"t":"2026-10-10T11:56:54Z","kind":"merged","n":400,"text":"#400 merged"},{"t":"2026-10-10T11:51:45Z","kind":"merged","n":401,"text":"#401 merged"},{"t":"2026-10-10T11:45:05Z","kind":"merged","n":397,"text":"#397 merged"},{"t":"2026-10-10T11:39:48Z","kind":"merged","n":389,"text":"#389 merged"}]}