{"record":{"id":"7e47e324404de031","repo":"wavetermdev/waveterm","slug":"job-manager-only-supported-on-unix-systems-not-s","errorCode":null,"errorMessage":"job manager only supported on unix systems, not %s","messagePattern":"job manager only supported on unix systems, not (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/jobmanager/jobmanager.go","lineNumber":50,"sourceCode":"var WshCmdJobManager JobManager\n\ntype JobManager struct {\n\tClientId              string\n\tJobId                 string\n\tCmd                   *JobCmd\n\tJwtPublicKey          []byte\n\tJobAuthToken          string\n\tStreamManager         *StreamManager\n\tInputQueue            *utilds.QuickReorderQueue[wshrpc.CommandJobInputData]\n\tlock                  sync.Mutex\n\tattachedClient        *MainServerConn\n\tconnectedStreamClient *MainServerConn\n\tpendingStreamMeta     *wshrpc.StreamMeta\n}\n\nfunc SetupJobManager(clientId string, jobId string, publicKeyBytes []byte, jobAuthToken string, readyFile *os.File) error {\n\tif runtime.GOOS != \"linux\" && runtime.GOOS != \"darwin\" {\n\t\treturn fmt.Errorf(\"job manager only supported on unix systems, not %s\", runtime.GOOS)\n\t}\n\tWshCmdJobManager.ClientId = clientId\n\tWshCmdJobManager.JobId = jobId\n\tWshCmdJobManager.JwtPublicKey = publicKeyBytes\n\tWshCmdJobManager.JobAuthToken = jobAuthToken\n\tWshCmdJobManager.StreamManager = MakeStreamManager()\n\tWshCmdJobManager.InputQueue = utilds.MakeQuickReorderQueue[wshrpc.CommandJobInputData](JobInputQueueSize, JobInputQueueTimeout)\n\terr := wavejwt.SetPublicKey(publicKeyBytes)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to set public key: %w\", err)\n\t}\n\terr = MakeJobDomainSocket(clientId, jobId)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tgo func() {\n\t\tdefer func() {","sourceCodeStart":32,"sourceCodeEnd":68,"githubUrl":"https://github.com/wavetermdev/waveterm/blob/a4447c1563b2df285ab89e76c82f91e1a1a49c1e/pkg/jobmanager/jobmanager.go#L32-L68","documentation":"SetupJobManager only supports linux and darwin; on any other GOOS it refuses to initialize the job manager daemon. The error reports the unsupported GOOS value so the caller knows why job management is unavailable.","triggerScenarios":"Calling SetupJobManager (via the wsh jobManagerRun path, e.g. `wsh job` start) on windows or another non-unix GOOS like plan9, wasip1, or js.","commonSituations":"Running Wave Terminal's job manager features on Windows; CI matrix job accidentally testing the wsh job command on an unsupported OS; cross-compiling and running the binary on an unexpected platform.","solutions":["Run the job manager on linux or darwin only","On Windows, use an alternative such as WSL2 where GOOS is linux inside the subsystem","Add an early GOOS guard in your own tooling so unsupported platforms never invoke the job command","If you need windows support, file/track an upstream feature request; PTY/job-manager plumbing is unix-specific"],"exampleFix":"// before\nSetupJobManager(clientId, jobId, pubKey, token, readyFile)\n// after\nif runtime.GOOS != \"linux\" && runtime.GOOS != \"darwin\" {\n    return fmt.Errorf(\"job manager unsupported on %s; use linux/darwin or WSL\", runtime.GOOS)\n}\nSetupJobManager(clientId, jobId, pubKey, token, readyFile)","handlingStrategy":"validation","validationCode":"if runtime.GOOS != \"linux\" && runtime.GOOS != \"darwin\" {\n    return fmt.Errorf(\"job manager requires linux or darwin (got %s); use WSL on Windows\", runtime.GOOS)\n}","typeGuard":null,"tryCatchPattern":"if err := jobmanager.SetupJobManager(cid, jid, pub, tok, rf); err != nil {\n    if strings.Contains(err.Error(), \"only supported on unix\") {\n        // disable job features in UI, do not retry\n        return\n    }\n    return err\n}","preventionTips":["Feature-gate job functionality by runtime.GOOS at startup","On Windows prefer WSL2 for the daemon","Skip unsupported OSes in CI matrices","Never attempt retries for platform errors"],"tags":["platform","unsupported-os","jobmanager"],"backgroundTag":"unsupported-platform","analyzedSha":"a4447c1563b2df285ab89e76c82f91e1a1a49c1e","analyzedAt":"2026-09-01T15:26:23.972Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}