Skip to content

update branch from main - #43

Merged
thomhoffer-arch merged 37 commits into
claude/debug-clash-controle-bdLnWfrom
main
Mar 23, 2026
Merged

thomhoffer-arch merged 37 commits into
claude/debug-clash-controle-bdLnWfrom
main

Conversation

@thomhoffer-arch

Copy link
Copy Markdown
Collaborator

No description provided.

thomhoffer-arch and others added 30 commits March 22, 2026 20:29
…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
thomhoffer-arch and others added 7 commits March 23, 2026 11:27
…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
thomhoffer-arch merged commit 3f24cb9 into claude/debug-clash-controle-bdLnW Mar 23, 2026
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

1 inactive deployment
github-pages — 7e3a1b5b Deployed Mar 23, 2026 by thomhoffer-arch via deploy #62
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants