{
  "schemaVersion": 2,
  "kind": "ci-artifact-catalog",
  "purpose": "CI artifact catalog only. This file describes build inputs and image artifact naming; it does not describe runtime topology and does not replace deploy.json, config.json, or runtime manifests.",
  "summaryContract": {
    "requiredOnSuccess": [
      "serviceId",
      "sourceCommit",
      "sourceRepo",
      "dockerfile",
      "imageRef",
      "tag",
      "digest",
      "digestRef"
    ],
    "fieldSemantics": {
      "serviceId": "Stable UniDesk service id for the artifact.",
      "sourceCommit": "Full 40-character Git commit used as the source and tag.",
      "sourceRepo": "Git repository URL used to materialize the source.",
      "dockerfile": "Repo-relative Dockerfile path used by CI.",
      "imageRef": "Commit-tagged image reference pushed by CI.",
      "tag": "Commit-pinned image tag; mutable tags such as latest are not valid.",
      "digest": "Registry manifest digest for the pushed image.",
      "digestRef": "Immutable image reference in repository@digest form."
    }
  },
  "defaults": {
    "producer": "D601 Tekton CI",
    "registry": "127.0.0.1:5000",
    "tagTemplate": "{{sourceCommit}}",
    "mutableTagsAllowed": false,
    "runtimeFieldsForbidden": [
      "providerId",
      "namespace",
      "ports",
      "composeService",
      "kubernetesService",
      "healthPath",
      "replicas",
      "env",
      "volumes"
    ]
  },
  "artifacts": [
    {
      "serviceId": "backend-core",
      "kind": "source-build",
      "status": "supported",
      "producer": "ci publish-backend-core",
      "source": {
        "repo": "https://github.com/pikasTech/unidesk",
        "dockerfile": "src/components/backend-core/Dockerfile"
      },
      "image": {
        "repository": "unidesk/backend-core"
      },
      "notes": "Rust backend-core image creation is CI producer only. It is limited to dev image validation and artifact publication; this catalog does not authorize prod deployment verification."
    },
    {
      "serviceId": "frontend",
      "kind": "source-build",
      "status": "supported",
      "producer": "ci publish-user-service",
      "source": {
        "repo": "https://github.com/pikasTech/unidesk",
        "dockerfile": "src/components/frontend/Dockerfile"
      },
      "image": {
        "repository": "unidesk/frontend"
      }
    },
    {
      "serviceId": "baidu-netdisk",
      "kind": "source-build",
      "status": "supported",
      "producer": "ci publish-user-service",
      "source": {
        "repo": "https://github.com/pikasTech/unidesk",
        "dockerfile": "src/components/microservices/baidu-netdisk/Dockerfile"
      },
      "image": {
        "repository": "unidesk/baidu-netdisk"
      }
    },
    {
      "serviceId": "decision-center",
      "kind": "source-build",
      "status": "supported",
      "producer": "ci publish-user-service",
      "source": {
        "repo": "https://github.com/pikasTech/unidesk",
        "dockerfile": "src/components/microservices/decision-center/Dockerfile"
      },
      "image": {
        "repository": "unidesk/decision-center"
      }
    },
    {
      "serviceId": "project-manager",
      "kind": "source-build",
      "status": "supported",
      "producer": "ci publish-user-service",
      "source": {
        "repo": "https://github.com/pikasTech/unidesk",
        "dockerfile": "src/components/microservices/project-manager/Dockerfile"
      },
      "image": {
        "repository": "unidesk/project-manager"
      }
    },
    {
      "serviceId": "oa-event-flow",
      "kind": "source-build",
      "status": "supported",
      "producer": "ci publish-user-service",
      "source": {
        "repo": "https://github.com/pikasTech/unidesk",
        "dockerfile": "src/components/microservices/oa-event-flow/Dockerfile"
      },
      "image": {
        "repository": "unidesk/oa-event-flow"
      }
    },
    {
      "serviceId": "todo-note",
      "kind": "source-build",
      "status": "supported",
      "producer": "platform-infra pipelines-as-code",
      "source": {
        "repo": "https://github.com/pikasTech/unidesk",
        "dockerfile": "src/components/microservices/todo-note/Dockerfile"
      },
      "image": {
        "repository": "unidesk/todo-note"
      },
      "notes": "NC01 PaC/Tekton producer for the vendored Todo Note service. GitOps/Argo consumes the digest-pinned image through config/unidesk-host-k8s.yaml; the legacy external Gitee/Compose producer is retired."
    },
    {
      "serviceId": "code-queue-mgr",
      "kind": "source-build",
      "status": "supported",
      "producer": "ci publish-user-service",
      "source": {
        "repo": "https://github.com/pikasTech/unidesk",
        "dockerfile": "src/components/microservices/code-queue-mgr/Dockerfile"
      },
      "image": {
        "repository": "unidesk/code-queue-mgr"
      },
      "notes": "Main-server internal sidecar artifact producer. Dev artifact consumer validation is supported; prod live apply is supervisor-gated by the deploy/artifact-registry consumer."
    },
    {
      "serviceId": "findjob",
      "kind": "source-build",
      "status": "supported",
      "producer": "ci publish-user-service",
      "source": {
        "repo": "https://gitee.com/Lyon1998/findjob",
        "dockerfile": "Dockerfile"
      },
      "image": {
        "repository": "unidesk/findjob"
      },
      "notes": "D601 direct Compose artifact consumer is implemented for plan/dry-run and dev validation. Live deploy requires a pre-existing labeled registry artifact for this external repo."
    },
    {
      "serviceId": "pipeline",
      "kind": "source-build",
      "status": "supported",
      "producer": "ci publish-user-service",
      "source": {
        "repo": "https://github.com/pikasTech/pipeline",
        "dockerfile": "Dockerfile"
      },
      "image": {
        "repository": "unidesk/pipeline"
      },
      "notes": "D601 direct Compose artifact consumer is implemented for plan/dry-run and dev validation. Live deploy requires a pre-existing labeled registry artifact for this external repo."
    },
    {
      "serviceId": "met-nonlinear",
      "kind": "source-build",
      "status": "supported",
      "producer": "ci publish-user-service",
      "source": {
        "repo": "https://github.com/pikasTech/met_nonlinear",
        "dockerfile": "docker/unidesk/Dockerfile.ml"
      },
      "image": {
        "repository": "unidesk/met-nonlinear"
      },
      "notes": "D601 direct Compose artifact consumer is plan/dry-run only until the long-running met-nonlinear-ts artifact contract is separated from the ML image Dockerfile."
    },
    {
      "serviceId": "k3sctl-adapter",
      "kind": "source-build",
      "status": "supported",
      "producer": "ci publish-user-service",
      "source": {
        "repo": "https://github.com/pikasTech/unidesk",
        "dockerfile": "src/components/microservices/k3sctl-adapter/Dockerfile"
      },
      "image": {
        "repository": "unidesk/k3sctl-adapter"
      },
      "notes": "D601 direct Compose artifact consumer exposes plan/dry-run only; real prod deployment requires supervisor confirmation."
    },
    {
      "serviceId": "mdtodo",
      "kind": "source-build",
      "status": "supported",
      "producer": "ci publish-user-service",
      "source": {
        "repo": "https://github.com/pikasTech/unidesk",
        "dockerfile": "src/components/microservices/mdtodo/Dockerfile"
      },
      "image": {
        "repository": "unidesk/mdtodo"
      },
      "notes": "D601 k3s-managed user-service artifact. Dev consumer targets unidesk-dev/mdtodo-dev; prod consumer targets unidesk/mdtodo."
    },
    {
      "serviceId": "claudeqq",
      "kind": "source-build",
      "status": "supported",
      "producer": "ci publish-user-service",
      "source": {
        "repo": "https://gitee.com/lyon1998/agent_skills",
        "dockerfile": "claudeqq/Dockerfile"
      },
      "image": {
        "repository": "unidesk/claudeqq"
      },
      "notes": "External Gitee source repo. CI exports the claudeqq/ subtree and overlays the UniDesk Dockerfile plus adapter before building."
    },
    {
      "serviceId": "code-queue",
      "kind": "source-build",
      "status": "supported",
      "producer": "ci publish-user-service",
      "source": {
        "repo": "https://github.com/pikasTech/unidesk",
        "dockerfile": "src/components/microservices/code-queue/Dockerfile"
      },
      "image": {
        "repository": "unidesk/code-queue"
      },
      "notes": "Artifact producer is allowed for dev image validation only. The CD consumer for code-queue is dev-only; production artifact deploy, rollout and manifest mutation remain unsupported."
    },
    {
      "serviceId": "filebrowser",
      "kind": "upstream-image",
      "status": "blocked",
      "producer": "ci publish-user-service",
      "upstream": {
        "imageRef": "docker.io/filebrowser/filebrowser:v2.63.3",
        "digestRef": "docker.io/filebrowser/filebrowser@sha256:289c5dd677c56662440f26eeb44266ed9746fe563d2e9100f546bff558534d70",
        "sourceRepo": "https://github.com/filebrowser/filebrowser",
        "sourceRevision": "ca5e249e3c0c94159c2136a0cd431a424eb18472",
        "mirrorRepository": "upstream/filebrowser/filebrowser",
        "mirrorTag": "upstream-v2.63.3",
        "mirrorDigestRef": "127.0.0.1:5000/upstream/filebrowser/filebrowser@{{digest}}"
      },
      "blockedReason": "File Browser uses an upstream image and must not be modeled as a UniDesk Dockerfile source build. Add a future upstream mirror producer before publishing it through CI."
    },
    {
      "serviceId": "filebrowser-d601",
      "kind": "upstream-image",
      "status": "blocked",
      "producer": "ci publish-user-service",
      "upstream": {
        "imageRef": "docker.io/filebrowser/filebrowser:v2.63.3",
        "digestRef": "docker.io/filebrowser/filebrowser@sha256:289c5dd677c56662440f26eeb44266ed9746fe563d2e9100f546bff558534d70",
        "sourceRepo": "https://github.com/filebrowser/filebrowser",
        "sourceRevision": "ca5e249e3c0c94159c2136a0cd431a424eb18472",
        "mirrorRepository": "upstream/filebrowser/filebrowser",
        "mirrorTag": "upstream-v2.63.3",
        "mirrorDigestRef": "127.0.0.1:5000/upstream/filebrowser/filebrowser@{{digest}}"
      },
      "blockedReason": "File Browser D601 uses the same pinned upstream image as filebrowser and must not be modeled as a UniDesk Dockerfile source build. Add a future upstream mirror producer before publishing it through CI."
    }
  ]
}
