Skip to content

Dev#529

Merged
mayanayza merged 110 commits intomainfrom
dev
Mar 7, 2026
Merged

Dev#529
mayanayza merged 110 commits intomainfrom
dev

Conversation

@mayanayza
Copy link
Collaborator

No description provided.

mayanayza added 30 commits March 5, 2026 11:39
- Add "I'd rather not say" option to referral source dropdown
- Make "Other" text field required with onBlur validation
- Disable Continue button when "Other" selected but text empty
- Make Continue button full-width
- 800ms was too aggressive, causing missed hostname resolutions
- When a host was auto-named with its IP and a hostname is later
  resolved, update the display name to the hostname
- Set staticTags context in ReadOnlyInspectorPanel so all child
  components in the share/embed tree render plain Tag instead of
  interactive EntityTag
- ListSelectItem reads staticTags context to complement existing prop
- Fix EntityTag.handleClick to respect disabled prop (early return)
- Update/add/remove docs links in Create Daemon and Upgrade modals
  to point to new documentation structure
- Add polling mode docs hint to Configure step
- Remove "multiple daemons" hint from Install step
- Remove "included" prefix from seat/network/host addon pricing
- Change default daemon mode to daemon_poll
- Subnet CIDR input now shows "192.168.1.0/24 or 2001:db8::/32"
- Interface IP input now shows "192.168.1.100 or 2001:db8::1"
- Cosmetic change only; validation already accepts IPv6 via ipaddr.js
- Add disable_password_login config field, CLI arg, env var, and
  public config response following the disable_registration pattern
- Add AuthPasswordLoginDisabled and AuthRegistrationDisabled error
  codes; migrate existing disable_registration checks to use codes
- Guard login, register, and check-email endpoints with 403 when
  password login is disabled (setup/OIDC/password-reset unaffected)
- Log startup warning if password login disabled without OIDC
- Hide email/password form in LoginModal when disabled + OIDC exists,
  promoting OIDC buttons to primary; show error if no providers
- Hide "Continue with email" in RegisterModal when disabled; prevent
  auto-skip to email step
- Add i18n string, .env.example entry, regenerate types
- Auto-generate API key when advancing from Configure step for first-time
  daemon creators, reducing the wizard from 3 steps to 2
- Make mainFlow and tabs dynamic based on isFirstDaemon flag
- Show loading spinner on Next button during auto-generation
- Reset isAutoGenerating state on modal close
- Enable daemon_poll feature for Free tier (backend + billing JSON)
- Default daemon wizard mode to daemon_poll instead of server_poll
- Hide checklist dismiss button until at least one step is complete
- Redirect to Home tab when closing daemon modal with no daemons
- Add analytics events to daemon creation wizard steps
- Update Free plan incremental_features, remove daemon_poll from Starter
- Remove dead plan-restriction standby logic from billing enforcement
  and daemon creation (all plans now support daemon_poll)
- Add daily background task that checks for daemons with no completed
  discovery in 30 days and sets them to standby
- Auto-clear standby when a discovery session is started for the daemon
- Add daemon standby notification email to org owner and installer
- Add created_before() filter method to StorableFilter for reuse
- Migration clears all existing plan-based standby flags
- Add backend Mermaid and Confluence export endpoints with auth/tenant isolation
- Refactor ExportButton from single PNG button to dropdown with 4 formats
- Add SVG export via html-to-image's toSvg() on the frontend
- Add Mermaid (.mmd) and Confluence wiki markup exports via backend API
- Add 3 new billing feature flags: svg_export, mermaid_export, confluence_export
- Rename diagram_export to png_export in billing types
- Gate SVG (Starter+), Mermaid (Pro+/Community), Confluence (Team+)
- Pass topologyId prop to ExportButton in both TopologyTab and ReadOnlyTopologyViewer
- Remove dead plan-restriction standby logic from billing enforcement
  and daemon creation (all plans now support daemon_poll)
