← test

North Roof Slope

v1 AI approved Generated with ElixiFree

SIP-142 north roof slope, 30° pitch, ridge length 15000mm, half-span 3000mm, eave overhang 400mm, rake overhang 300mm; bears on north wall bevelled plate; two Velux skylights; ridge bevel bearing

Dependencies

north_wall.eave_bearing east_wall.ridge_pocket west_wall.ridge_pocket ridge_beam.connection
◉
Agent initialized (status: waiting_for_dependencies, action: check_dependencies)
◉
Provider: claude_code | Profile: balanced
◉
Provider updated to claude_code / balanced
◉
Provider updated to claude_code / balanced
◉
Provider updated to claude_code / balanced
◉
Provider updated to anthropic / balanced
◉
Provider updated to anthropic / balanced
◉
Provider updated to anthropic / balanced
◉
Provider updated to anthropic / balanced
◉
Agent initialized (status: waiting_for_dependencies, action: check_dependencies)
◉
Provider: anthropic | Profile: balanced
◉
Provider updated to anthropic / balanced
◉
Provider updated to anthropic / balanced
◉
Provider updated to anthropic / balanced
◉
Provider updated to anthropic / balanced
◉
Agent initialized (status: waiting_for_dependencies, action: check_dependencies)
◉
Provider: anthropic | Profile: balanced
◉
Provider updated to anthropic / balanced
◉
Provider updated to anthropic / balanced
◉
Provider updated to anthropic / balanced
◉
Provider updated to anthropic / balanced
◉
Provider updated to anthropic / balanced
◉
Provider updated to anthropic / balanced
◉
Provider updated to anthropic / balanced
◉
Provider updated to anthropic / balanced
◉
Provider updated to anthropic / balanced
◉
Agent initialized (status: waiting_for_dependencies, action: check_dependencies)
◉
Provider: anthropic | Profile: balanced
◉
Provider updated to anthropic / balanced
◉
Provider updated to anthropic / balanced
◉
Provider updated to claude_code / balanced
◉
Provider updated to claude_code / balanced
◉
Agent initialized (status: waiting_for_dependencies, action: check_dependencies)
◉
Provider: claude_code | Profile: balanced
◉
Provider updated to claude_code / balanced
◉
Provider updated to claude_code / balanced
◉
Provider updated to claude_code / balanced
◉
Provider updated to claude_code / balanced
◉
Provider updated to claude_code / balanced
◉
Agent initialized (status: waiting_for_dependencies, action: check_dependencies)
◉
Provider: claude_code | Profile: balanced
◉
Provider updated to claude_code / balanced
◇
Received interface north_wall.eave_bearing: %{name: "eave_bearing", type: nil, value: %{}, agent_id: "north_wall"}
◉
Provider updated to claude_code / balanced
◉
Provider updated to claude_code / balanced
◉
Provider updated to claude_code / balanced
◇
Received interface east_wall.ridge_pocket: %{name: "ridge_pocket", type: nil, value: %{}, agent_id: "east_wall"}
◉
Provider updated to claude_code / balanced
◇
Received interface west_wall.ridge_pocket: %{name: "ridge_pocket", type: nil, value: %{}, agent_id: "west_wall"}
◉
Provider updated to claude_code / balanced
◉
Provider updated to claude_code / balanced
◉
Provider updated to claude_code / balanced
◇
Received interface ridge_beam.connection: %{name: "connection", type: "connection", value: %{}, agent_id: "ridge_beam"}
◉
All dependencies resolved, starting generation
◉
Refreshed placement from design spec (bbox %{"x" => 15600.0, "y" => 4007.9655687143822, "z" => 142.0})
◉
Generating v1
◉
[ElixiFree] active — code_module=elixifree.sip
◉
[ElixiFree] downgrading to claude-haiku-4-5-20251001 (builder API active)
○
Calling Claude (local subscription) for code generation (claude-haiku-4-5-20251001)...
◉
Generation token budget: max_tokens=12288, thinking_budget=0 (retry_count=0)
◉
Provider updated to claude_code / balanced
◉
Provider updated to claude_code / balanced
●
Received response ( tokens)
◉
Applied 2 deterministic skylight .opening() call(s) from the design spec
◆
gable_roof_north_v1.py · 52 lines
import FreeCAD
import Part
from FreeCAD import Vector
from elixifree.domains.sip import PitchedRoofSlope

# === ANCHOR POINTS ===
ANCHOR_TOP_FACE = (7.5e3, 1.5e3, 142.0)
ANCHOR_BOTTOM_FACE = (7.5e3, 1.5e3, 0.0)
ANCHOR_FRONT_FACE = (7.5e3, 0.0, 71.0)
ANCHOR_BACK_FACE = (7.5e3, 3.0e3, 71.0)
ANCHOR_LEFT_FACE = (0.0, 1.5e3, 71.0)
ANCHOR_RIGHT_FACE = (1.5e4, 1.5e3, 71.0)
# === END ANCHOR POINTS ===

