netbirdio/netbird · error

add status: %w

Error message

add status: %w

What it means

Returned by BundleGenerator.createArchive in client/internal/debug/debug.go:419 when addStatus fails. addStatus builds the status text in memory (profile name lookup errors are swallowed; only a failed statusRecorder is skipped) and writes status.txt through addFileToZip, so the wrapped error is a zip CreateHeader or io.Copy failure against the bundle temp file. It is a mandatory step, so the bundle generation aborts.

Source

Thrown at client/internal/debug/debug.go:419

	if err := g.createArchive(); err != nil {
		return "", err
	}

	if err := g.archive.Close(); err != nil {
		return "", fmt.Errorf("close archive writer: %w", err)
	}

	return bundlePath.Name(), nil
}

func (g *BundleGenerator) createArchive() error {
	if err := g.addReadme(); err != nil {
		return fmt.Errorf("add readme: %w", err)
	}

	if err := g.addStatus(); err != nil {
		return fmt.Errorf("add status: %w", err)
	}

	if err := g.addConfig(); err != nil {
		log.Errorf("failed to add config to debug bundle: %v", err)
	}

	if err := g.addResolvedDomains(); err != nil {
		log.Errorf("failed to add resolved domains to debug bundle: %v", err)
	}

	if g.includeSystemInfo {
		g.addSystemInfo()
	}

	if err := g.addProf(); err != nil {
		log.Errorf("failed to add profiles to debug bundle: %v", err)
	}

View on GitHub (pinned to 93e97f4bf1)

Solutions

  1. Free space on the temp filesystem and retry the debug bundle.
  2. Set BundleDeps.TempDir to a location with enough capacity.
  3. Reproduce with daemon debug logging to confirm whether addFileToZip reported 'create zip file header' or 'write file to zip' underneath.
Defensive patterns

Strategy: retry

Try / catch

// Go: read the wrapped chain to distinguish status-specific failure
if err := gen.Generate(); err != nil {
    if strings.Contains(err.Error(), "add status") {
        // status.txt zip write failed; verify temp dir health and retry
    }
}

Prevention

When it happens

Trigger: Bundle generation while the write of the status.txt zip entry fails: temp filesystem full, temp file invalidated, or device I/O error. Note the status content itself (GetActiveProfile errors, missing recorder) does not trigger this error.

Common situations: Out-of-space temp volume on the peer; containerized daemon with a small tmpfs; the deferred Close error pattern where the first failing mandatory entry is readme/status.

Related errors


AI-assisted analysis of netbirdio/netbird@93e97f4bf1 (2026-08-16). Data as JSON: /api/errors/ca33350380b75d98. Report an issue: GitHub.