{"record":{"id":"0d7f309ae111657d","repo":"siyuan-note/siyuan","slug":"conf-language-77-msg-endpoint-s-is-in-workspace","errorCode":null,"errorMessage":"Conf.Language(77), msg: endpoint [%s] is in workspace","messagePattern":"Conf\\.Language\\(77\\), msg: endpoint \\[(.+?)\\] is in workspace","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"kernel/model/sync.go","lineNumber":712,"sourceCode":"\tlocal.Endpoint = util.NormalizeLocalPath(local.Endpoint)\n\n\tabsPath, err := filepath.Abs(local.Endpoint)\n\tif nil != err {\n\t\tmsg := fmt.Sprintf(\"get endpoint [%s] abs path failed: %s\", local.Endpoint, err)\n\t\tlogging.LogError(msg)\n\t\terr = fmt.Errorf(Conf.Language(77), msg)\n\t\treturn\n\t}\n\tif !gulu.File.IsExist(absPath) {\n\t\tmsg := fmt.Sprintf(\"endpoint [%s] not exist\", local.Endpoint)\n\t\tlogging.LogError(msg)\n\t\terr = fmt.Errorf(Conf.Language(77), msg)\n\t\treturn\n\t}\n\tif util.IsAbsPathInWorkspace(absPath) || filepath.Clean(absPath) == filepath.Clean(util.WorkspaceDir) {\n\t\tmsg := fmt.Sprintf(\"endpoint [%s] is in workspace\", local.Endpoint)\n\t\tlogging.LogError(msg)\n\t\terr = fmt.Errorf(Conf.Language(77), msg)\n\t\treturn\n\t}\n\n\tif gulu.File.IsSubPath(absPath, util.WorkspaceDir) {\n\t\tmsg := fmt.Sprintf(\"endpoint [%s] is parent of workspace\", local.Endpoint)\n\t\tlogging.LogError(msg)\n\t\terr = fmt.Errorf(Conf.Language(77), msg)\n\t\treturn\n\t}\n\n\tlocal.Timeout = util.NormalizeTimeout(local.Timeout)\n\tlocal.ConcurrentReqs = util.NormalizeConcurrentReqs(local.ConcurrentReqs, conf.ProviderLocal)\n\tif Conf.Sync.Provider == conf.ProviderLocal && (Conf.Sync.Local == nil ||\n\t\tfilepath.Clean(Conf.Sync.Local.Endpoint) != filepath.Clean(local.Endpoint)) {\n\t\tif err = requireCompleteAssetDownloads(); err != nil {\n\t\t\treturn\n\t\t}\n\t}","sourceCodeStart":694,"sourceCodeEnd":730,"githubUrl":"https://github.com/siyuan-note/siyuan/blob/9f775e8a12daef8255556097396f9b2739078892/kernel/model/sync.go#L694-L730","documentation":"Error from SetSyncProviderLocal: the configured local endpoint resolves inside the SiYuan workspace directory (or is the workspace itself), which would make sync recursively ingest workspace data; the request is rejected and wrapped with the localized template Conf.Language(77).","triggerScenarios":"Thrown at kernel/model/sync.go:712 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Choose an endpoint directory outside the workspace","Move the sync data folder elsewhere and update the endpoint","Use the workspace's own sync mechanism instead of pointing at the workspace"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"9f775e8a12daef8255556097396f9b2739078892","analyzedAt":"2026-09-19T03:17:15.984Z","contentChangedAt":"2026-09-19T03:17:15.984Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}