Some checks failed
Build and Test / build (pull_request) Has been cancelled
Replace the monolithic REPOSITORY_STATE.md with four focused files: - OVERVIEW.md: metadata, submodule pins, doc index - ARCHITECTURE.md: bootstrap flow, source layout - COMPONENTS.md: ztools, Silo, Origin commands, theme, icons - KNOWN_ISSUES.md: bugs, incomplete features, next steps Updates reflected in the split: - Silo auth: corrected from 'not implemented' to 'local auth complete; LDAP/OIDC pending infrastructure' - CSRF: corrected from 'not implemented' to 'implemented (nosurf)' - Silo commands: 14 (was 13, added Silo_Auth) - New Origin commands section (5 C++ commands) - New icon infrastructure section with missing icon tracking - New issues: Newton-Raphson convergence fix (#12), Assembly restore crash fix (#13), missing Silo icons (#11) - Updated submodule pins (silo 27e112e, OndselSolver 5d1988b)
76 lines
4.7 KiB
Markdown
76 lines
4.7 KiB
Markdown
# Known Issues
|
|
|
|
## Issues
|
|
|
|
### Critical
|
|
|
|
1. **QSS duplication.** Four copies of the stylesheet must be kept in sync manually. A build step or symlinks should eliminate this.
|
|
|
|
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.** `Silo_ToggleMode` stores original shortcuts in a module-level dict. If FreeCAD crashes with Silo mode on, original shortcuts are lost on next launch.
|
|
|
|
### High
|
|
|
|
4. **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.
|
|
|
|
5. **No unit tests.** Zero test coverage for ztools and Silo FreeCAD commands. Silo Go backend also lacks tests.
|
|
|
|
6. **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
|
|
|
|
7. **`Silo_BOM` requires Silo-tracked document.** Depends on `SiloPartNumber` property. Unregistered documents show a warning with no registration path.
|
|
|
|
8. **PartDesign menu insertion fragility.** `_ZToolsPartDesignManipulator.modifyMenuBar()` inserts after `PartDesign_Boolean`. If upstream renames this command, insertions silently fail.
|
|
|
|
9. **tangent_to_cylinder falls back to manual placement.** TangentPlane MapMode requires a vertex reference not collected by the current UI.
|
|
|
|
10. **`delete_bom_entry()` bypasses error normalization.** Uses raw `urllib.request` instead of `SiloClient._request()`.
|
|
|
|
11. **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)
|
|
|
|
12. **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`.
|
|
|
|
13. **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`.
|
|
|
|
---
|
|
|
|
## Incomplete features
|
|
|
|
### Silo
|
|
|
|
| Feature | Status | Notes |
|
|
|---------|--------|-------|
|
|
| Authentication | Local auth complete | LDAP/OIDC backends coded, pending infrastructure |
|
|
| 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` |
|
|
|
|
### 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.
|