← wood shed

Spiral Staircase

v1 AI approved

Ø1800mm right-hand spiral staircase 2922mm height 360° sweep; steel centre column (Ø200mm baseplate, 4× M12 anchors to foundation); 40mm oak treads radial; open riser; brushed-steel handrail @900mm outer radius

Dependencies

foundation.top_face

Interfaces Provided

landing_bracket (floor_connection)
◉
Agent initialized (status: waiting_for_dependencies, action: check_dependencies)
◉
Provider: claude_code | Profile: balanced
◇
Received interface foundation.top_face: %{name: "top_face", type: "bearing_surface", value: %{}, agent_id: "foundation"}
◉
All dependencies resolved, starting generation
◉
Refreshed placement from design spec (bbox %{"x" => 1800.0, "y" => 1800.0, "z" => 2922.0})
◉
Generating v1
◉
Using deterministic building.stairs generation
◆
spiral_stairs_v1.py · 36 lines
import json
import FreeCAD
from elixifree.domains.building import SpiralStair, floor_opening

doc = FreeCAD.ActiveDocument or FreeCAD.newDocument("Model")
stair = SpiralStair(
    position=[6600.0, 900.0],
    radius=900.0,
    base_z=0.0,
    arrival_z=2922.0,
    sweep=360.0,
    handedness="clockwise",
)
stair_metadata = stair.describe()
opening_metadata = floor_opening(
    stair_metadata,
    clearance=100.0,
    floor_bounds=json.loads("null"),
    protected_regions=json.loads("[]"),
)
result = stair.build()
feature = result.add_to_doc("Body", doc)
feature.Label = "Spiral Stair spiral_stairs"
feature.addProperty("App::PropertyString", "BuilderId")
feature.BuilderId = "building.stairs"
feature.addProperty("App::PropertyString", "ElementId")
feature.ElementId = "spiral_stairs"
feature.addProperty("App::PropertyString", "StairMetadata")
feature.StairMetadata = json.dumps(stair_metadata, sort_keys=True)
feature.addProperty("App::PropertyString", "FloorOpening")
feature.FloorOpening = json.dumps(opening_metadata, sort_keys=True)
doc.recompute()

if FreeCAD.GuiUp:
    FreeCAD.Gui.ActiveDocument.ActiveView.fitAll()
●
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
◉
Generation succeeded and component was auto-approved (v1)
◉
Provider updated to claude_code / balanced
◉
Provider updated to claude_code / balanced
◉
Provider updated to claude_code / balanced
◉
Provider updated to claude_code / balanced
v0.0.985