• v0.3.49 72a58b4446

    v0.3.49 Stable

    calum released this 2026-07-19 19:41:13 +01:00 | 107 commits to main since this release

    ADR-N061 (0.3.49): switch cell honesty pass — VLAN colour renders as a thin top strip (not a full-cell tint) so a fault colour can safely use the body; cell VLAN badge + strip colour derive from the SWITCH port's OWN access_vlan (the 0.3.48 device-inherited render is retired — no more masking of divergence); mismatch = opaque RED body + yellow "!" fault glyph (retires the 0.3.48 subtle 1px semi-alpha border that was invisible on tints); mismatch derivation now covers the null-side cases (patched switch with no vlan against a device that carries one IS a mismatch — retires the 0.3.48 silent-hide guard); conform-on-device-edit no longer silently no-ops — return shape widened to {conformed, flagged}, deliberate leave-flagged when auto-conform can't apply; PoE emits with U+FE0E VS15 variation selector + text-preferring font stack so CSS color:#000 actually paints the glyph (retires the 0.3.48 emoji-mode override). Walker verifies by RENDERED PIXELS via ImageMagick, not CSS properties. Rust round-trip 3/3 new + 5/5 N060 still green; walker 23/23; full cargo suite green.

    Downloads
  • v0.3.48 cf147c1fca

    v0.3.48 Stable

    calum released this 2026-07-19 14:31:26 +01:00 | 108 commits to main since this release

    ADR-N060 (0.3.48): VLAN-first picker on the switch view — click an empty switch port opens a right-hand panel listing VLANs (id + name + count + colour swatch); expand a VLAN to see the device ports carrying it; select a device port to patch. One-directional access conform: the switch port always conforms to the device port; on VLAN mismatch a CONFORM / CANCEL dialog appears (no "patch anyway"). Trunk device ports show a placeholder notice (Build 2 will add the trunk-config dialog). Same conform primitive also fires from Devices.tsx when the operator edits an access VLAN, so any patched switch port follows. Switch view NEVER writes to a device row; an "Edit device" jump takes the operator to the Devices screen. PoE glyph is now BLACK for contrast against VLAN cell tints (was green). Real-store round-trip 5/5; walker 10/10.

    Downloads
  • v0.3.47 7c469d4263

    v0.3.47 Stable

    calum released this 2026-07-19 04:03:53 +01:00 | 111 commits to main since this release

    ADR-N059: narrow model short_name display to the switch port cell only (Devices list + IP Schedule + everywhere else revert to full 'Brand Model #NNN'); rebuild the switch cell layout per operator spec — line 1 'Port NN' (prefix-stripped), lines 2-3 device name (2-line clamp), bottom-left PoE, bottom-right bare VLAN id. Backend + sync + short_name storage unchanged.

    Downloads
  • v0.3.46 7fdd669d08

    v0.3.46 Stable

    calum released this 2026-07-19 02:02:12 +01:00 | 112 commits to main since this release

    ADR-N058: inline model short_name persistence — fixes the 0.3.45 gap where the operator's inline short_name edit silently reached neither the backend nor the local mirror. Threads short_name through the six inline touch points; adds two Rust test suites (round-trip + field audit) + a standing rule that persisted fields must be verified via real Rust+SQL, never only VITE_MOCK.

    Downloads
  • v0.3.45 5d401b83fa

    v0.3.45 Stable

    calum released this 2026-07-18 23:45:27 +01:00 | 115 commits to main since this release

    ADR-N056: per-MODEL short_name. Backend models vocab gains short_name (matching ADR-N037 media/signal shape); wired through /library/catalogue + push_entries + admin PATCH. Client library mirror + composeDeviceLabel updated (single composition point). Inline edit in device create/edit dialog with model-wide scope hint. ADR-N054 round-trip guard test extended for null + set short_name. Existing 18 real models sync unchanged (short_name null). No project.sqlite touch. Rust 137/137; pytest 50/50; walker 5/5.

    Downloads
  • v0.3.44 c258a51ed9

    v0.3.44 Stable

    calum released this 2026-07-18 21:08:16 +01:00 | 118 commits to main since this release

    ADR-N055: switch-view fixes (grid sort/labels by position/label, composed device name, VLAN colour from patched device, mode-aware VLAN check + media compat in suggestion, 'Port on {device}' copy) + .1 refuse now reverts field + raw-id sweep (clash message + Rust validation rules) + Devices list wider + IP Schedule default group by VLAN. No schema change. Rust 137/137; walker 12/12.

    Downloads
  • v0.3.43 ba5d01ffd0

    v0.3.43 Stable

    calum released this 2026-07-18 18:28:17 +01:00 | 120 commits to main since this release

    ADR-N054: library-cache schema fix + loud sync-skip. Fixes the 0.3.42 operator-reported dtr-reserved-tail sync-skip. Migration 011 rebuilds library_device_type_ranges with device_type_id nullable, preserving the four pre-existing rows. Migration 010's misleading comment corrected. emit_sync_toast now surfaces a plain-language summary when rows are skipped (extends N033 isolation with visibility). New round-trip + schema-guard tests catch future backend/cache schema drift in CI, not in the field. project.sqlite untouched. No backend change. Rust 137/137; walker 4/4.

    Downloads
  • v0.3.42 b5558456b7

    v0.3.42 Stable

    calum released this 2026-07-18 17:30:19 +01:00 | 122 commits to main since this release

    ADR-N053: Phase 4 ROLE-CLASS SCHEME + .1 hard-refuse. Replaces hardcoded MANAGEMENT_VLAN_IDS with is_management_vlan(vlan_id) formula: (vlan_id % 1000 in {0, 10}) and not 4093/4094. So 2000/2010/3000/3010/4000/4010 are all management — bands + auto-proposal + FE illegality flags correct at any site. role_class(vlan_id) = (vlan_id / 10) % 10 recognises Audio/Lighting/sACN/ISAAC/Video for future proofing. ADR-N046 mgmt auto-pick reworked to lowest management VLAN. .1 hard-refuse at write: non-firewall blocked with plain-language message; every other band stays flag-not-refuse. Firewall auto-assign unaffected. No schema change. No backend deploy. Rust 132/132; walker 7/7.

    Downloads
  • v0.3.41 ad21eebd00

    v0.3.41 Stable

    calum released this 2026-07-18 15:19:49 +01:00 | 124 commits to main since this release

    ADR-N052: Phase 4 addressing convention rework. device_type_ranges gains end_offset + subnet_scope; reserved tail (.240-.254) lands as a distinct row with device_type_id NULL. Resolver rewritten so bands PROPOSE + RESERVE — non-convention devices skip every applicable band + reserved tail + .1, fixing the operator's IPMI-got-.2 bug at 0.3.37. Firewall .1 auto-assigns per subnet. Auto-proposed 50/50 reserved/DHCP pool on subnet creation. OVERWRITE backfill via migration 015 (ADR-N024 backup 14 to 15). Two FE illegality flags render red with plain-language reasons; overlap warning fires on live editing. Backend deployed FIRST + wire-verified. cargo test 119/119; pytest 44/44; headless walker 12/12.

    Downloads
  • v0.3.40 61101e384c

    v0.3.40 Stable

    calum released this 2026-07-18 03:54:30 +01:00 | 126 commits to main since this release

    ADR-N051: Phase 4 PATCH VIEWS — switch-side (UniFi-like port grid) + device-side (device → port → switch → port with BACK). PoE + VLAN checks WARN with suggested alternative port and Cancel/Use suggested/Ignore — never block. New vlans.color drives switch-view port cell tint (migration 014, additive, ADR-N024 backup). list_connections drops the ineffective ORDER BY chain_id (rule 1f). Zero effect on 49 real devices.

    Downloads