• v0.9.16 fdef3a26cb

    v0.9.16 Stable

    calum released this 2026-08-02 03:52:09 +01:00 | 31 commits to main since this release

    0.9.16 — Rack drawing: skew fix + landscape output + SYSTEM-WIDE rack hardware library (ADR-N088).

    Three related changes in one build.

    §1 SKEW FIX. dxf_to_svg_group now uses uniform min(sx, sy) scale + centering (was independent X/Y scale, stretched castors 1.111:1). Castors + device symbols + hardware symbols render true-aspect. Applies to frames + devices + hardware by construction (one funnel). Verified: castors are ROUND on both FRONT and SIDE views.

    §2 A3 LANDSCAPE output. Payload gains orientation: "portrait" | "landscape"; template branches page_size + fit math. Each rack now generates BOTH orientations per Generate click; subject_ids ${rack.id}-portrait and ${rack.id}-landscape. Both participate in Generate All + revision ZIP. Uses the existing render_deliverable(page_size=...) seam — NO frame fork.

    §3 SYSTEM-WIDE RACK HARDWARE LIBRARY. A new catalogue category for rack fillers (patch panels, blanks, shelves, brush plates, drawers). Shares the ADR-N085 per-model CAD storage shape exactly (BLOB + filename + three-state, DXF-validated). Admin CRUD at /admin/rack-hardware (create/edit from the editor; delete admin-only). Client mirror at library_rack_hardware (LIBRARY_SCHEMA_VERSION 16 -> 17); bytes stay server-side. Placement extension: rack_placements rebuilt at project SCHEMA_VERSION 21 -> 22 to allow either device_id or hardware_id (CHECK exactly-one-non-null; hardware_id NOT UNIQUE so a "1U Blank" can appear many times). Occupancy resolves height per kind. Editor: hardware section at BOTTOM of sidebar (compact, ≤20% col height), Create/Edit dialog with admin creds, drag/occupancy identical for both kinds. Render: payload placement schema unified with kind + label; server template _fetch_cad_bytes routes to models OR rack_hardware.

    Verified: cargo 230/230 (+4 new hardware tests: hardware_placement_roundtrip, multiple_hardware_placements_of_same_item, exactly_one_non_null_guard, mixed_device_and_hardware_occupancy). TSC + Vite clean. Live end-to-end PDF renders on 10.76.50.160 via mTLS: portrait single-page A3 (841.92×1191.12 pts), landscape single-page A3 (1191.12×841.92 pts), mixed device+hardware placements, castors ROUND. Admin CRUD proven with a live "1U Blank Panel" create; GET /catalogue picks it up. Backend counts 21/35/18/9/30 unchanged post-deploy. DOCKER-USER firewall lock intact.

    Non-blocking limitations: placeholder text is still mm-native in the SVG (from ADR-N087) — future refinement could overlay labels in HTML space for scale-independent sizing. Landscape orientation leaves horizontal whitespace on either side of the racks (aspect honest, not stretched).

    RACK FEATURE STATUS: Builds 1+2+3 (ADR-N085/N086/N087) shipped 0.9.13-0.9.15; 0.9.16 adds skew fix + landscape + hardware library. Six deliverables live: Switch Diagram · VLAN/Subnet Schedule (PDF+XLSX) · Device List · IP Tables · System Diagram · Rack Drawing (portrait+landscape per rack).

    Downloads