fix(daemon): handle socket errors (#1335)

Md Mushfiqur Rahim and FromSi created

## What?

Handles previously ignored daemon startup errors in `daemon/daemon.go`:

- checks `os.Remove` when cleaning up a stale daemon socket, while
ignoring `os.IsNotExist`
- checks `os.Chmod` when setting daemon socket permissions
- wraps both failures with contextual error messages

## Why?

Closes #714
Closes #719

Ignoring these errors could either hide stale socket cleanup failures,
leading to confusing daemon startup errors, or leave the daemon socket
with unintended permissions if `chmod` failed. Returning explicit errors
makes startup failures clearer and keeps socket permissions handling
safer.

---------

Co-authored-by: FromSi <fromsi665@gmail.com>

Change summary

daemon/daemon.go | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)

Detailed changes

daemon/daemon.go 🔗

@@ -89,7 +89,9 @@ func (d *Daemon) Run() error {
 
 	// Remove stale socket file.
 	sockPath := daemonrpc.SocketPath()
-	os.Remove(sockPath) //nolint:errcheck,gosec
+	if err := os.Remove(sockPath); err != nil && !os.IsNotExist(err) {
+		return fmt.Errorf("remove stale socket: %w", err)
+	}
 
 	// Listen on Unix domain socket.
 	var err error
@@ -100,7 +102,9 @@ func (d *Daemon) Run() error {
 	defer d.listener.Close() //nolint:errcheck
 
 	// Set socket permissions (owner only).
-	os.Chmod(sockPath, 0700) //nolint:errcheck,gosec
+	if err := os.Chmod(sockPath, 0700); err != nil { // #nosec G302
+		return fmt.Errorf("set socket permissions: %w", err)
+	}
 
 	log.Printf("daemon: listening on %s (PID %d)", sockPath, os.Getpid())