Wholesale copy of all Kindred Create additions that don't conflict with upstream FreeCAD code: - kindred-icons/ (1444 Catppuccin Mocha SVG icon overrides) - src/Mod/Create/ (Kindred Create workbench) - src/Gui/ Kindred source files (FileOrigin, OriginManager, OriginSelectorWidget, CommandOrigin, BreadcrumbToolBar, EditingContext) - src/Gui/Icons/ (Kindred branding and silo icons) - src/Gui/PreferencePacks/KindredCreate/ - src/Gui/Stylesheets/ (KindredCreate.qss, images_dark-light/) - package/ (rattler-build recipe) - docs/ (architecture, guides, specifications) - .gitea/ (CI workflows, issue templates) - mods/silo, mods/ztools submodules - .gitmodules (Kindred submodule URLs) - resources/ (kindred-create.desktop, kindred-create.xml) - banner-logo-light.png, CONTRIBUTING.md
5.7 KiB
Known Issues
Issues
Critical
-
QSS duplication.Resolved. The canonical QSS lives insrc/Gui/Stylesheets/KindredCreate.qss. The PreferencePacks copy is now generated at build time viaconfigure_file()insrc/Gui/PreferencePacks/CMakeLists.txt. The unusedresources/preferences/KindredCreate/directory has been removed. -
WorkbenchManipulator timing.Resolved. ZTools is no longer a workbench. Commands are registered via a deferredQTimer.singleShot(2000ms)inInitGui.py, which activates dependent workbenches first, then imports ZTools commands and installs the_ZToolsManipulator. TheEditingContextResolverhandles toolbar visibility based on editing context. -
Silo shortcut persistence.Resolved.Silo_ToggleModeremoved; file operations now delegate to the selected origin via the unified origin system.
High
-
Silo authentication not production-hardened. Local auth (bcrypt) works end-to-end. LDAP (FreeIPA) and OIDC (Keycloak) backends are coded but depend on infrastructure not yet deployed. FreeCAD client has
Silo_Authdock panel for login and API token management. Server has session middleware (alexedwards/scs), CSRF protection (nosurf), and role-based access control (admin/editor/viewer). Migration009_auth.sqladds users, api_tokens, and sessions tables. -
No unit tests. Zero test coverage for ztools and Silo FreeCAD commands. Silo Go backend also lacks tests.
-
Assembly solver datum handling is minimal. The
findPlacement()fix insrc/Mod/Assembly/UtilsAssembly.pyextracts placement fromobj.Shape.Faces[0]forPartDesign::Planeand from shape vertex forPartDesign::Point. Does not handle empty shapes or non-planar datum objects.
Medium
-
Silo_BOMrequires Silo-tracked document. Depends onSiloPartNumberproperty. Unregistered documents show a warning with no registration path. -
PartDesign menu insertion fragility.
_ZToolsPartDesignManipulator.modifyMenuBar()inserts afterPartDesign_Boolean. If upstream renames this command, insertions silently fail. -
tangent_to_cylinder falls back to manual placement. TangentPlane MapMode requires a vertex reference not collected by the current UI.
-
delete_bom_entry()bypasses error normalization. Uses rawurllib.requestinstead ofSiloClient._request(). -
Missing Silo icons. Three commands reference icons that don't exist:
silo-tag.svg(Silo_TagProjects),silo-rollback.svg(Silo_Rollback),silo-status.svg(Silo_SetStatus). The_icon()function returns an empty string, so these commands render without toolbar icons.
Fixed (retain for reference)
-
OndselSolver Newton-Raphson convergence.
NewtonRaphson::isConvergedToNumericalLimit()compareddxNorms->at(iterNo)to itself instead ofdxNorms->at(iterNo - 1). This prevented convergence detection on complex assemblies, causing solver exhaustion and "grounded object moved" warnings. Fixed in Kindred fork (src/3rdParty/OndselSolver). Needs upstreaming toFreeCAD/OndselSolver. -
Assembly solver crash on document restore.
AssemblyObject::onChanged()calledupdateSolveStatus()when the Group property changed during document restore, triggering the solver while child objects were still deserializing (SIGSEGV). Fixed withisRestoring()andisPerformingTransaction()guards atsrc/Mod/Assembly/App/AssemblyObject.cpp:143. -
DlgSettingsGeneral::applyMenuIconSizevisibility. The method wasprivatebut called fromStartupProcess.cpp. Fixed by moving topublic(PR #49). Also requiredDialog::namespace qualifier inStartupProcess.cpp.
Incomplete features
Silo
| Feature | Status | Notes |
|---|---|---|
| Authentication | Local auth complete | LDAP/OIDC backends coded, pending infrastructure. Auth dock panel available. |
| CSRF protection | Implemented | nosurf library on web form routes |
| File locking | Not implemented | Needed to prevent concurrent edits |
| Odoo ERP integration | Stub only | Returns "not yet implemented" |
| Part number date segments | Broken | formatDate() returns error |
| Location/inventory APIs | Tables exist, no handlers | |
| CSV import rollback | Not implemented | bom_handlers.go |
| SSE event streaming | Implemented | Reconnect logic with exponential backoff |
| Database Activity panel | Implemented | Dock panel showing real-time server events |
| Start panel | Implemented | In-viewport start page with recent files and Silo integration |
ztools
| Feature | Status | Notes |
|---|---|---|
| Tangent-to-cylinder attachment | Manual fallback | No vertex ref in UI |
| Angled datum live editing | Incomplete | AttachmentOffset not updated in panel |
| Assembly pattern undo | Not implemented |
Next steps
-
Authentication hardening -- Deploy FreeIPA and Keycloak infrastructure. End-to-end test LDAP and OIDC flows. Harden token rotation and session expiry.
-
BOM-Assembly bridge -- Auto-populate Silo BOM from Assembly component links on save.
-
File locking -- Pessimistic locks on
Silo_Opento prevent concurrent edits. Requires server-side lock table and client-side lock display. -
Build system -- CMake install rules for
mods/submodules so packages include ztools and Silo without manual steps. -
Test coverage -- Unit tests for ztools datum creation, Silo FreeCAD commands, and Go API endpoints.
-
QSS consolidation -- Eliminate the 3-copy QSS duplication via build-time copy or symlinks. The canonical source is
resources/preferences/KindredCreate/KindredCreate.qss. -
Update notification UI -- Display in-app notification when a new release is available (issue #30). The update checker backend is already implemented.