{"record":{"id":"bf7fd9c3b2046d21","repo":"deepseek-ai/deepseek-harness","slug":"deepseek-ai-dsh-jobs-is-the-abstract-job-registry","errorCode":null,"errorMessage":"@deepseek-ai/dsh-jobs is the abstract job registry seam; load an implementation such as @deepseek-ai/dsh-jobs-local instead","messagePattern":"@deepseek-ai/dsh-jobs is the abstract job registry seam; load an implementation such as @deepseek-ai/dsh-jobs-local instead","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/jobs/jobs/src/index.ts","lineNumber":68,"sourceCode":" *   round of contained listener notification, even against a late producer\n *   outcome. Completion is announced last, after the record is committed and\n *   every other observer of the settlement has seen it, because a reporter\n *   may open a model turn synchronously.\n * - {@link start} refuses work while no attached job controller serves the\n *   spec's owner, so a producer cannot start work that owner cannot collect\n *   or stop. One registry serves every composition in the process, so this\n *   question — and completion-listener delivery — is owner-relative rather\n *   than process-wide: registrations made from an unscoped context serve\n *   every owner, and registrations made under an agent composition's scope\n *   serve exactly the agents composed under it.\n */\nexport abstract class JobRegistry extends Service {\n  constructor(ctx: Context) {\n    // `abstract` erases at runtime, so a composition row naming this package\n    // would register a ctx.jobs with no method implementations and fail far\n    // from the misconfiguration. Fail loud at load instead.\n    if (new.target === JobRegistry) {\n      throw new Error('@deepseek-ai/dsh-jobs is the abstract job registry seam; load an implementation such as @deepseek-ai/dsh-jobs-local instead')\n    }\n    super(ctx, 'jobs')\n  }\n\n  /**\n   * Preflight access, validation, owner cleanup, and implementation-owned\n   * admission before starting and atomically registering work. Any preflight\n   * rejection leaves no job id or execution resource. A throwing starter\n   * leaves nothing registered; after it returns, registration cannot fail.\n   * Settlement records the outcome, notifies listeners, and releases waiters.\n   * @param spec - job identity, owner, and synchronous starter.\n   * @returns the registry-issued `<kind>-N` id.\n   */\n  abstract start(spec: JobStart): JobId\n\n  /**\n   * List caller-owned and unowned jobs in registration order without exposing\n   * another session's labels.","sourceCodeStart":50,"sourceCodeEnd":86,"githubUrl":"https://github.com/deepseek-ai/deepseek-harness/blob/b150a551b8d465e31e418e1b2eaf5e79bbb7d28e/packages/jobs/jobs/src/index.ts#L50-L86","documentation":"Error \"@deepseek-ai/dsh-jobs is the abstract job registry seam; load an implementation such as @deepseek-ai/dsh-jobs-local instead\" thrown in deepseek-ai/deepseek-harness.","triggerScenarios":"Thrown at packages/jobs/jobs/src/index.ts:68 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Load an implementation such as @deepseek-ai/dsh-jobs-local instead of the abstract @deepseek-ai/dsh-jobs seam."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"b150a551b8d465e31e418e1b2eaf5e79bbb7d28e","analyzedAt":"2026-08-24T18:12:29.105Z","schemaVersion":2},"datasetVersion":"2026-08-24T22:17:12.610Z"}