Wholesale copy of all Kindred Create additions that don't conflict with upstream FreeCAD code: - kindred-icons/ (1444 Catppuccin Mocha SVG icon overrides) - src/Mod/Create/ (Kindred Create workbench) - src/Gui/ Kindred source files (FileOrigin, OriginManager, OriginSelectorWidget, CommandOrigin, BreadcrumbToolBar, EditingContext) - src/Gui/Icons/ (Kindred branding and silo icons) - src/Gui/PreferencePacks/KindredCreate/ - src/Gui/Stylesheets/ (KindredCreate.qss, images_dark-light/) - package/ (rattler-build recipe) - docs/ (architecture, guides, specifications) - .gitea/ (CI workflows, issue templates) - mods/silo, mods/ztools submodules - .gitmodules (Kindred submodule URLs) - resources/ (kindred-create.desktop, kindred-create.xml) - banner-logo-light.png, CONTRIBUTING.md
27 lines
1.5 KiB
Markdown
27 lines
1.5 KiB
Markdown
# Python as Source of Truth
|
|
|
|
In Kindred Create's architecture, FreeCAD documents (`.FCStd` files) are the authoritative representation of all CAD data. The Silo database and MinIO storage are caches and metadata indexes — they do not define the model.
|
|
|
|
## How it works
|
|
|
|
An `.FCStd` file is a ZIP archive containing:
|
|
- XML documents describing the parametric model tree
|
|
- BREP geometry files for each shape
|
|
- Thumbnail images
|
|
- Embedded spreadsheets and metadata
|
|
|
|
When a user runs **Commit**, the workbench uploads the entire `.FCStd` file to MinIO and records metadata (part number, revision, timestamp, commit message) in PostgreSQL. When a user runs **Pull**, the workbench downloads the `.FCStd` from MinIO and opens it locally.
|
|
|
|
## Why this design
|
|
|
|
- **No data loss** — the complete model is always in the `.FCStd` file, never split across systems
|
|
- **Offline capability** — engineers can work without a server connection
|
|
- **FreeCAD compatibility** — files are standard FreeCAD documents, openable in stock FreeCAD
|
|
- **Simple sync model** — the unit of transfer is always a whole file, avoiding merge conflicts in binary geometry
|
|
|
|
## Trade-offs
|
|
|
|
- **Large files** — `.FCStd` files can grow large with complex assemblies; every commit stores the full file
|
|
- **No partial sync** — you cannot pull a single feature or component; it is all or nothing
|
|
- **Conflict resolution** — two users editing the same file must resolve conflicts manually (last-commit-wins by default)
|