update branch from main - #43
Merged
Merged
Conversation
…le-bdLnW Fix 8 code review issues: CSP, SRI, state mutation, stale closures, d…
Catches up version numbering for 5 commits where the pre-commit hook was not installed. Hook is now installed at .git/hooks/pre-commit so future commits that stage index.html will auto-increment the patch version. https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
Adds a Claude-style conversational interface anchored bottom-center of
the viewport. Press Ctrl+/ or click the "Ask ClashControl…" pill to open.
- processNLCommand(): pattern-matching engine covering clash detection,
show/hide models, filter by status/type, group by, section planes,
color by classification, render styles, theme, measure modes, BCF
export, reset view, and Q&A ("how many clashes?", "what models?")
- NLCommandPanel: collapsible chat panel with user/assistant bubbles,
auto-scroll, Enter-to-send, Escape-to-close, Ctrl+/ shortcut
https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
…actions
The clash setup assistant now does what text is actually good at:
configuring clash rules in plain English ("check structural vs MEP with
75mm clearance"), answering questions ("how many open clashes?", "which
storey has the most?", "what are the current rules?"), filtering/grouping
results, and exporting BCF.
Removed: section planes, measuring, camera controls, render style,
theme, color-by — these stay as traditional UI because they're spatial
or one-click actions that don't benefit from a conversational layer.
Renamed pill to "Set up clash detection…" to be honest about scope.
https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
…le-bdLnW Simplify: remove dRef, fix img cache pattern, deduplicate hasProjectD…
The click handler was calling unghostAll() instead of ghostOthers() after selecting an element, leaving other elements fully visible. Restores the intended behaviour: clicked element is edge-highlighted, rest go semi-transparent. https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
Keep v1.2.26 from our branch, clean up CHANGELOG to remove out-of-order version entries that accumulated from failed rebase attempts. https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
…locking-Ik8nd Claude/fix ifc security blocking ik8nd
….js) - Lazy-loads onnx-community/Qwen2.5-0.5B-Instruct (q4f16, ~310 MB) via Transformers.js v3 CDN when the panel is first opened - Model runs 100% locally — WebGPU with automatic WASM CPU fallback - Regex fast-path preserved: common exact commands skip the LLM entirely - LLM fallback: natural phrasing like "find pipe-beam conflicts with 5cm gap" now works; model returns structured JSON dispatched as app actions - Status bar shows download progress + "● AI" indicator when ready - Placeholder updates to "Describe your clash check in plain English…" once loaded - CSP updated to allow huggingface.co model downloads - Model cached in browser after first load (offline thereafter) https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
…locking-Ik8nd Add in-browser LLM to NL command panel (Qwen2.5-0.5B via Transformers…
- dtype 'q4f16' is WebLLM terminology; Transformers.js uses 'q4' - Guard mod.env access with try/catch - Store and log actual error message (_nlModelError) - Pass error text to UI status bar so the failure reason is visible - Add Retry button in error state to re-attempt the model download https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
Previously required exact phrasing. Now handles natural variations: - Clash setup: "find conflicts between pipes and beams with 5cm gap", "look for clashes between structural and MEP", "pipes vs beams" (no verb) Clearance now parsed from full text and handles mm/cm/m units - Filter: "only open", "show me the resolved ones", "I want new clashes" (was: required exact "show"/"filter"/"display" keyword) - Group by: "organise by storey", "sort by floor", "by level" (was: required exact "group by" prefix) - Run: "scan", "execute", "find all clashes", "detect collisions" - Soft/duplicate toggles: "turn on soft", "add soft clashes", "turn off duplicates" - Export: "download BCF", "save as BCF", "get BCF file" - Q&A: broader patterns for clash count, model list, settings queries https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
…locking-Ik8nd Claude/fix ifc security blocking ik8nd
- Panel border pulses with a blue glow while the AI model downloads - On load complete, border flashes green then returns to normal - Header shows a spinning ring + "AI XX%" during loading (replaces the easy-to-miss progress bar strip) - Header shows "● AI ready" in green once the model is loaded - Removes the separate inline progress bar row (border is the indicator) https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
…locking-Ik8nd Add animated loading border + status indicator to NL panel
The 'Failed to fetch' error fires in network-restricted environments (corporate firewalls blocking CDN/HuggingFace). Changes: - Error strip: muted grey instead of alarming orange, copy changed from 'AI model failed — keyword mode active' to 'Enhanced AI unavailable (network restricted) — all commands still work' - Retry button: matches muted style, not orange/prominent - Welcome message: shows concrete examples of what actually works now (vs/between, filter, group, count queries) so the panel feels capable - Textarea placeholder: consistent regardless of LLM state https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
- Remove top header bar and bottom ClashBar entirely - Add 48px vertical IconRail (left edge) with: - CC logo at top - Tab icons: Models, Clashes, Issues, Explorer (with badge counts) - Bottom: AI chat, Open/Save Project, Import/Export BCF, Theme, Settings - Click active tab collapses panel (toggle behavior) - Add 300px SidePanel that slides out from the icon rail: - Models tab: file upload, model cards, levels, section controls - Clashes tab: clash detection controls + clash list - Issues tab: issues list - Explorer tab: IFC tree view - Header shows panel name + project name + close button - Viewer fills all remaining screen space (no fixed sidebars) - App starts with panel collapsed — full viewer on launch - Clash detection controls moved from bottom bar into Clashes panel https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
…locking-Ik8nd Claude/fix ifc security blocking ik8nd
Replaces the plain text '+ Add IFC / DXF / PDF' label with a folder+plus SVG icon for clearer affordance. Also updates the empty models state to use the same SVG icon instead of the 📁 emoji for visual consistency. https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
- Add .cc-tip CSS class: smooth fade+slide tooltip that appears to the right - Add .cc-tip-up variant for buttons inside panels (tooltip appears above) - Apply to tabBtn, iconBtn (icon rail) and the file upload button - Upload button is now icon-only; tooltip shows 'Add IFC / DXF / PDF' on hover https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
- LeftRail: CC logo, AI Assistant, Open/Save Project, Import/Export BCF, theme toggle, settings — tooltips slide right - RightRail: Models, Clashes, Issues, Explorer — tooltips slide left, active indicator on right border - SidePanel moves to the right, opening between the viewer and RightRail - Add .cc-tip-left CSS variant for right-side elements - Layout: [LeftRail][Viewer][SidePanel][RightRail] https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
…locking-Ik8nd Claude/fix ifc security blocking ik8nd
- Rewrite flyToDir to animate orbit.sph theta/phi directly instead of lerping camera positions — fixes TOP/BOTTOM gimbal lock and ensures orbit state is always in sync after navigation - Give each face pair a distinct axis-coded color for clearer 3D reading - Sharper edge wireframe (opacity 0.9 vs 0.6) - Version tooltip on CC logo was already in place from previous commit https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
…locking-Ik8nd Fix viewcube fly-to and improve visual style
- Change rail containers from overflow:hidden to overflow:visible so the ::after tooltip pseudo-elements are not clipped - Add position:relative + z-index:10 to both rails so they form a stacking context that sits above the WebGL canvas https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
Replace the single folder-icon upload button with two side-by-side labelled buttons: 'IFC' (accepts .ifc) and '2D' (accepts .dxf/.pdf/.dwg), each with a hover tooltip describing what they load. https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
…locking-Ik8nd Claude/fix ifc security blocking ik8nd
Remove the Open Project folder icon from the left toolbar and replace it with two stacked text buttons labelled IFC and 2D. Each button triggers the corresponding hidden file input in ModelSidebar via window._ccOpenIFC / window._ccOpen2D globals. Also reverts the models panel back to its original single folder-icon upload button. https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
…locking-Ik8nd Replace folder icon in left rail with IFC and 2D label buttons
…ble panel View cube: - Switch from OrthographicCamera to PerspectiveCamera(40°) for real depth - Replace 6 PlaneGeometry faces with BoxGeometry + 6 MeshPhongMaterials so directional lighting gives each face a different brightness - Derive cube rotation from orbit.sph.theta/phi instead of camera.quaternion, eliminating gimbal-lock spin when looking straight up or down - Compass group now uses setFromAxisAngle(Y, -theta) — no more complex label quaternion IFC / 2D toolbar buttons: - When ModelSidebar is not yet mounted (models tab closed), set window._ccPendingOpen and open the models tab; ModelSidebar checks the flag in useEffect on first mount and immediately triggers the correct file picker Resizable side panel: - SidePanel now tracks panelW via useState(300) - 5px drag handle on the left edge resizes between 200–600px with a blue hover tint https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
…locking-Ik8nd Fix view cube 3D depth, orientation stability, IFC/2D buttons, resiza…
useState and useRef were declared after the early 'return null', violating React's Rules of Hooks and causing a crash/blackout on every tab toggle. Moved both hook calls above the early return. https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
- Fix models multiplying: replace component-level didRestore ref with a window-level flag so ModelSidebar re-mounts don't re-trigger IDB restore - Remove clash detection setup UI from the embedded Clashes panel (it's already accessible via the floating NL assistant) - Make the filter bar a prominent NL-style input with a descriptive placeholder, active-state highlight, and a clear button - Extend clash search to match type, storey, element type, and material so plain-text queries like "hard on floor 2" work out of the box - Enrich each clash row: Hard/Soft/Duplicate type badge, penetration depth (with sign), floor/storey label, and self-clash indicator https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
…locking-Ik8nd Claude/fix ifc security blocking ik8nd
Adds a folder icon button in the left rail that opens a popout dropdown showing all projects. Supports switching and creating new projects without needing to open the Models panel. https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
Read theme from localStorage on init, save it back whenever it changes. https://claude.ai/code/session_01M9BhDYdRnmkzC72UuD6PG3
…locking-Ik8nd Claude/fix ifc security blocking ik8nd
thomhoffer-arch
merged commit Mar 23, 2026
3f24cb9
into
claude/debug-clash-controle-bdLnW
5 checks passed
thomhoffer-arch
added a commit
that referenced
this pull request
Mar 23, 2026
…le-bdLnW Merge pull request #43 from thomhoffer-arch/main
This branch was previously deployed
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.
No description provided.