-
v0.9.15 Stable
released this
2026-08-01 23:18:54 +01:00 | 32 commits to main since this release0.9.15 — Rack Drawing Build 3 of 3: the RACK DRAWING DELIVERABLE (ADR-N087).
Third and final build of the Rack Drawing feature. Sixth deliverable in the family. Rack feature COMPLETE.
- Server endpoint POST /library/render/rack-drawing accepting RackDrawingPayload. Returns the standard RenderResponse envelope.
- Server template extends the LOCKED shared frame (ADR-N073). ONE parse/emit pipeline (rack_dxf.py from Build 2) serves BOTH frame pieces AND per-device symbols. Composition: compose_rack_frame_svg → per-placement CAD symbol groups spliced into the frame SVG at correct U y-extents. FRONT + SIDE views side by side. Side view uses HIDDEN-LINE knockout (each entity stroked twice — wide white base + normal black re-stroke) for CASTORS occlusion. Missing-CAD placements render as LABELLED PLACEHOLDERS (dashed rect + device name + "NN U — no CAD symbol"). Never blank, never fabricated geometry. A3 PORTRAIT.
- Client sends REFERENCES; server owns bytes. Payload carries model_id + resolved height_u per placement; server resolves CAD DXF BLOBs from catalogue.sqlite (ADR-N085 storage) and frame DXFs from Build 2's in-image assets. DXF bytes never traverse the client wire.
- Multi-artifact one-per-subject flow (subject_id = rack.id) parallel to the Switch Diagram. New KIND_RACK_DRAWING constant, generateForRack() handler mirroring generateForSwitch(), integrated into Generate All loop, new Deliverables UI section between Switch Diagrams and VLAN Schedule. Participates in the revision ZIP.
- Rust plumbing: LibraryProvider::render_rack_drawing trait method; MtlsHttpProvider impl; Tauri command render_rack_drawing_via_server. ZIP kind pretty-print extended with "rack_drawing" => "Rack Drawing".
- Server-only, Cancel-only offline behaviour (accepted gap, same posture as VLAN Schedule / Device List / IP Tables / System Diagram).
Verified: cargo 226/226; TSC + Vite clean. Live end-to-end mTLS render of a 600×24U +castors rack (5 placements) → 212 KB PDF at A3-portrait exact; second rack 800×12U no-castors (2 placements) → 158 KB (multi-artifact proven). Backend catalogue counts 21/35/18/9/30 intact. DOCKER-USER firewall lock intact.
Non-blocking limitations recorded: placeholder text is mm-native in the SVG so scales with the rack (legible at zoom, small at print); shorter-rack whitespace; power panel + client-side DXF parity template are future work.
RACK FEATURE COMPLETE. Six deliverables end-to-end: Switch Diagram, VLAN/Subnet Schedule (PDF + XLSX), Device List, IP Tables, System Diagram, Rack Drawing.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Loud-Network-0.9.15-windows-x86_64-setup.exe
0 downloads ·
2026-08-01 23:18:57 +01:00 · 5.3 MiB
-
v0.9.14 Stable
released this
2026-08-01 18:19:09 +01:00 | 34 commits to main since this release0.9.14 — Rack Drawing Build 2 of 3: rack definitions + drag-and-drop editor + frame-DXF pipeline (ADR-N086).
Second build of the three-build Rack Drawing feature; the DELIVERABLE OUTPUT is Build 3. This build wires the plumbing.
-
Frame-DXF transfer + normalise. 24 core rack frame DXFs copied server-to-server from loud-engine's rack module into services/net-library/app/assets/rack_frames/. Front/Side × {600,800,1000} × {TOP,1U,BOTTOM,CASTORS}. Naming normalised on transfer to a single BOT convention. rack_frame.json single source for u_height_mm (44.45), per-width piece heights, and file references — mirrors Loud Engine's rack_layout_v1.json shape (report §4).
-
ezdxf parse + inline-SVG pipeline. New services/net-library/app/rack_dxf.py. ezdxf.readfile parse → INSERT block expansion (depth 12) → bbox.extents → LINE + LWPOLYLINE/POLYLINE only. LRU-cached by (path, mtime, size). Compose helper stacks TOP + 1U×N + BOTTOM + optional CASTORS at correct piece heights and emits a single inline SVG. Verified: 600×42U + castors → 2293.99 mm; 800×24U no castors → 1270.85 mm. Same pipeline will serve per-MODEL device CAD symbols in Build 3.
-
Rack model in project.sqlite. Two additive migrations (SCHEMA_VERSION 19 → 21, pre-migration backup automatic per ADR-N024). Placements' identity IS devices.id (the real project instance, NOT a floating catalogue symbol). height_u NOT stored — RESOLVED from library_models.u_height (ADR-N085) at read time per ADR-N077 pattern. UNIQUE(device_id) + UNIQUE(rack_id, position_u) + application-side span-overlap check in Rust.
-
Rust commands (commands/racks.rs). LAYOUT ONLY — rack list/upsert/delete + placement list/upsert/clear. upsert_rack_placement enforces: rack exists, device exists, model is rackable (u_height set), span fits, no overlap. Cross-database resolve via open_library_db.
-
Client — Racks tab + drag editor. New /racks (list + CRUD) and /racks/:id (editor). Editor is a TypeScript REBUILD of Loud Engine's three-part drag algorithm (docs/loudengine-rack-report.md §3): (a) DOM-marker hit-test — walk elementsFromPoint up to [data-rack-slot-u]; (b) pure-function occupancy/validity check in lib/racks.ts; (c) document-level pointer lifecycle. Sidebar shows filtered PROJECT DEVICES (rackable + not-in-any-rack, composeDeviceLabel-ordered) — no Engine "stage-a-symbol" step. Canvas is a CSS Grid tower (data-rack-slot-u markers, placed devices as buttons spanning gridRow: N / span heightU). Save/Cancel diff pattern parallel to SystemDiagramArrange. Build 2 uses LABELLED BLOCKS in editor; per-device DXF is Build 3's deliverable job.
-
Verified: cargo 226/226 pass (219 baseline + 7 new rack round-trip tests: CRUD, position round-trip, occupancy overlap rejection, catalogue-height reflection, editor writes no device/catalogue data, non-rackable device refuse, cascade delete). TSC + Vite clean. Backend catalogue counts intact 21/35/18/9/30 after redeploy. DOCKER-USER firewall lock intact (ADR-N069). ezdxf pipeline verified inside container. Screenshots recorded per ADR-N066.
-
NOT IN THIS BUILD (Build 3): the Rack Drawing DELIVERABLE (payload builder, POST /render/rack-drawing endpoint, shared-frame template, front+side views per rack, Generate All one-per-rack, ZIP packaging, hidden-line side-view treatment). Power-symbol library and 3D are out of scope.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Loud-Network-0.9.14-windows-x86_64-setup.exe
0 downloads ·
2026-08-01 18:19:12 +01:00 · 5.3 MiB
-
-
v0.9.13 Stable
released this
2026-08-01 03:25:28 +01:00 | 38 commits to main since this release0.9.13 — Rack Drawing Build 1 of 3: per-MODEL U-height + CAD symbol as catalogue properties (ADR-N085). Foundation for the rack drawing feature. Two per-MODEL properties added, mirroring short_name (ADR-N056) + image_data (ADR-N066) end-to-end: u_height (INTEGER, 1..56, optional; NULL = not rack-mountable), and a front + side DXF CAD symbol pair (BLOB + filename per view, independent per view). Wire discipline: GET /catalogue ships u_height + filenames only (DXF bytes stay server-side — rack drawing renders server-side, ADR-N073); PUSH accepts base64 DXF bytes with three-state semantics (None=no-op, 0/""=clear, positive int/non-empty=set). Backend heuristic rejects non-DXF with HTTP 400. Client LIBRARY_SCHEMA_VERSION 15 → 16. Device Editor gets two new controls next to Model short name / Model image: rack height (numeric, clearable) and CAD symbol Front + Side DXF upload pair (Replace + Remove per view). NO racks, NO editor, NO deliverable in this build — those are Builds 2 and 3. cargo 219/219.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Loud-Network-0.9.13-windows-x86_64-setup.exe
0 downloads ·
2026-08-01 03:25:30 +01:00 · 5.3 MiB
-
Source code (ZIP)
-
v0.9.12 Stable
released this
2026-07-31 13:36:48 +01:00 | 40 commits to main since this release0.9.12 — Excel export as a second output format for the VLAN / Subnet Schedule (ADR-N084). Same payload as the PDF path — one client projection, two server-side outputs; the two cannot diverge in data by construction. New endpoint POST /library/render/vlan-schedule.xlsx via openpyxl; reusable helper deliverable_xlsx.py so a future deliverable can adopt Excel export cheaply. Working spreadsheet (IT edits + returns): header row + freeze panes + AutoFilter, fitted column widths, VLAN colour accent on the ID cell, numeric IDs + device counts stay numeric, reserved 4093/4094 present with blank subnet/gateway + short reserved note. Artifact store extended with an optional extension field (default pdf); revision package ZIP includes both PDF and XLSX for the same VLAN Schedule. Existing PDF path byte-identical. Verify harness: SAME payload → both endpoints → 5/5 rows match. cargo 219/219.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Loud-Network-0.9.12-windows-x86_64-setup.exe
0 downloads ·
2026-07-31 13:36:51 +01:00 · 5.3 MiB
-
Source code (ZIP)
-
v0.9.11 Stable
released this
2026-07-27 18:06:48 +01:00 | 42 commits to main since this release0.9.11 — Switch Diagram port-detail IP + MAC via the SHARED addressability resolver (ADR-N083). Operator report: the IP column on the Switch Diagram was blank for devices that have addresses (visible on IP Tables). Two problems in one: (a) both switch-diagram code paths (server-render + offline fallback) used a pre-ADR-N077 port-only lookup that dropped LAG-owned interface_addresses rows and never received management_interfaces; (b) even with a good lookup, the SUBJECT was the switch's own port (transport, correctly non-addressable per ADR-N077) instead of the PATCHED device's connected interface. Fix: added peerConnectedInterfaceFor(peer, farPort, vlanId) to lib/addressing.ts — returns the peer's addressable interface (port / LAG / mgmt) at the correct VLAN; switch-diagram builders hand it to resolveAddressFor for IP + use iface.mac for MAC. ONE subject, ONE resolver, both switch-diagram paths. IP Tables, Device List, VLAN Schedule, IP Schedule + now Switch Diagram all derive addresses through the same single source. cargo 219/219.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Loud-Network-0.9.11-windows-x86_64-setup.exe
0 downloads ·
2026-07-27 18:06:51 +01:00 · 5.3 MiB
-
Source code (ZIP)
-
v0.9.10 Stable
released this
2026-07-27 16:26:17 +01:00 | 43 commits to main since this release0.9.10 — reserved-range warning is proposal-only (ADR-N082). Follow-up to 0.9.9: after Override -> Confirm on a QSYS Core at 10.55.50.220 (inside the servers .201-.239 band), the same warning kept re-drawing on the row. Assignment was correct; the display-path call of the stateless single-source checkAddressIllegal was re-firing on every render. Fix: one function, context declared by the caller — checkAddressIllegal gains opts.alreadyCommittedForThisInterface; the display caller (row.ipAddress is by construction the persisted value) passes true and foreign_band is suppressed in that mode. Commit-path (proposal) unchanged — Override still gated. Reserved-tail and outside-general-pool untouched. No override marker persisted (ADR-N081 preserved: interface_addresses schema unchanged, notes still NULL). Collision path (ClashDialog) untouched. cargo 218/218.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Loud-Network-0.9.10-windows-x86_64-setup.exe
0 downloads ·
2026-07-27 16:26:20 +01:00 · 5.3 MiB
-
Source code (ZIP)
-
v0.9.9 Stable
released this
2026-07-27 15:54:23 +01:00 | 44 commits to main since this release0.9.9 — reserved-range-ownership Override path (ADR-N081). When an IP lands inside a system range reserved for a different device type (e.g. QSYS Core → 10.55.50.220 inside the servers .201-.239 band), the write is BLOCKED at commit and the row shows the existing warning plus an Override button. Override opens a confirm dialog naming the specific range/owner; Confirm writes exactly like any normal allocation (no flag, no note, storage byte-identical). Cancel reverts. Applies ONLY to the foreign-band ownership branch of the single canonical range check. Collision (address already in use) stays a HARD BLOCK via the distinct ClashDialog — no Override branch. cargo 218/218.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Loud-Network-0.9.9-windows-x86_64-setup.exe
0 downloads ·
2026-07-27 15:54:26 +01:00 · 5.3 MiB
-
Source code (ZIP)
-
v0.9.8 Stable
released this
2026-07-25 01:04:31 +01:00 | 46 commits to main since this release0.9.8 — System Diagram editor + render fixes: app-wide ghost-button colour (fixed at .btn-ghost source, 61 uses), compact 4mm grid + 40mm blocks, canvas fills area, bottom-edge placement, ALL ports drawn (network + non-network) with domain-coloured dots, connections route AROUND blocks, non-overlap auto-arrange. All 4 A3 deliverables PIXEL IDENTICAL. ADR-N080.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Loud-Network-0.9.8-windows-x86_64-setup.exe
0 downloads ·
2026-07-25 01:04:34 +01:00 · 5.3 MiB
-
Source code (ZIP)
-
v0.9.7 Stable
released this
2026-07-24 23:19:44 +01:00 | 47 commits to main since this release0.9.7 — NEW deliverable: System Diagram (Arrange Editor + first render, A1 landscape). Fifth deliverable. Distinct from the per-switch Switch Diagram. LAYOUT-ONLY editor, addressability via ADR-N077. ADR-N079.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Loud-Network-0.9.7-windows-x86_64-setup.exe
0 downloads ·
2026-07-24 23:19:46 +01:00 · 5.3 MiB
-
Source code (ZIP)
-
v0.9.6 Stable
released this
2026-07-24 18:46:50 +01:00 | 48 commits to main since this release0.9.6 — NEW deliverable: IP Tables (address document, one section per non-reserved VLAN, multi-page). Rows built via the shared addressability derivation (ADR-N077) so IP Schedule / Device List / VLAN Schedule / IP Tables all agree. ADR-N078.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Loud-Network-0.9.6-windows-x86_64-setup.exe
0 downloads ·
2026-07-24 18:46:52 +01:00 · 5.3 MiB
-
Source code (ZIP)