# === PARAMETERS ===
RIDGE_LENGTH = 15000      # mm — ridge length (excluding rake overhangs)
HALF_SPAN = 3000          # mm — half-span from eave bearing line to ridge centerline
PITCH_DEG = 30            # degrees — roof pitch
STOCK = "SIP-142"         # SIP stock designation
EAVE_OVERHANG = 400       # mm — projection past eave wall
RAKE_OVERHANG = 300       # mm — projection past each gable end
# === END PARAMETERS ===

doc = FreeCAD.ActiveDocument or FreeCAD.newDocument("NorthRoofSlope")

# Build north roof slope with ridge bevel and eave bevel
slope = PitchedRoofSlope(
    ridge_length=RIDGE_LENGTH,
    half_span=HALF_SPAN,
    pitch_degrees=PITCH_DEG,
    stock=STOCK,
    is_south=False,            # North-facing slope
    eave_overhang=EAVE_OVERHANG,
    rake_overhang=RAKE_OVERHANG,
)

# Add Velux skylights at mid-slope positions
# Skylight 1: at 1/4 along ridge, 1/2 up slope, standard Velux size
# Skylight 2: at 3/4 along ridge, 1/2 up slope, standard Velux size

# Build and add to document
result = (
    slope
    .opening(u=16830.0, run=7110.0, width=1140.0, depth=1180.0)
    .opening(u=26980.0, run=7310.0, width=1140.0, depth=1180.0)
    .build()
)
result.add_to_doc("Body")

doc.recompute()
if FreeCAD.GuiUp:
    FreeCAD.Gui.ActiveDocument.ActiveView.fitAll()
◉
[ElixiFree] ✓ generated script uses elixifree imports
◉
[ElixiFree] ⚠ script imports unknown symbols: PitchedRoofSlope — possible hallucination
●
Executing in FreeCAD...
✖
FreeCAD execution failed: Traceback (most recent call last): File "/Users/briancunningham/elixicad/freecad/bin/../Mod/CadClaude/cadclaude_worker.py", line 207, in _exec_once exec(compile(script_source, "<cadclaude>", "exec"), {}) File "<cadclaude>", line 54, in <module> File "/Users/briancunningham/elixicad/freecad/Mod/CadClaude/elixifree/builder.py", line 129, in build self._validate() File "/Users/briancunningham/elixicad/freecad/Mod/CadClaude/elixifree/domains/sip.py", line 1155, in _validate _resolve_stock(self._stock) File "/Users/briancunningham/elixicad/freecad/Mod/CadClaude/elixifree/domains/sip.py", line 87, in _resolve_stock raise BuildError( elixifree.builder.BuildError: Unknown SIP stock 'SIP-142'. Valid values: ['SIP-100', 'SIP-120', 'SIP-150', 'SIP-200', 'SIP-250', 'SIP-300']
◉
Retrying (attempt 2/4)
●
Received corrected script, re-executing...
●
Executing in FreeCAD...
✖
FreeCAD execution failed: Traceback (most recent call last): File "/Users/briancunningham/elixicad/freecad/bin/../Mod/CadClaude/cadclaude_worker.py", line 207, in _exec_once exec(compile(script_source, "<cadclaude>", "exec"), {}) File "<cadclaude>", line 54, in <module> File "/Users/briancunningham/elixicad/freecad/Mod/CadClaude/elixifree/builder.py", line 129, in build self._validate() File "/Users/briancunningham/elixicad/freecad/Mod/CadClaude/elixifree/domains/sip.py", line 1167, in _validate raise BuildError("Roof panel opening falls outside the panel bounds") elixifree.builder.BuildError: Roof panel opening falls outside the panel bounds
◉
Retrying (attempt 3/4)
●
Received corrected script, re-executing...
●
Executing in FreeCAD...
◉
StepAnalyzer failed: FreeCAD could not read STEP file: FreeCAD exception thrown (File to load not existing or not readable) — skipping
●
FreeCAD execution succeeded
●
Exported: model.stl
★
Ready for review (v1)
◉
All components generated — triggering joinery coherence review
◉
Provider updated to claude_code / balanced
◉
Provider updated to claude_code
◉
Component approved by user
◉
All components approved — recomputing placements and rebuilding assembly
◉
Applied 2 deterministic skylight .opening() call(s) from the design spec
●
Executing in FreeCAD...
◉
Provider updated to claude_code / balanced
◉
Applied 2 deterministic skylight .opening() call(s) from the design spec
●
Executing in FreeCAD...
◉
Applied 2 deterministic skylight .opening() call(s) from the design spec
●
Executing in FreeCAD...
◉
Applied 2 deterministic skylight .opening() call(s) from the design spec
●
Executing in FreeCAD...
◉
Applied 2 deterministic skylight .opening() call(s) from the design spec
●
Executing in FreeCAD...
◉
Applied 2 deterministic skylight .opening() call(s) from the design spec
●
Executing in FreeCAD...
◉
[ElixiFree] active — code_module=elixifree.sip
◉
[ElixiFree] downgrading to claude-haiku-4-5-20251001 (builder API active)
v0.0.985