Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Research notes

Findings of investigations behind design decisions: how other systems solve a problem, what is possible for an open-source project (licences, documented formats), the decision and the sources. Every investigation gets its own page here, written and pushed as soon as the findings are in – before the implementation starts.

TopicDecisionDate
One download to try TeamCraft on a laptopbundle PostgreSQL’s programs (theseus-rs builds, PostgreSQL Licence, newest 18.x, checksum-checked) with the desktop app and the server as teamcraft-server; teamcraft local runs a private cluster (scram, random password, 127.0.0.1 only, free port, no socket) and the server, and stops both when the app’s stdin pipe closes; separate with local server installers for Windows x64, macOS Apple silicon and Linux x86_64; no new crate, no SQLite, no postgresql_embedded2026-11-14
Deprovisioning through the identity provider (SCIM 2.0)not now: the target audience’s IdPs (university SAML/OIDC proxies, Keycloak) send no SCIM; the idle-SSO report, idle token lifetimes and OIDC back-channel logout cover what they can signal (#173 step 9). Later: active: false (boolean or string, PATCH or PUT) → Offboard and deactivate with a configured default, soft delete only2026-11-12
3D preview of CATIA V5 productsput together from the parts like NX, SOLIDWORKS and Inventor assemblies: instances, part numbers and placements (X, Y, Z axes and origin in mm) read from the product’s CATProdCont object stream; no file names are stored, so components are found by the UUID of their CATProdCont (CATIA files of the own revision and name matches) or by <part number>.CATPart/.CATProduct; hidden components later2026-11-12
3D preview of Creo assembliesput together from the parts like NX, SOLIDWORKS, Inventor and CATIA: section NeuAsmSld lists the direct components (part or sub-assembly, model name, axes e1–e3 and origin in the parent’s frame); files found as <name>.prt / <name>.asm; lengths converted to mm from UnitSystemDef (parts too); decoded on unlicensed samples, tested with synthetic assemblies around NIST ctc-012026-11-12
3D preview of Creo partsCreo stores no display tessellation: the exact B-rep (VisibGeom, a self-describing tagged format with compressed numbers) is read instead – analytic faces with contours, every edge sampled in both faces’ parameter spaces; faces are ear-clipped in the parameter plane, welded and refined with PN triangles; spline, fillet and ruled faces included; assemblies in their own page2026-11-08
3D preview of CATIA V5 partsread the visualisation (CGR) mesh CATIA stores in every part (nested V5_CFV2 document CATCGRCont, stream SceneGraph/MainDataStream, uncompressed; decoded from sample files, verified against the NIST STEP export) and refine it along its exact normals like NX parts; thumbnails rendered from it; products from their parts (CATIA V5 products), the exact B-rep never2026-11-08
3D preview of Inventor filesread the display tessellation Inventor stores in every part (PmGraphicsSegment: one indexed triangle list per face with exact per-vertex normals, cm), weld it on its exact coordinates and refine it with PN triangles like NX and SOLIDWORKS; assemblies from UFRxDoc (files, visibility) and AmRxSegment (placements, checked against the stored bounding boxes of 243 sample assemblies), re-posed flexible sub-assemblies and suppressed components (addendum 2026-11-11), thumbnails rendered from the 3D preview; design views, weld beads and the ShapeManager geometry later2026-11-08
Instance counts of Inventor assembliesread the occurrence count of each referenced file from the first file descriptor table in UFRxDoc (checked against Inventor’s API: 190 of 190 files); suppressed occurrences left out via the occurrence records in the same stream (flag 07, linked by name), not guessed when they do not add up2026-11-11
Crash reports from the desktop apppanic hook, session marker and uncaught UI errors written locally (redacted); at the next start the user sees the report and can open a prefilled GitHub issue, copy or discard it – no telemetry service, nothing sent unseen2026-11-10
Mass properties from exported meshesEberly’s divergence-theorem integrals per triangle, computed in the isolated preview process and cached per content hash; edge check (open, non-manifold, misoriented) and fix of fully inverted meshes; admin material library plus density override per revision; per-file length unit and instance count; measured mass/CG/inertia wins and covers the sub-tree; parts exported in the common vehicle frame (placements on BOM lines later); roll-up by parallel axis under the read rights2026-11-09
3D preview of Fusion designsread the display scene Fusion stores in every .f3d (OGS world + stream_mesh_*, ZIP entries in Zstandard, inflated with ruzstd): the triangle meshes of the body faces, welded and refined along their exact normals like NX parts, centimetres to millimetres; thumbnails rendered from it, the stored PNG as fallback; the ShapeManager B-rep stays unread; instance transforms and hidden bodies wait for a sample assembly2026-11-08
3D preview of SketchUp modelsSketchUp 2021+ (ZIP + tag–length–value model.dat) with an own reader: faces triangulated with earcut, nested components placed (p' = s·(R p + t)), hidden faces, instances and layers left out, thumbnails rendered from the mesh; the 40 OpenSKP test files (MIT) as fixtures; classic files (SketchUp 3–2020, MFC object stream) through the unchanged Rust port of OpenSKP (MIT) in vendor/openskp; no colours or textures yet2026-11-08
3D preview of Rhino modelsread the meshes a .3dm stores (mesh objects, B-rep render meshes, extrusion mesh caches), subdivide SubD control nets (Catmull-Clark with creases), place block instances; openNURBS sources read only; B-reps without stored meshes (truck) later2026-11-08
3D preview of SOLIDWORKS filesread the display tessellation SOLIDWORKS stores in every part (Contents/DisplayLists: triangle strips with exact per-vertex normals), weld it and refine it with PN triangles like NX; assemblies from the placements in COMPINSTANCETREE (checked against the NIST assembly’s NX placements), thumbnails rendered from the 3D preview; the Parasolid geometry (readable) and pre-2015 OLE files later2026-11-07
Mutation testing with cargo-mutantscargo-mutants (MIT, a CI tool, no new crate): --lib tests over the pure, unit-tested modules (.cargo/mutants.toml), --in-diff on pull requests report-only at first, weekly sharded full run; exclusions in the config with a reason, not #[mutants::skip]; missed mutants in touched code get a test that checks behaviour2026-11-07
3D preview of NX partsread the JT 9 tessellation NX stores in every part (/Root/FastLoad/JT, topologically compressed) and refine it along its exact normals (PN triangles, creases from both normals); assemblies from their structure stream (placements verified against a JT export), thumbnails rendered from the 3D preview; stand-alone JT 10 and the Parasolid block later or never2026-11-07
3D preview of stand-alone JT filesread JT 10 files (format id jt) with the JT 9 topology coder plus the new Int32 codec, LZMA (lzma-rs, MIT) and the scene graph (instances, row-vector transforms, units, hidden nodes); hashes checked; verified on the NIST box assembly (36 placements equal to NX, sizes equal to NIST STEP); JT 9 stays with the NX reader; shattered files, PMI and B-rep segments not now2026-11-08
Text from HTML reportsown bounded tokenizer (no new crate, encoding_rs for charsets) in the same isolated text-extract child as PDF; table rows as lines with | separators, scripts, styles, comments, embedded images and hidden elements skipped, nothing fetched; templates on HTML run on the extracted text; plain text keeps its decimals2026-11-07
Text from PDF reportspdf_oxide (MIT/Apache-2.0) in an isolated teamcraft text-extract child process with size, page, time and memory limits; the only candidate that survived truncated and damaged files without panics; no OCR2026-11-05
One provider interface for the assistantone provider-neutral API layer (src/llm/): Anthropic Messages and OpenAI-compatible Chat Completions now, stateless Responses later; the key stays on the server (desktop Ask… and ACP unchanged); base URL set by the operator, internal hosts allowed, no redirects; next: budgets, progress streaming, threads, context quick actions2026-11-05
Sharing UI code between web and desktoptop-level shared/ with tokens, one component CSS, plain ES modules (formatters, states, markdown-lite, widgets, 3D viewer), fonts and icons; web keeps server templates, desktop keeps rendering from JSON; one markup contract, Rust and JS rules pinned to shared test vectors2026-11-05
Supersede, replace and alternate partsglobal two-way alternates per item, supersession with one successor, replace in assemblies from the where-used page (in-work parents only, released ones listed for a new revision); local substitutes per BOM line later2026-11-05
Jira connector for change requests and change ordersone-way TeamCraft → Jira first (ECR/ECO as issues, status mapping, remote link back, outbox like webhooks, explicit project-group scope per connection); Jira webhooks later, never approvals2026-11-05
Previews of native CAD files (Inventor, Solid Edge)embedded preview image: implement · 3D from the native file on the server: skip (licensing) · 3D through the user’s own CAD installation in the desktop app: implement2026-11-04
Importing existing CAD folder treesscan with a duplicate report first, one item per model with its drawings and exports, check-in at the end, BOM from references optional, tutorial in the desktop app2026-11-04
Popular features of Teamcenterimplement favorites, saved searches, Save As and BOM comparison; numbering schemes, custom attributes, transmittals and redlining stay planned2026-11-04
Openly licensed CAD files for end-to-end testsNIST test models (no restrictions): parts in Inventor, NX, SolidWorks, Creo, CATIA V5, STEP, NX and SolidWorks assemblies; Solid Edge: none found2026-11-04
Read permissions for project groupsrestricted project groups: members and admins read, everybody else gets 404; placeholders for links across the boundary; enforcement in the services, no row-level security2026-11-05
As-built recordsitem type as_built = one physical unit: build record (design revision built to, serial, date), as-built BOM copied from the design and compared with it, deviations with disposition (open / use as is / rework / repair / scrap); no submit with an open deviation2026-11-06
Fluent, STAR-CCM+ and Simcenter 3D filesrecognise by extension plus bounded head checks (NX SPLMSSTR for .sim/.fem/.afm, HDF5/gzip signatures, Nastran markers in .dat); small text summaries from head and tail only (.trn, .out, .f06, journals, macros); never parse .op2, .h5, .dat.h5, .sim, .simh; one simulation item per analysis with the master part as pinned basis; values from run-written exchange files, tail-reading templates and reports (#141)2026-11-07