Files
datadunia cbacfea7f2
NexusGuard CI / server-core-test (push) Failing after 3m6s
NexusGuard CI / server-core-build (push) Has been skipped
NexusGuard CI / device-agent-test (push) Failing after 4s
NexusGuard CI / device-agent-cross-build (amd64, linux) (push) Has been skipped
NexusGuard CI / device-agent-cross-build (amd64, windows) (push) Has been skipped
NexusGuard CI / device-agent-cross-build (arm64, linux) (push) Has been skipped
NexusGuard CI / dashboard-test (push) Failing after 4s
NexusGuard CI / dashboard-dist (push) Has been skipped
chore: update submodule refs, clean up plans/evidence, update .gitignore
2026-06-07 23:53:15 +07:00

5.9 KiB

Bug Fixes and Features Plan

Bug Fixes

1. Nodes Edit Button - Hard to Click / Wrong HTML Tag Location

Location: apps/dashboard-ui/src/views/Servers.vue - Node cards edit button Issue: Edit button on node cards is difficult to click or has incorrect HTML structure Root Cause: Button z-index, positioning, or overlapping elements Files: Servers.vue (lines 155-157) Status: DONE - Changed button size from "sm" to "md" for better clickability

2. Dashboard - Missing Turn On WireGuard Button for 2nd+ Nodes

Location: apps/dashboard-ui/src/views/Servers.vue and apps/server-core/api/wg.go Issue: Only first node (Local Primary Node) has WG Up/Down buttons; additional nodes lack toggle Root Cause: wg.go Status/Up/Down handlers only work with hardcoded wg0 interface; multi-interface support needed Files:

  • apps/dashboard-ui/src/views/Servers.vue - Add WG toggle button per node
  • apps/server-core/api/wg.go - Fix to accept interface name parameter
  • apps/server-core/internal/wgmanager/wgmanager_linux.go - Ensure multi-interface support Status: BACKEND DONE - wg.go accepts interface param, queries by interface_name, supports multi-interface Status: FRONTEND DONE - WG Up/Down buttons added to node cards, calls API with interface param

3. Advanced Node Settings - Missing Notes/Descriptions for PreUp, PostUp, PreDown, PostDown

Location: apps/dashboard-ui/src/views/Servers.vue (lines 83-98) Issue: Advanced scripts fields (PreUp, PostUp, PreDown, PostDown) lack helper text/descriptions like Firewall section has Files: Servers.vue - Add hints/descriptions similar to FirewallEditor Status: DONE - Added descriptive hints for Table, PreUp, PostUp, PreDown, PostDown

4. Popup/Modal Inconsistency - Backdrop Styling

Location: Multiple modals in Servers.vue, Devices.vue, DeviceDetail.vue, FirewallEditor.vue Issue: Nodes modal backdrop styling is better than Devices modal; inconsistent across views Files: Standardize modal wrapper component or CSS classes Status: DONE - Servers.vue modals converted to NgModal, consistent backdrop (bg-bg-overlay)

5. Firewall Popup - Not User/Mobile Friendly

Location: apps/dashboard-ui/src/components/FirewallEditor.vue Issue: Form layout not responsive; input fields too small on mobile; buttons not touch-friendly Files: FirewallEditor.vue - Responsive grid, larger touch targets, better spacing Status: DONE - Responsive grid (1/2/5 cols), button full width on mobile, table scroll-x-auto

6. Firewall wg_isolation - Verify Implementation Matches Plan

Location: apps/server-core/internal/firewall/nftables_linux.go - InitNetworkForServer() Issue: Verify wg_isolation rules are correctly implemented per-server with smart isolation (allow server IP, drop peer-to-peer) Files: nftables_linux.go - InitNetworkForServer() and TeardownNetworkForServer() Status: DONE - Implementation verified: smart isolation (server IP allow, peer-to-peer drop), per-interface chains with jump rules, proper cleanup


Features

1. Traffic Record Table - Only Show Records with RX or TX Data

Location: apps/dashboard-ui/src/views/TrafficHistory.vue, apps/server-core/api/traffic.go, apps/server-core/internal/traffic/recorder.go Issue: Table shows all records including zero-byte entries; should filter to only show records with rx > 0 or tx > 0 Files:

  • TrafficHistory.vue - Filter trafficData before display
  • traffic.go - Add filter option to API Status: DONE - Added has_traffic query param, toggle in UI, backend filtering (rx>0 OR tx>0)

2. Traffic Record Table - Sum Per Hour Aggregation

Location: apps/server-core/api/traffic.go, apps/server-core/internal/traffic/recorder.go Issue: Add hourly aggregation option for traffic table when query supports it Files:

  • traffic.go - Add aggregation parameter to GetSummary/GetDeviceTraffic
  • recorder.go - Add GetHourlyTraffic method with SQL GROUP BY hour Status: DONE - Added GetHourlyTraffic endpoint with SQL GROUP BY hour, returns HourlyTraffic[]

Implementation Priority

Priority Task Category
P1 Nodes edit button fix Bug
P1 Dashboard WG toggle for all nodes Bug
P1 Verify wg_isolation implementation Bug
P2 Advanced settings descriptions Bug
P2 Modal consistency (backdrop) Bug
P2 Firewall mobile-friendly Bug
P2 Traffic table filter (RX/TX > 0) Feature
P3 Traffic hourly aggregation Feature
P3 Firewall mobile-friendly Bug

Code Structure Reference

Frontend (Vue 3 + TypeScript)

apps/dashboard-ui/src/ |-- views/ | |-- Servers.vue # Node management (edit, WG toggle, advanced) | |-- Devices.vue # Device list, firewall | |-- DeviceDetail.vue # Device detail, firewall editor | |-- TrafficHistory.vue # Traffic table, filters | |-- ... |-- components/ | |-- FirewallEditor.vue # Firewall rules UI | |-- ui/ # Ng* design system components | |-- ... |-- ...

Backend (Go)

apps/server-core/ |-- api/ | |-- servers.go # Node CRUD, WG Up/Down | |-- wg.go # WG interface control | |-- traffic.go # Traffic API | |-- ... |-- internal/ | |-- firewall/ | | |-- nftables_linux.go # InitNetworkForServer, Teardown | | |-- ... | |-- wgmanager/ | | |-- wgmanager_linux.go # Multi-interface WgManager | |-- traffic/ | |-- recorder.go # Traffic queries


Next Steps

  1. Create detailed task breakdown for each bug/feature
  2. Start with P1 bugs (edit button, WG toggle, wg_isolation)
  3. Implement fixes following existing code patterns
  4. Archive completed plan when done

Notes

  • All plans from .sisyphus have been migrated to .omo/plans/archive/
  • New plan saved at .omo/plans/bugfixes-and-features.md
  • Evidence, notepads, references migrated to .omo/
  • Boulder state copied to .omo/boulder.json