Files
create/docs/KNOWN_ISSUES.md
forbes a2200b4042
Some checks failed
Build and Test / build (pull_request) Has been cancelled
docs: split REPOSITORY_STATE.md into topic files
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)
2026-02-06 10:43:34 -06:00

4.7 KiB

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

  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.


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.