{"record":{"id":"ca33350380b75d98","repo":"netbirdio/netbird","slug":"add-status-w","errorCode":null,"errorMessage":"add status: %w","messagePattern":"add status: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"client/internal/debug/debug.go","lineNumber":419,"sourceCode":"\n\tif err := g.createArchive(); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif err := g.archive.Close(); err != nil {\n\t\treturn \"\", fmt.Errorf(\"close archive writer: %w\", err)\n\t}\n\n\treturn bundlePath.Name(), nil\n}\n\nfunc (g *BundleGenerator) createArchive() error {\n\tif err := g.addReadme(); err != nil {\n\t\treturn fmt.Errorf(\"add readme: %w\", err)\n\t}\n\n\tif err := g.addStatus(); err != nil {\n\t\treturn fmt.Errorf(\"add status: %w\", err)\n\t}\n\n\tif err := g.addConfig(); err != nil {\n\t\tlog.Errorf(\"failed to add config to debug bundle: %v\", err)\n\t}\n\n\tif err := g.addResolvedDomains(); err != nil {\n\t\tlog.Errorf(\"failed to add resolved domains to debug bundle: %v\", err)\n\t}\n\n\tif g.includeSystemInfo {\n\t\tg.addSystemInfo()\n\t}\n\n\tif err := g.addProf(); err != nil {\n\t\tlog.Errorf(\"failed to add profiles to debug bundle: %v\", err)\n\t}\n","sourceCodeStart":401,"sourceCodeEnd":437,"githubUrl":"https://github.com/netbirdio/netbird/blob/93e97f4bf1ad715072dcb3fb6cdb1763431b5a9c/client/internal/debug/debug.go#L401-L437","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Free space on the temp filesystem and retry the debug bundle.","Set BundleDeps.TempDir to a location with enough capacity.","Reproduce with daemon debug logging to confirm whether addFileToZip reported 'create zip file header' or 'write file to zip' underneath."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"// Go: read the wrapped chain to distinguish status-specific failure\nif err := gen.Generate(); err != nil {\n    if strings.Contains(err.Error(), \"add status\") {\n        // status.txt zip write failed; verify temp dir health and retry\n    }\n}","preventionTips":["Keep the temp volume writable and non-full.","Remember statusRecorder/profile errors do not fail the bundle; only I/O does."],"tags":["go","netbird","zip","debug-bundle","status","disk-full"],"backgroundTag":null,"analyzedSha":"93e97f4bf1ad715072dcb3fb6cdb1763431b5a9c","analyzedAt":"2026-08-16T03:09:19.136Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}