- Rewrite CONTRIBUTING.md with Kindred-specific contribution guide (branch workflow, commit conventions, submodule management, QSS procedures) - Update README.md with Origin system, update checker, and preference defaults - Update OVERVIEW.md with current submodule pins and date - Update KNOWN_ISSUES.md with resolved items and new Silo features - Update COMPONENTS.md with SSE, Activity panel, Start Panel, theme additions - Update INTEGRATION_PLAN.md phase status (theme, Silo, build system) - Update ARCHITECTURE.md bootstrap flow and source layout
5.5 KiB
Known Issues
Issues
Critical
-
QSS duplication. Four copies of the stylesheet must be kept in sync manually. A build step or symlinks should eliminate this.
-
WorkbenchManipulator timing. The
_ZToolsPartDesignManipulatorappends 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. -
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.