Documentation updates: - KNOWN_ISSUES.md: correct #6 (datum handling), resolve #10 (delete_bom_entry) and #11 (silo icons), fix stale formatDate reference, mark completed next steps, add new next steps. - INTEGRATION_PLAN.md: correct ztools SDK migration claim. kc_format.py (#277): - New _manifest_enrich_hook: populates part_uuid from SiloItemId and silo_instance from Silo API URL on every .kc save. - New update_manifest_fields(): public API to update manifest fields in an already-saved .kc ZIP (used for post-upload revision_hash). mods/silo submodule (#276): - New bom_sync.py extraction engine. - Post-commit hooks for BOM sync and manifest revision update. - SSE bom_merged signal + Activity pane handler. - merge_bom_json client method (forward-looking). Refs: #276, #277
6.5 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.
UtilsAssembly.findPlacement()handles standard shapes (faces, edges, vertices) andApp::Lineorigin objects. It does not extract placement fromPartDesign::PlaneorPartDesign::Pointdatum objects — when no element is selected, it returns a defaultApp.Placement(). This means assembly joints referencing datum planes/points may produce incorrect placement.
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.
-
Resolved.delete_bom_entry()bypasses error normalization.delete_bom_entry()usesself._request("DELETE", ...)which routes throughSiloClient._request()with proper error handling. -
Missing Silo icons.Resolved. All three icons now exist:silo-tag.svg,silo-rollback.svg,silo-status.svginmods/silo/freecad/resources/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 | Unknown | formatDate() reference is stale — function not found in codebase |
| 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. See
docs/BOM_MERGE.mdfor specification. -
File locking -- Pessimistic locks on
Silo_Opento prevent concurrent edits. Requires server-side lock table and client-side lock display. -
Build systemDone. CMake install rules insrc/Mod/Create/CMakeLists.txthandle allmods/submodules. -
Test coverage -- Unit tests for ztools datum creation, Silo FreeCAD commands, and Go API endpoints.
-
QSS consolidationDone. Canonical QSS issrc/Gui/Stylesheets/KindredCreate.qss; PreferencePacks copy generated at build time viaconfigure_file(). -
Update notification UI -- Display in-app notification when a new release is available (issue #30). The update checker backend (
update_checker.py) runs at startup; notification UI still needed. -
KC file format completion -- Populate
silo_instanceandrevision_hashin manifest.json. Implement write-back for history.json, approvals.json, dependencies.json. Seedocs/KC_SPECIFICATION.md. -
ztools SDK migration -- Add
<kindred>metadata tomods/ztools/package.xml(load priority, version bounds, SDK dependency). MigrateInitGui.pyto usekindred_sdkAPIs for context/overlay registration. -
DAG cross-item edges -- Assembly constraints referencing geometry in child parts should populate
dag_cross_edges. Deferred until assembly constraint model is finalized.