Files
create/docs/KNOWN_ISSUES.md
forbes b3a6c9d925
Some checks failed
Build and Test / build (pull_request) Has been cancelled
merge: resolve conflicts with main (docs)
2026-02-08 19:27:52 -06:00

5.6 KiB

Known Issues

Issues

Critical

  1. QSS duplication. Resolved. The canonical QSS lives in src/Gui/Stylesheets/KindredCreate.qss. The PreferencePacks copy is now generated at build time via configure_file() in src/Gui/PreferencePacks/CMakeLists.txt. The unused resources/preferences/KindredCreate/ directory has been removed.

  2. WorkbenchManipulator timing. The _ZToolsPartDesignManipulator appends commands by name. If ZToolsWorkbench hasn't been activated when the user switches to PartDesign, the commands may not be registered. The manipulator API tolerates missing commands silently, but buttons won't appear.

  3. Silo shortcut persistence. Resolved. Silo_ToggleMode removed; file operations now delegate to the selected origin via the unified origin system.

High

  1. 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_Auth dock panel for login and API token management. Server has session middleware (alexedwards/scs), CSRF protection (nosurf), and role-based access control (admin/editor/viewer). Migration 009_auth.sql adds users, api_tokens, and sessions tables.

  2. No unit tests. Zero test coverage for ztools and Silo FreeCAD commands. Silo Go backend also lacks tests.

  3. Assembly solver datum handling is minimal. The findPlacement() fix in src/Mod/Assembly/UtilsAssembly.py extracts placement from obj.Shape.Faces[0] for PartDesign::Plane and from shape vertex for PartDesign::Point. Does not handle empty shapes or non-planar datum objects.

Medium

  1. Silo_BOM requires Silo-tracked document. Depends on SiloPartNumber property. Unregistered documents show a warning with no registration path.

  2. PartDesign menu insertion fragility. _ZToolsPartDesignManipulator.modifyMenuBar() inserts after PartDesign_Boolean. If upstream renames this command, insertions silently fail.

  3. tangent_to_cylinder falls back to manual placement. TangentPlane MapMode requires a vertex reference not collected by the current UI.

  4. delete_bom_entry() bypasses error normalization. Uses raw urllib.request instead of SiloClient._request().

  5. 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)

  1. OndselSolver Newton-Raphson convergence. NewtonRaphson::isConvergedToNumericalLimit() compared dxNorms->at(iterNo) to itself instead of dxNorms->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 to FreeCAD/OndselSolver.

  2. Assembly solver crash on document restore. AssemblyObject::onChanged() called updateSolveStatus() when the Group property changed during document restore, triggering the solver while child objects were still deserializing (SIGSEGV). Fixed with isRestoring() and isPerformingTransaction() guards at src/Mod/Assembly/App/AssemblyObject.cpp:143.

  3. DlgSettingsGeneral::applyMenuIconSize visibility. The method was private but called from StartupProcess.cpp. Fixed by moving to public (PR #49). Also required Dialog:: namespace qualifier in StartupProcess.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

  1. Authentication hardening -- Deploy FreeIPA and Keycloak infrastructure. End-to-end test LDAP and OIDC flows. Harden token rotation and session expiry.

  2. BOM-Assembly bridge -- Auto-populate Silo BOM from Assembly component links on save.

  3. File locking -- Pessimistic locks on Silo_Open to prevent concurrent edits. Requires server-side lock table and client-side lock display.

  4. Build system -- CMake install rules for mods/ submodules so packages include ztools and Silo without manual steps.

  5. Test coverage -- Unit tests for ztools datum creation, Silo FreeCAD commands, and Go API endpoints.

  6. QSS consolidation -- Eliminate the 3-copy QSS duplication via build-time copy or symlinks. The canonical source is resources/preferences/KindredCreate/KindredCreate.qss.

  7. Update notification UI -- Display in-app notification when a new release is available (issue #30). The update checker backend is already implemented.