Files
create/docs/KNOWN_ISSUES.md
forbes 0bc03ea421
All checks were successful
Build and Test / build (pull_request) Successful in 29m22s
feat: BOM auto-extraction and manifest field population (#276, #277)
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
2026-02-19 12:37:24 -06:00

6.5 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. Resolved. ZTools is no longer a workbench. Commands are registered via a deferred QTimer.singleShot(2000ms) in InitGui.py, which activates dependent workbenches first, then imports ZTools commands and installs the _ZToolsManipulator. The EditingContextResolver handles toolbar visibility based on editing context.

  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. UtilsAssembly.findPlacement() handles standard shapes (faces, edges, vertices) and App::Line origin objects. It does not extract placement from PartDesign::Plane or PartDesign::Point datum objects — when no element is selected, it returns a default App.Placement(). This means assembly joints referencing datum planes/points may produce incorrect placement.

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. Resolved. delete_bom_entry() uses self._request("DELETE", ...) which routes through SiloClient._request() with proper error handling.

  5. Missing Silo icons. Resolved. All three icons now exist: silo-tag.svg, silo-rollback.svg, silo-status.svg in mods/silo/freecad/resources/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 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

  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. See docs/BOM_MERGE.md for specification.

  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 Done. CMake install rules in src/Mod/Create/CMakeLists.txt handle all mods/ submodules.

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

  6. QSS consolidation Done. Canonical QSS is src/Gui/Stylesheets/KindredCreate.qss; PreferencePacks copy generated at build time via configure_file().

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

  8. KC file format completion -- Populate silo_instance and revision_hash in manifest.json. Implement write-back for history.json, approvals.json, dependencies.json. See docs/KC_SPECIFICATION.md.

  9. ztools SDK migration -- Add <kindred> metadata to mods/ztools/package.xml (load priority, version bounds, SDK dependency). Migrate InitGui.py to use kindred_sdk APIs for context/overlay registration.

  10. DAG cross-item edges -- Assembly constraints referencing geometry in child parts should populate dag_cross_edges. Deferred until assembly constraint model is finalized.