- Add daily background task that checks for daemons with no completed
  discovery in 30 days and sets them to standby
- Auto-clear standby when a discovery session is started for the daemon
- Add daemon standby notification email to org owner and installer
- Add created_before() filter method to StorableFilter for reuse
- Migration clears all existing plan-based standby flags
- Show IPv6 placeholder when subnet CIDR is IPv6, IPv4 otherwise
- Detected by checking for ':' in the CIDR string
DaemonPoll: tells user to restart the daemon after queueing a session.
ServerPoll: tells user the daemon will resume automatically on next
polling cycle.
- Add InterfaceIp variant to HostOrderField enum with LEFT JOIN
  subquery selecting the lowest-position interface per host
- Add interface_ip orderable field to HostTab with getValue
  displaying the primary interface IP
- Add i18n label for the new field
- Regenerate TypeScript types from updated OpenAPI schema
- Refactor export dropdown to modal with format cards and descriptions
- Fix backend endpoint URL: /api/v1/topology/ (singular, not plural)
- Replace UpgradeButton with UpgradeBadge, clicking opens billing modal
- Hide upgrade-gated options in share/embed views
- Pass isShareView prop from ReadOnlyTopologyViewer
- Add i18n keys for modal title and format descriptions
- Add required validator to referral source field with required indicator
- Change Continue button to trigger form validation instead of being disabled
- Non-cloud deployments bypass form validation (no referral fields shown)
mayanayza and others added 28 commits March 6, 2026 13:52
Use CSS variable --color-topology-zone instead of JS-computed rgba
for the infrastructure zone gradient. This ensures the zone color
switches correctly when the dark class is temporarily toggled during
topology export with a different theme than current.
Dark: gray-900 at 0.2 (subtle dark tint), light: gray-200 at 0.2
(subtle light tint). Previous commit used gray-400/500 which was
far too visible.
Replace hardcoded dark-only border-blue-600/30 bg-blue-900/20 with
card card-static for proper light/dark mode support.
- Wrap form.setFieldValue in untrack() to prevent the effect
  from re-triggering when form state changes
- Remove required validator from referralSource select
- Keep "Other" text field conditionally required
- app.html flash script reads ?theme=light|dark to override stored preference
- generateShareUrl/generateEmbedUrl/generateEmbedCode accept optional theme param
- ShareModal gets theme selector (Default/Light/Dark) in display options
- ShareView applies ?theme= override on mount, restores on destroy
- Embed iframe border color adapts to selected theme
- Fix hardcoded text-gray-300 labels in ShareModal to use text-secondary
Track OS prefers-color-scheme as reactive $state instead of
calling matchMedia inside $derived. Svelte 5 can't track media
query changes as dependencies, so the old approach required a
page reload. Now the matchMedia change listener updates a
reactive variable that $derived properly responds to.
Replace hardcoded border-gray-700 with card card-static classes
so the demo embed section themes correctly in light/dark mode.
- Add light/dark background images for login, onboarding, verify-email
- Swap background image and overlay based on resolved theme
- Reduce blur and overlay opacity for more visible backgrounds
- Fix lint errors: unused imports, missing each key, prefer-const
- Cache generated fixtures keyed on backend source hash
- On cache miss, install Rust and generate fixtures before Node steps
- Fixes svelte-check failures on PRs due to missing gitignored fixture files
- Remove 6 unused keys: common_documentationLink, common_documentationLinkText,
  daemons_activateAfterCreation, daemons_activateAfterCreationBody,
  daemons_doThisLater, daemons_setupScanning
- Replace shares_shareTheme with common_theme to eliminate duplicate
- Update doc comments to match frontend-exported field definitions
- Normalize trailing periods in config sync test comparison
- Stale helpText values from v0.14.15 fixture update didn't match
  current i18n strings, causing config_fields_are_in_sync test failure
- Override default ./ui working directory so cd backend works
@mayanayza mayanayza merged commit 46a2063 into main Mar 7, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant