{
  "project": "Kradle",
  "version": "0.1.0",
  "generatedAt": "2026-08-10T20:00:41.991Z",
  "status": "ready-for-local-development",
  "components": [
    {
      "id": "control-plane",
      "title": "Control Plane",
      "area": "api",
      "resources": [
        "Repository",
        "BranchProtection",
        "RefPolicy"
      ],
      "evidence": [
        "src/control-plane.js",
        "charts/kradle/crds"
      ],
      "implemented": true,
      "resourceCount": 3,
      "docs": "docs/components/control-plane.md"
    },
    {
      "id": "data-plane",
      "title": "Repository Data Plane",
      "area": "git",
      "resources": [
        "Repository"
      ],
      "evidence": [
        "src/data-plane.js",
        "src/gitea-backend.js",
        "charts/kradle/templates/gitea.yaml"
      ],
      "implemented": true,
      "resourceCount": 1,
      "docs": "docs/components/data-plane.md"
    },
    {
      "id": "identity-policy",
      "title": "Identity, RBAC, and Policy",
      "area": "security",
      "resources": [
        "BranchProtection",
        "RefPolicy"
      ],
      "evidence": [
        "src/identity-policy.js",
        "examples/policy-kyverno-pr-title.yaml"
      ],
      "implemented": true,
      "resourceCount": 2,
      "docs": "docs/components/identity-policy.md"
    },
    {
      "id": "runners-ci",
      "title": "Runners and CI",
      "area": "automation",
      "resources": [
        "RunnerPool",
        "Pipeline",
        "Job"
      ],
      "evidence": [
        "src/runners-ci.js",
        "docs/components/runners-ci.md"
      ],
      "implemented": true,
      "resourceCount": 3,
      "docs": "docs/components/runners-ci.md"
    },
    {
      "id": "hooks-events",
      "title": "Hooks and Events",
      "area": "integrations",
      "resources": [
        "WebhookSubscription",
        "WebhookDelivery"
      ],
      "evidence": [
        "src/hooks-events.js",
        "docs/components/hooks-events.md"
      ],
      "implemented": true,
      "resourceCount": 2,
      "docs": "docs/components/hooks-events.md"
    },
    {
      "id": "operations-publishing",
      "title": "Operations and Publishing",
      "area": "release",
      "resources": [
        "APIService",
        "Deployment"
      ],
      "evidence": [
        "src/operations.js",
        "charts/kradle",
        "scripts/setup-minikube.mjs"
      ],
      "implemented": true,
      "resourceCount": 0,
      "docs": "docs/components/operations-publishing.md"
    },
    {
      "id": "web-ui",
      "title": "Web UI",
      "area": "experience",
      "resources": [
        "View"
      ],
      "evidence": [
        "src/web-ui.js",
        "public/index.html"
      ],
      "implemented": true,
      "resourceCount": 1,
      "docs": "docs/components/web-ui.md"
    }
  ],
  "resources": {
    "repository": "Repository",
    "branchProtection": "BranchProtection",
    "refPolicy": "RefPolicy",
    "runnerPool": "RunnerPool",
    "subscription": "WebhookSubscription",
    "pullRequest": "PullRequest",
    "pipelineRun": "Pipeline",
    "delivery": "WebhookDelivery",
    "replay": "WebhookDelivery",
    "triageView": "View"
  },
  "storage": {
    "etcd": [
      "Repository",
      "BranchProtection",
      "RefPolicy",
      "RunnerPool",
      "WebhookSubscription",
      "View"
    ],
    "postgres": [
      "PullRequest",
      "Pipeline",
      "Job",
      "Job",
      "WebhookDelivery",
      "WebhookDelivery"
    ]
  },
  "flows": [
    "Open and review a PR",
    "Debug a failing run",
    "Configure a runner pool",
    "Add a webhook and verify it works",
    "Write a PR policy with audit-to-enforce rollout",
    "Cross-repo triage with saved filters"
  ],
  "operations": {
    "chart": "charts/kradle",
    "setup": "scripts/setup-minikube.mjs",
    "releaseGates": [
      "build",
      "docs and ontology coverage",
      "unit acceptance tests",
      "e2e package lifecycle tests",
      "package validation",
      "minikube dry-run setup",
      "smoke flow",
      "backup restore validation",
      "known limitations reviewed"
    ],
    "observability": {
      "metrics": [
        "api_request_latency",
        "postgres_aggregate_lag",
        "gitea_receive_pack_latency",
        "runner_queue_depth",
        "webhook_delivery_phase",
        "admission_denials"
      ],
      "logs": [
        "control-plane audit",
        "gitea access",
        "runner job",
        "webhook dispatcher",
        "controller reconcile"
      ],
      "alerts": [
        "APIService unavailable",
        "Postgres unavailable",
        "repository service unavailable",
        "runner saturation",
        "webhook failure burst",
        "backup validation failed"
      ]
    }
  },
  "validation": []
}