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"
}
]
}
]
}
}