chore/push local work 2026 07 30 - #1
Open
DutchSailor wants to merge 20 commits into
Open
Conversation
DutchSailor
commented
Jul 30, 2026
- chore(gitignore): installer build-artefacten negeren + pyc-caches untracken
- perf(viewer): property-extractie naar dedicated web worker
- refactor(viewer): manifest-selector uit OpenDialog verwijderd
- feat(desktop): Tauri-shell met OpenAEC-accounts en embedded server
- feat(installer): Inno Setup-pipeline + PyInstaller-bundles en frozen-build-fixes
- docs(readme): sectie Praktische CLI Voorbeelden uitgebreid
- fix(viewer): isolatie rendert element opaque + section planes clippen per materiaal
- feat(validator): not-checkable status voor niet-evalueerbare specificaties
- feat(mcp): zero-dependency MCP-server op de validatie-engine
- feat(web): llms.txt en robots.txt voor AI/zoekmachine-vindbaarheid
- docs(optimizer): design-spec IFC-optimizer fase 1 + ifcpatch/ifcclash deps
- feat(quality): data-quality checks op het model (8 controles)
- feat(optimizer): IFC-optimizer engine met selecteerbare passes (fase 1)
- feat(server): async optimize/clash-endpoints + /status-probe
- feat(viewer): Clashes- en Kwaliteit-tabs + Optimaliseer-dialoog
- fix(viewer): TransformControls-gizmo zichtbaar maken op three r180
- refactor(viewer): dode manifest-lijst-code verwijderd
- feat(livelink): open streaming-protocol + IfcOpenShell-referentiefeeder (fase 1)
- feat(viewer): volledige adoptie OpenAEC design system
…racken installer/build, dist, dist_tauri, output en *.log zijn PyInstaller/Inno Setup-output en horen niet in git. Getrackte __pycache__/*.pyc verwijderd uit de index (stonden al in .gitignore maar waren eerder gecommit). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
PropertyExtractor draaide synchroon op de main thread en bevroor de UI bij de eerste element-selectie op grote modellen. PropertyClient is een main-thread proxy met dezelfde async-interface; de web-ifc extractie draait nu in propertyWorker. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Projecten openen IFC-bestanden nu direct; de .wefc-manifest-keuzelijst in de Open-dialog verviel. Het .wefc-concept zelf (Backstage/SaveAs) blijft ongewijzigd. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Windows desktop-app rond de bestaande viewer: - Rust-shell spawnt in release-builds de gebundelde headless Python- server (server/bim-validator-server.exe, PyInstaller) op 127.0.0.1:8000 en beeindigt die bij afsluiten; in dev draait uvicorn los - frameless venster met eigen WindowChrome-titelbalk (drag-region, minimize/maximize/close) en file-associations voor .ifc/.ifcx - WebView2: embedBootstrapper (silent) + WebView2Loader.dll gebundeld als resource en gecommit conform Windows desktop-policy - Sign in with OpenAEC: OIDC Authorization Code + PKCE volledig in Rust (systeembrowser -> loopback-callback -> tokens in Windows Credential Manager); frontend praat alleen via invoke, achter VITE_OPENAEC_ENABLED - apiBase.ts detecteert Tauri en schakelt API-calls naar de embedded server; CORS voor tauri://localhost-origins in server/main.py - VIEWER_DIST_PATH env-override voor het frontend-dist-pad Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…build-fixes - installer/build.ps1: frontend-build -> PyInstaller (tray-app, CLI, headless server) -> Inno Setup -> setup.exe - bim_validator.iss: componenten server/CLI, NL+EN, desktop-icon, autostart, CLI naar systeem-PATH, 3BM-branding - tray_app.py: pystray system-tray die uvicorn start en de browser opent; server_headless.py als tegenhanger voor de Tauri-shell - pyproject: optionele desktop-extra (pystray, Pillow) - cli.py: stdout/stderr naar UTF-8 geforceerd (cp1252-crash op unicode-glyphs in frozen builds) - resolver.py: gebundelde IDS-standaarden vindbaar via sys._MEIPASS in PyInstaller-builds Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… per materiaal Ghost mode (4 eerdere mislukte pogingen, zie TODO.md): fragments batchen elementen in shared meshes, dus geen materiaal- of instance-truc kan een element opaque houden. Oplossing is het split-out patroon: de geometrie van het geselecteerde element wordt via getItemsGeometry() uit de batch gesplitst en als losse opaque mesh gerenderd, met bounding-box als fallback. Nagestreamde tiles worden geghost via model.tiles.onItemSet. Section planes: clipping verplaatst van renderer.clippingPlanes (globaal, clipte ook gizmo en plane-visuals weg) naar per-materiaal clipping op alleen modelgeometrie. Nieuwe tiles krijgen actieve planes bij streaming. Traversals gebruiken isMesh duck-typing i.p.v. instanceof zodat meshes van andere module-instanties niet gemist worden. Geverifieerd end-to-end in de draaiende viewer met 2786_CLT_model.ifc: element opaque (#44b6a8, 48 verts) bij 7 geghoste materialen; 15/15 modelmaterialen geclipt bij actief vlak, gizmo en plane-visual ongeclipt; restore/remove herstelt alles. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…aties Honesty-rule: een specificatie die de engine niet kan evalueren wordt expliciet gerapporteerd als 'not checkable' — nooit stil geslaagd of gefaald. Concreet: ifctester draait nu met should_filter_version=True, zodat specs waarvan de ifcVersion het modelschema niet dekt (bv. een IFC4-spec tegen een IFC2X3-model) worden overgeslagen en als not_checkable met reden in het resultaat komen. - SpecificationResult: status (passed/failed/not_checkable) + not_checkable_reason; status wordt afgeleid uit passed voor bestaande constructors (backward compatible) - ValidationResult: not_checkable_specifications teller (default 0); pass rate telt alleen over controleerbare specs - Console/HTML-formatters tonen de derde status incl. reden 8 nieuwe tests in test/test_not_checkable.py; volledige suite 809 groen (16 pre-existing failures in server-tests staan los van deze wijziging, geverifieerd via baseline op schone HEAD). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Stdio MCP-server (newline-delimited JSON-RPC 2.0, geen dependencies) waarmee AI-assistenten lokaal IFC-modellen valideren. Validatie draait volledig op de eigen machine via IfcOpenShell/ifctester — modeldata verlaat de machine niet, geen API-key nodig. Tools: validate_ifc (IDS-pad of bundled standaard, compacte JSON-summary met per-spec status incl. not_checkable), list_standards, export_report (html/json). Tool-fouten gaan in-band terug (isError) zodat het model erop kan reageren; stdout bevat uitsluitend JSON-RPC, logging naar stderr. Entry point: ifc-validator-mcp / python -m ifc_validator.mcp_server. 9 subprocess-tests die de server als echte MCP-client aansturen. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
llms.txt beschrijft capabilities, interfaces (web, CLI, MCP, REST, desktop) en workflows in LLM-vriendelijk formaat; robots.txt sluit /api/ uit. Geserveerd vanuit viewer/public zodat ze in dist meekomen en door de SPA-fallback op / worden geserveerd. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… deps Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Naar het voorbeeld van browser-based BIM-datakwaliteitstools: dubbele/ ontbrekende GlobalIds, IfcBuildingElementProxy zonder classificatie, generieke namen, geen materiaal/verdieping/psets, en niet-gehoste deuren/ramen. Engine-standalone module (quality/) met Pydantic-rapport (findings gecapt op 50 met omitted-teller, zelfde honesty-principe als de validatie) + synchroon endpoint POST /api/v1/quality. 16 unit-tests op synthetische IFC4-fixtures. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Conform de design-spec (docs/superpowers/specs/2026-07-10): altijd een nieuw bestand, passes individueel selecteerbaar, volledig wijzigings- rapport met GlobalIds. Fase-1 passes: dubbele GlobalIds herstellen, kapotte relaties verwijderen, ongebruikte psets/quantities verwijderen, compact herschrijven (ifcpatch Optimise, dedupliceert identieke instanties). Gemeten op het CLT-testmodel: 7,2 MB -> 6,5 MB (-10%), 8654 entiteiten gededupliceerd. 9 unit/integratietests (TDD). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- /api/v1/optimize: upload -> 202 job -> poll -> rapport + download van het geoptimaliseerde bestand (per-job tempdir, TTL-cleanup) - /api/v1/clash: ifcclash-detectie binnen 1 model of tussen 2 modellen (intersection/collision/clearance), resultaten gecapt op 2000 met omitted-teller; modelbestanden direct na afloop opgeruimd - server/routers/jobstore.py: thread-safe TTL-jobstore met expiry- callback voor router-eigen artefacten - GET /status: lichte probe voor lokale-engine-detectie (versie + capabilities) + Private-Network-Access-middleware zodat Chrome de localhost-probe vanaf een publieke pagina toestaat 12 endpoint-tests via TestClient. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- ClashPanel (Clashes-tab was placeholder): detectie binnen 1 model of tussen 2 geladen modellen via het async clash-endpoint; klik op een element selecteert/isoleert het in 3D. Geverifieerd: 75 clashes op het CLT-testmodel, weergave + selectie werkend - QualityPanel (nieuwe Kwaliteit-tab): 8 datakwaliteitschecks met uitklapbare findings, klik selecteert het element. Geverifieerd: echte bevindingen op het CLT-model (7 proxies, 63 zonder materiaal) - OptimizeDialog + Optimaliseer-knop in ribbon-groep Modellen: pass-checkboxes (van GET /optimize/passes), rapport met groottewinst per pass en download van het geoptimaliseerde bestand - toolsApi.ts: gedeelde job-poll/upload-client voor de drie tools - Verwijder- en Reset-knoppen in de ribbon aangesloten (waren nooit doorgegeven vanuit AppShell -> deden niets) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sinds three r169 is TransformControls geen Object3D meer; de visual moet via getHelper() aan de scene worden toegevoegd. De gizmo van de section planes was stilletjes onzichtbaar geworden toen de npm-audit- fix three naar 0.183 bumpte (THREE.Object3D.add-error in console). Gevonden met de volledige knoppentest in de dev-build; na de fix zijn Snijvlak X/Y/Z en Wis snijvlakken foutvrij geverifieerd. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
cloudManifests/cloudLoadManifests (cloudSlice) en cloudListManifests + ManifestInfo (cloudApi) hadden geen gebruikers meer sinds de manifest- selector uit OpenDialog verdween. cloudSaveManifest/cloudReadManifest en de overige .wefc-code blijven ongewijzigd. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…er (fase 1) docs/LIVE_LINK_PROTOCOL.md: generiek WebSocket-protocol voor live model-streaming naar de viewer — localhost-only binding, health-probe, ping/pong-handshake met gescheiden protocol- en app-versie, origin- allowlist, export/element-batch-flow, incrementele element-updates en content-hash delta-cache; mesh-formaat base64 Float32/Uint32, meters/ Y-up, per-materiaal draw-groups. tools/livelink/feeder.py: referentie-implementatie die een IFC-bestand streamt (ifcopenshell.geom, poort 19790) en bij bestandswijziging alleen gewijzigde elementen herstuurt. Optionele extra: pip install .[livelink]. 40 unit-tests op de pure functies; end-to-end gesmoke-test met het CLT-model (143 elementen, delta-run 0 opnieuw gestreamd). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
UI bijgewerkt naar de laatste stand van OpenAEC-style-book: - themes.css 1-op-1 overgenomen uit de Tauri+React-referentietemplate: 5 thema's (light/forge/openaec/blueprint/contrast) i.p.v. 2, met 'light' nu als echt licht thema conform DESIGN-SYSTEM.md; viewer- specifieke --domain-* (BIM) tokens per thema toegevoegd - huisstijl-fonts lokaal gebundeld (geen CDN): Inter (body/UI), Space Grotesk (headings), JetBrains Mono (code/GlobalIds) met @font-face + form-element font-inherit - alle 20+ component-CSS-bestanden op --theme-*/--domain-* tokens: phantom-variabelen (--text/--bg-input/--border) vervangen, volledig hardcoded WindowChrome getokeniseerd, en alle oude 3BM-merkkleuren (verdigris/magic-violet/friendly-yellow/flaming-peach) en stale hex-fallbacks vervangen; rgba-tints via color-mix op tokens - 3D-accenten (highlight/isolatie) van verdigris naar amber #D97706; brand.css opgeschoond (aliassen -> tokens, neutrale schaduwen, --shadow-focus amber-ring); meta theme-color -> #D97706 - SettingsDialog: 5 thema-opties met token-swatches + NL/EN-labels Geverifieerd in de draaiende preview: alle 5 thema's schakelen met de juiste tokenwaarden, 3 fonts laden, ribbon/statusbar/headings volgen de tokens, thema-dropdown toont alle opties; productie-build groen met fonts in dist. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.