{"ref":"refs/heads/main","before":"3748495c72da950d7a69419d3d338b3bfacbf530","after":"5bb723380430bf5e0ba7d6a5a350bcd2603b4666","repository":{"id":758965894,"node_id":"R_kgDOLTzmhg","name":"FreeCAD","full_name":"ilf-S/FreeCAD","private":false,"owner":{"name":"ilf-S","email":"ilf-S@users.noreply.github.com","login":"ilf-S","id":1728511,"node_id":"MDQ6VXNlcjE3Mjg1MTE=","avatar_url":"https://avatars.githubusercontent.com/u/1728511?v=4","gravatar_id":"","url":"https://api.github.com/users/ilf-S","html_url":"https://github.com/ilf-S","followers_url":"https://api.github.com/users/ilf-S/followers","following_url":"https://api.github.com/users/ilf-S/following{/other_user}","gists_url":"https://api.github.com/users/ilf-S/gists{/gist_id}","starred_url":"https://api.github.com/users/ilf-S/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ilf-S/subscriptions","organizations_url":"https://api.github.com/users/ilf-S/orgs","repos_url":"https://api.github.com/users/ilf-S/repos","events_url":"https://api.github.com/users/ilf-S/events{/privacy}","received_events_url":"https://api.github.com/users/ilf-S/received_events","type":"User","user_view_type":"public","site_admin":false},"html_url":"https://github.com/ilf-S/FreeCAD","description":"This is the official source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler.","fork":true,"url":"https://api.github.com/repos/ilf-S/FreeCAD","forks_url":"https://api.github.com/repos/ilf-S/FreeCAD/forks","keys_url":"https://api.github.com/repos/ilf-S/FreeCAD/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ilf-S/FreeCAD/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ilf-S/FreeCAD/teams","hooks_url":"https://api.github.com/repos/ilf-S/FreeCAD/hooks","issue_events_url":"https://api.github.com/repos/ilf-S/FreeCAD/issues/events{/number}","events_url":"https://api.github.com/repos/ilf-S/FreeCAD/events","assignees_url":"https://api.github.com/repos/ilf-S/FreeCAD/assignees{/user}","branches_url":"https://api.github.com/repos/ilf-S/FreeCAD/branches{/branch}","tags_url":"https://api.github.com/repos/ilf-S/FreeCAD/tags","blobs_url":"https://api.github.com/repos/ilf-S/FreeCAD/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ilf-S/FreeCAD/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ilf-S/FreeCAD/git/refs{/sha}","trees_url":"https://api.github.com/repos/ilf-S/FreeCAD/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ilf-S/FreeCAD/statuses/{sha}","languages_url":"https://api.github.com/repos/ilf-S/FreeCAD/languages","stargazers_url":"https://api.github.com/repos/ilf-S/FreeCAD/stargazers","contributors_url":"https://api.github.com/repos/ilf-S/FreeCAD/contributors","subscribers_url":"https://api.github.com/repos/ilf-S/FreeCAD/subscribers","subscription_url":"https://api.github.com/repos/ilf-S/FreeCAD/subscription","commits_url":"https://api.github.com/repos/ilf-S/FreeCAD/commits{/sha}","git_commits_url":"https://api.github.com/repos/ilf-S/FreeCAD/git/commits{/sha}","comments_url":"https://api.github.com/repos/ilf-S/FreeCAD/comments{/number}","issue_comment_url":"https://api.github.com/repos/ilf-S/FreeCAD/issues/comments{/number}","contents_url":"https://api.github.com/repos/ilf-S/FreeCAD/contents/{+path}","compare_url":"https://api.github.com/repos/ilf-S/FreeCAD/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ilf-S/FreeCAD/merges","archive_url":"https://api.github.com/repos/ilf-S/FreeCAD/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ilf-S/FreeCAD/downloads","issues_url":"https://api.github.com/repos/ilf-S/FreeCAD/issues{/number}","pulls_url":"https://api.github.com/repos/ilf-S/FreeCAD/pulls{/number}","milestones_url":"https://api.github.com/repos/ilf-S/FreeCAD/milestones{/number}","notifications_url":"https://api.github.com/repos/ilf-S/FreeCAD/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ilf-S/FreeCAD/labels{/name}","releases_url":"https://api.github.com/repos/ilf-S/FreeCAD/releases{/id}","deployments_url":"https://api.github.com/repos/ilf-S/FreeCAD/deployments","created_at":1708184682,"updated_at":"2026-08-19T01:07:25Z","pushed_at":1787188042,"git_url":"git://github.com/ilf-S/FreeCAD.git","ssh_url":"git@github.com:ilf-S/FreeCAD.git","clone_url":"https://github.com/ilf-S/FreeCAD.git","svn_url":"https://github.com/ilf-S/FreeCAD","homepage":"https://www.freecad.org","size":2727904,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":{"key":"lgpl-2.1","name":"GNU Lesser General Public License v2.1","spdx_id":"LGPL-2.1","url":"https://api.github.com/licenses/lgpl-2.1","node_id":"MDc6TGljZW5zZTEx"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"has_pull_requests":true,"pull_request_creation_policy":"all","topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"main","stargazers":0,"master_branch":"main"},"pusher":{"name":"github-actions[bot]","email":null},"forced":false,"sender":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"created":false,"deleted":false,"base_ref":null,"compare":"https://github.com/ilf-S/FreeCAD/compare/3748495c72da...5bb723380430","commits":[{"id":"30264136b7f0ff10582519f0846ceb8e3d405061","tree_id":"2a6cbdf57cd712a3472f70fbc6dd35e396355f4b","distinct":true,"message":"CAM: Sync tool presets from the library into embedded Job tools\n\nPresets added or edited to a tool in the library don't update tools in a\njob that already had that tool embedded - there was no way to pull\nupdates in, only delete and re-add the tool.\n\nThis PR adds ability to sync tool presets from the library into embedded\njob tools.\n\nMatching is by ToolBitID only, If a tool doesn't match anything in the\nlibrary it just gets flagged, nothing gets touched.\n\nTwo ways to trigger it: right-click a Job and choose \"Sync Tool Presets\nfrom Library\", or it'll prompt you (default no) when opening a document\nthat has stale presets waiting.\n\nIt will warn about orphaned tools (tools that don't match anything in\nthe library) only if other tools are being updated when opening a\ndocument and always warn when syncing from the right-click menu context.\n\nAlso added a notes field to presets since the Presets tab already had a\nNotes column that never actually did anything.\n\nMade preset name a required field, it, combined with material and operation\ntype are used as a unique key for matching existing presets.\n\nMade presets sortable\n\nAdded ability to copy a existing preset.","timestamp":"2026-08-14T21:15:28-04:00","url":"https://github.com/ilf-S/FreeCAD/commit/30264136b7f0ff10582519f0846ceb8e3d405061","author":{"name":"Billy Huddleston","email":"billy@ivdc.com","date":"2026-07-12T03:21:54-04:00","username":"Connor9220"},"committer":{"name":"Billy Huddleston","email":"billy@ivdc.com","date":"2026-08-14T21:15:28-04:00","username":"Connor9220"},"added":["src/Mod/CAM/CAMTests/TestFeedsSpeedsLibrarySync.py","src/Mod/CAM/Gui/Resources/icons/CAM_SyncTools.svg","src/Mod/CAM/Path/Tool/FeedsSpeeds/library_sync.py","src/Mod/CAM/Path/Tool/Gui/LibrarySyncDialog.py"],"removed":[],"modified":["src/Mod/CAM/CAMTests/TestFeedsSpeedsToolController.py","src/Mod/CAM/CMakeLists.txt","src/Mod/CAM/Gui/Resources/Path.qrc","src/Mod/CAM/Gui/Resources/panels/FeedsSpeedsPresetEdit.ui","src/Mod/CAM/Path/Main/Gui/Job.py","src/Mod/CAM/Path/Tool/FeedsSpeeds/__init__.py","src/Mod/CAM/Path/Tool/FeedsSpeeds/presets.py","src/Mod/CAM/Path/Tool/toolbit/ui/presets_tab.py","src/Mod/CAM/Roadmap/Epics/FeedsAndSpeeds.md"]},{"id":"e82f4f52c36ab7ed570a0f9d7faead5e7dbbd30d","tree_id":"f225309f7314e020f396c88b1d6fd1da2b85c173","distinct":true,"message":"WIP: CAM: unify tool preset + geometry updates from library\n\nRenames the presets-only \"Sync\" flow to \"Update\" throughout, adds\nper-tool checkboxes to the review dialog, and adds a new, separate\nToolBit geometry update (Diameter/Length/CuttingEdgeHeight/etc, for\nregrinds) alongside the existing Presets update. Both checks now share\none combined dialog and one context-menu command, used for both the\nmanual trigger and the passive load-time prompt (gated by a new CAM\nPreferences toggle).\n\nAlong the way, fixed two real bugs surfaced by the new geometry code:\nDetachedDocumentObject was missing getDocumentationOfProperty, and the\nlibrary-side geometry fetch used depth=0, which builds a placeholder\nshape from the tool's own JSON only and never resolves the shape file's\nown defaults - silently missing custom, shape-file-default-only\nproperties, and failing outright for builtin shapes since depth=0 only\nsearches the local store. Now requests depth=1 and searches (local,\nbuiltin). Also added a ShapeType-mismatch guard so a tool whose shape\nclass differs from its library match is never diffed property-by-property.\n\nOpen/unresolved: whether to add a third row-kind for normalizing a\ntool's legacy ShapeID (e.g. \"torus\") to its canonical alias\n(\"Bullnose\") - flagged but not designed or built yet; must account for\nthe alias-vs-subtype distinction in shape_aliases.json.","timestamp":"2026-08-14T21:15:53-04:00","url":"https://github.com/ilf-S/FreeCAD/commit/e82f4f52c36ab7ed570a0f9d7faead5e7dbbd30d","author":{"name":"Billy Huddleston","email":"billy@ivdc.com","date":"2026-07-13T21:48:32-04:00","username":"Connor9220"},"committer":{"name":"Billy Huddleston","email":"billy@ivdc.com","date":"2026-08-14T21:15:53-04:00","username":"Connor9220"},"added":["src/Mod/CAM/CAMTests/TestUpdateDocumentTools.py","src/Mod/CAM/Gui/Resources/icons/CAM_UpdateDocumentTools.svg","src/Mod/CAM/Path/Tool/Gui/UpdateDocumentToolsDlg.py","src/Mod/CAM/Path/Tool/UpdateDocumentTools.py"],"removed":["src/Mod/CAM/CAMTests/TestFeedsSpeedsLibrarySync.py","src/Mod/CAM/Gui/Resources/icons/CAM_SyncTools.svg","src/Mod/CAM/Path/Tool/FeedsSpeeds/library_sync.py","src/Mod/CAM/Path/Tool/Gui/LibrarySyncDialog.py"],"modified":["src/Mod/CAM/CAMTests/TestFeedsSpeedsToolBitPresets.py","src/Mod/CAM/CMakeLists.txt","src/Mod/CAM/Gui/Resources/Path.qrc","src/Mod/CAM/Path/Main/Gui/Job.py","src/Mod/CAM/Path/Preferences.py","src/Mod/CAM/Path/Tool/FeedsSpeeds/__init__.py","src/Mod/CAM/Path/Tool/FeedsSpeeds/presets.py","src/Mod/CAM/Path/Tool/assets/ui/preferences.py","src/Mod/CAM/Path/Tool/docobject/models/docobject.py","src/Mod/CAM/Roadmap/Epics/FeedsAndSpeeds.md"]},{"id":"dc2ed9d58652535b86d9945f8b2c12795fe80c2f","tree_id":"34e84023248818b645d7170f2761c814be568a26","distinct":true,"message":"Merge pull request #31300 from Connor9220/FeedsAndSpeedsSync\n\nCAM: Sync tool presets from the library into embedded Job tools","timestamp":"2026-08-18T22:12:44-05:00","url":"https://github.com/ilf-S/FreeCAD/commit/dc2ed9d58652535b86d9945f8b2c12795fe80c2f","author":{"name":"sliptonic","email":"shopinthewoods@gmail.com","date":"2026-08-18T22:12:44-05:00","username":"sliptonic"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-08-18T22:12:44-05:00","username":"web-flow"},"added":["src/Mod/CAM/CAMTests/TestUpdateDocumentTools.py","src/Mod/CAM/Gui/Resources/icons/CAM_UpdateDocumentTools.svg","src/Mod/CAM/Path/Tool/Gui/UpdateDocumentToolsDlg.py","src/Mod/CAM/Path/Tool/UpdateDocumentTools.py"],"removed":[],"modified":["src/Mod/CAM/CAMTests/TestFeedsSpeedsToolBitPresets.py","src/Mod/CAM/CAMTests/TestFeedsSpeedsToolController.py","src/Mod/CAM/CMakeLists.txt","src/Mod/CAM/Gui/Resources/Path.qrc","src/Mod/CAM/Gui/Resources/panels/FeedsSpeedsPresetEdit.ui","src/Mod/CAM/Path/Main/Gui/Job.py","src/Mod/CAM/Path/Preferences.py","src/Mod/CAM/Path/Tool/FeedsSpeeds/__init__.py","src/Mod/CAM/Path/Tool/FeedsSpeeds/presets.py","src/Mod/CAM/Path/Tool/assets/ui/preferences.py","src/Mod/CAM/Path/Tool/docobject/models/docobject.py","src/Mod/CAM/Path/Tool/toolbit/ui/presets_tab.py","src/Mod/CAM/Roadmap/Epics/FeedsAndSpeeds.md"]},{"id":"3ec51da2cb0cb84a18edc96b2d63dbdbe118aaea","tree_id":"c0f704d63be0f0e3dca332609ed75b016bf0c3c4","distinct":true,"message":"Sketcher: Add Angle Constraint to Polygon (#31180)","timestamp":"2026-08-19T15:15:23Z","url":"https://github.com/ilf-S/FreeCAD/commit/3ec51da2cb0cb84a18edc96b2d63dbdbe118aaea","author":{"name":"matthiasdanner","email":"matthiasdanner@users.noreply.github.com","date":"2026-08-19T17:15:23+02:00","username":"matthiasdanner"},"committer":{"name":"GitHub","email":"noreply@github.com","date":"2026-08-19T15:15:23Z","username":"web-flow"},"added":[],"removed":[],"modified":["src/Mod/Sketcher/Gui/DrawSketchHandlerPolygon.h"]},{"id":"e81664be6634c92436dfced25532498e6bdc2c3d","tree_id":"329ec064d7ecdeb50e24f36abd1fb979a274bd53","distinct":true,"message":"Addon Manager: Update to 2026.8.18","timestamp":"2026-08-19T17:18:34+02:00","url":"https://github.com/ilf-S/FreeCAD/commit/e81664be6634c92436dfced25532498e6bdc2c3d","author":{"name":"Chris Hennes","email":"chennes@pioneerlibrarysystem.org","date":"2026-08-19T00:12:07-05:00","username":"chennes"},"committer":{"name":"Max Wilfinger","email":"6246609+maxwxyz@users.noreply.github.com","date":"2026-08-19T17:18:34+02:00","username":"maxwxyz"},"added":[],"removed":[],"modified":["src/Mod/AddonManager"]},{"id":"2bb00c91865d376c4ab0441a3a887b4f2d0a3090","tree_id":"52ab77f8d8ca6eea21ab4c7bd53ee03f35043460","distinct":true,"message":"Part: Anchor MidPlane on the true bisector for non-parallel faces\n\nAssisted-by: claude-opus-5","timestamp":"2026-08-20T01:20:55+02:00","url":"https://github.com/ilf-S/FreeCAD/commit/2bb00c91865d376c4ab0441a3a887b4f2d0a3090","author":{"name":"Max Wilfinger","email":"max@wilfinger.de","date":"2026-08-19T08:00:13+02:00","username":"maxwxyz"},"committer":{"name":"Kacper Donat","email":"kadet1090@gmail.com","date":"2026-08-20T01:20:55+02:00","username":"kadet1090"},"added":[],"removed":[],"modified":["src/Mod/Part/App/Attacher.cpp","src/Mod/Part/Gui/AttacherTexts.cpp","tests/src/Mod/Part/App/AttachExtension.cpp"]},{"id":"5bb723380430bf5e0ba7d6a5a350bcd2603b4666","tree_id":"558aac274adb2a9a2da51078e469e017a9c2a273","distinct":true,"message":"merge upstream (auto-resolve CI; keep packaging & our workflow) [skip ci]","timestamp":"2026-08-20T01:07:21Z","url":"https://github.com/ilf-S/FreeCAD/commit/5bb723380430bf5e0ba7d6a5a350bcd2603b4666","author":{"name":"ilf-S","email":"ilf-S@users.noreply.github.com","date":"2026-08-20T01:07:21Z","username":"ilf-S"},"committer":{"name":"ilf-S","email":"ilf-S@users.noreply.github.com","date":"2026-08-20T01:07:21Z","username":"ilf-S"},"added":["src/Mod/CAM/CAMTests/TestUpdateDocumentTools.py","src/Mod/CAM/Gui/Resources/icons/CAM_UpdateDocumentTools.svg","src/Mod/CAM/Path/Tool/Gui/UpdateDocumentToolsDlg.py","src/Mod/CAM/Path/Tool/UpdateDocumentTools.py"],"removed":[],"modified":["src/Mod/AddonManager","src/Mod/CAM/CAMTests/TestFeedsSpeedsToolBitPresets.py","src/Mod/CAM/CAMTests/TestFeedsSpeedsToolController.py","src/Mod/CAM/CMakeLists.txt","src/Mod/CAM/Gui/Resources/Path.qrc","src/Mod/CAM/Gui/Resources/panels/FeedsSpeedsPresetEdit.ui","src/Mod/CAM/Path/Main/Gui/Job.py","src/Mod/CAM/Path/Preferences.py","src/Mod/CAM/Path/Tool/FeedsSpeeds/__init__.py","src/Mod/CAM/Path/Tool/FeedsSpeeds/presets.py","src/Mod/CAM/Path/Tool/assets/ui/preferences.py","src/Mod/CAM/Path/Tool/docobject/models/docobject.py","src/Mod/CAM/Path/Tool/toolbit/ui/presets_tab.py","src/Mod/CAM/Roadmap/Epics/FeedsAndSpeeds.md","src/Mod/Part/App/Attacher.cpp","src/Mod/Part/Gui/AttacherTexts.cpp","src/Mod/Sketcher/Gui/DrawSketchHandlerPolygon.h","tests/src/Mod/Part/App/AttachExtension.cpp"]}],"head_commit":{"id":"5bb723380430bf5e0ba7d6a5a350bcd2603b4666","tree_id":"558aac274adb2a9a2da51078e469e017a9c2a273","distinct":true,"message":"merge upstream (auto-resolve CI; keep packaging & our workflow) [skip ci]","timestamp":"2026-08-20T01:07:21Z","url":"https://github.com/ilf-S/FreeCAD/commit/5bb723380430bf5e0ba7d6a5a350bcd2603b4666","author":{"name":"ilf-S","email":"ilf-S@users.noreply.github.com","date":"2026-08-20T01:07:21Z","username":"ilf-S"},"committer":{"name":"ilf-S","email":"ilf-S@users.noreply.github.com","date":"2026-08-20T01:07:21Z","username":"ilf-S"},"added":["src/Mod/CAM/CAMTests/TestUpdateDocumentTools.py","src/Mod/CAM/Gui/Resources/icons/CAM_UpdateDocumentTools.svg","src/Mod/CAM/Path/Tool/Gui/UpdateDocumentToolsDlg.py","src/Mod/CAM/Path/Tool/UpdateDocumentTools.py"],"removed":[],"modified":["src/Mod/AddonManager","src/Mod/CAM/CAMTests/TestFeedsSpeedsToolBitPresets.py","src/Mod/CAM/CAMTests/TestFeedsSpeedsToolController.py","src/Mod/CAM/CMakeLists.txt","src/Mod/CAM/Gui/Resources/Path.qrc","src/Mod/CAM/Gui/Resources/panels/FeedsSpeedsPresetEdit.ui","src/Mod/CAM/Path/Main/Gui/Job.py","src/Mod/CAM/Path/Preferences.py","src/Mod/CAM/Path/Tool/FeedsSpeeds/__init__.py","src/Mod/CAM/Path/Tool/FeedsSpeeds/presets.py","src/Mod/CAM/Path/Tool/assets/ui/preferences.py","src/Mod/CAM/Path/Tool/docobject/models/docobject.py","src/Mod/CAM/Path/Tool/toolbit/ui/presets_tab.py","src/Mod/CAM/Roadmap/Epics/FeedsAndSpeeds.md","src/Mod/Part/App/Attacher.cpp","src/Mod/Part/Gui/AttacherTexts.cpp","src/Mod/Sketcher/Gui/DrawSketchHandlerPolygon.h","tests/src/Mod/Part/App/AttachExtension.cpp"]}}