10-backend/internal/artifacts/artifact-manifest.json

{
  "manifestVersion": "1",
  "artifact": {
    "id": "IMPL-EP-ARTIFACT-MANAGEMENT-BACKEND",
    "type": "implementation-module",
    "name": "Artifact Management Backend",
    "status": "active"
  },
  "realizes": {
    "vision": [
      "MVP-001"
    ],
    "capabilities": [
      "CAP-002",
      "CAP-015",
      "CAP-024"
    ],
    "referenceBuildingBlocks": [
      "RBB-ARTIFACT-MANAGEMENT"
    ],
    "solutionBuildingBlocks": [
      "BB-EP-003"
    ],
    "requirements": [
      "REQ-MVP-ART-001",
      "REQ-MVP-ART-002",
      "REQ-MVP-AUD-001"
    ]
  },
  "implements": {
    "domainObjects": [
      "Artifact",
      "ArtifactRevision"
    ],
    "ports": [
      "ArtifactRepository",
      "Authorizer"
    ],
    "runtimeComponents": [
      "engineering-platform-backend"
    ],
    "useCases": [
      {
        "id": "UC-ART-001",
        "name": "Create Artifact",
        "code": "10-backend/internal/artifacts/application/service.go",
        "documentation": "10-backend/internal/artifacts/application/create-artifact.md",
        "tests": [
          "10-backend/internal/artifacts/application/service_test.go"
        ],
        "requiredTestCategories": [
          "happy-path",
          "validation",
          "authorization",
          "boundary",
          "unicode-i18n",
          "security"
        ]
      },
      {
        "id": "UC-ART-002",
        "name": "Save Revision",
        "code": "10-backend/internal/artifacts/application/service.go",
        "documentation": "10-backend/internal/artifacts/application/save-revision.md",
        "tests": [
          "10-backend/internal/artifacts/application/service_test.go",
          "10-backend/internal/artifacts/transport/httpapi/handler_test.go"
        ],
        "requiredTestCategories": [
          "happy-path",
          "validation",
          "authorization",
          "concurrency"
        ]
      }
    ]
  },
  "documentation": {
    "solutionArchitecture": [
      "70-data/MVP-001-domain-model.md",
      "60-services/EP-001C-go-domain-repository-contract.md",
      "60-services/EP-001D-application-rest-contract.md"
    ],
    "engineeringPlatform": [
      "10-backend/EP-001C-go-domain-repository.md",
      "10-backend/EP-001D-application-rest.md"
    ],
    "humanReadableContracts": [
      "10-backend/internal/artifacts/doc.go",
      "10-backend/internal/artifacts/application/create-artifact.md",
      "10-backend/internal/artifacts/application/save-revision.md"
    ]
  },
  "ownership": {
    "repository": "engineering-platform",
    "buildingBlock": "BB-EP-003",
    "modulePath": "10-backend/internal/artifacts"
  },
  "quality": {
    "tests": [
      "10-backend/internal/artifacts/domain",
      "10-backend/internal/artifacts/application",
      "10-backend/internal/artifacts/transport/httpapi"
    ],
    "requiredChecks": [
      "go-test",
      "traceability-validation",
      "repository-contract"
    ],
    "testCoverage": {
      "UC-ART-001": [
        {
          "category": "happy-path",
          "purpose": "erzeugt Artifact und erste unveränderliche Revision",
          "path": "10-backend/internal/artifacts/application/service_test.go"
        },
        {
          "category": "validation",
          "purpose": "verweigert ungültiges JSON vor dem Repository-Aufruf",
          "path": "10-backend/internal/artifacts/application/service_test.go"
        },
        {
          "category": "authorization",
          "purpose": "verhindert Schreibzugriff ohne Berechtigung",
          "path": "10-backend/internal/artifacts/application/service_test.go"
        },
        {
          "category": "boundary",
          "purpose": "normalisiert unbegrenzte Listenlimits",
          "path": "10-backend/internal/artifacts/application/service_test.go"
        },
        {
          "category": "unicode-i18n",
          "purpose": "bewahrt deutsche und ukrainische Inhalte",
          "path": "10-backend/internal/artifacts/application/service_test.go"
        },
        {
          "category": "security",
          "purpose": "verweigert unauthentifizierte und unberechtigte HTTP-Aufrufe",
          "path": "10-backend/internal/artifacts/transport/httpapi/handler_test.go"
        }
      ],
      "UC-ART-002": [
        {
          "category": "happy-path",
          "purpose": "erzeugt eine Folge-Revision mit Vorgängerreferenz",
          "path": "10-backend/internal/artifacts/application/service_test.go"
        },
        {
          "category": "concurrency",
          "purpose": "verweigert eine veraltete ExpectedRevision ohne zusätzliche Revision",
          "path": "10-backend/internal/artifacts/application/service_test.go"
        },
        {
          "category": "validation",
          "purpose": "verweigert ungültige Inhalte",
          "path": "10-backend/internal/artifacts/application/service_test.go"
        },
        {
          "category": "authorization",
          "purpose": "verhindert Änderungen ohne Berechtigung",
          "path": "10-backend/internal/artifacts/application/service_test.go"
        }
      ],
      "HTTP-ARTIFACTS": [
        {
          "category": "boundary",
          "purpose": "verweigert Request Bodies oberhalb von 1 MiB",
          "path": "10-backend/internal/artifacts/transport/httpapi/handler_test.go"
        },
        {
          "category": "validation",
          "purpose": "verweigert unbekannte Felder und mehrere JSON-Objekte",
          "path": "10-backend/internal/artifacts/transport/httpapi/handler_test.go"
        },
        {
          "category": "security",
          "purpose": "verbirgt interne Fehlerdetails",
          "path": "10-backend/internal/artifacts/transport/httpapi/handler_test.go"
        }
      ]
    }
  },
  "verification": {
    "codeAreas": [
      {
        "path": "10-backend/internal/artifacts/domain",
        "classification": "domain-logic",
        "status": "directly-verified",
        "evidence": [
          {
            "category": "unit-test",
            "path": "10-backend/internal/artifacts/domain/artifact_test.go",
            "purpose": "prüft Artifact-Invarianten und Sprachgrenzen"
          }
        ]
      },
      {
        "path": "10-backend/internal/artifacts/application",
        "classification": "application-logic",
        "status": "directly-verified",
        "evidence": [
          {
            "category": "unit-test",
            "path": "10-backend/internal/artifacts/application/service_test.go",
            "purpose": "prüft Use Cases, Autorisierung, Concurrency und Unicode"
          }
        ]
      },
      {
        "path": "10-backend/internal/artifacts/ports/repository.go",
        "classification": "declaration-only",
        "status": "indirectly-verified",
        "reason": "Interface ohne ausführbare Logik.",
        "evidence": [
          {
            "category": "unit-test",
            "path": "10-backend/internal/artifacts/application/service_test.go",
            "purpose": "prüft den Repository-Vertrag aus Sicht der Application Services"
          }
        ]
      },
      {
        "path": "10-backend/internal/artifacts/adapters/mariadb",
        "classification": "adapter",
        "status": "verification-gap",
        "severity": "high",
        "reason": "Echte MariaDB-Integrationstests fehlen noch."
      },
      {
        "path": "10-backend/internal/artifacts/transport/httpapi",
        "classification": "transport",
        "status": "directly-verified",
        "evidence": [
          {
            "category": "component-test",
            "path": "10-backend/internal/artifacts/transport/httpapi/handler_test.go",
            "purpose": "prüft HTTP-Validierung, Security und Fehlerabbildung"
          }
        ]
      }
    ]
  }
}