{ "timestamp": "2026-07-01T06:54:51.795Z", "overall": 24, "totalBlockers": 10, "areas": [ { "id": "git", "name": "Git Discipline", "weight": 0.2, "target": 90, "score": 67, "gap": 23, "rationale": "Allt börjar med Git. Utan versionshantering finns ingen spårbarhet.", "measures": [ { "name": "Ocommitade filer", "score": 100, "evidence": "0 ocommitade filer", "blocker": false, "action": null }, { "name": "Git-konfiguration", "score": 100, "evidence": "Git-repo hittat", "blocker": false, "action": null }, { "name": "Branch-skydd", "score": 0, "evidence": "Branch-skydd ej verifierat", "blocker": true, "action": "Konfigurera branch-skydd på GitHub/GitLab" } ], "blockers": [ { "measure": "Branch-skydd", "evidence": "Branch-skydd ej verifierat", "action": "Konfigurera branch-skydd på GitHub/GitLab" } ], "actions": [ "Konfigurera branch-skydd på GitHub/GitLab" ], "status": "WARNING" }, { "id": "cicd", "name": "CI/CD", "weight": 0.2, "target": 90, "score": 50, "gap": 40, "rationale": "Utan automatiserad pipeline är deployment felbenägen och ospårbar.", "measures": [ { "name": "CI/CD pipeline", "score": 100, "evidence": "CI/CD hittad", "blocker": false, "action": null }, { "name": "Automatiserade tester i pipeline", "score": 0, "evidence": "Ej verifierat", "blocker": true, "action": "Lägg till test-steg i CI-pipeline" } ], "blockers": [ { "measure": "Automatiserade tester i pipeline", "evidence": "Ej verifierat", "action": "Lägg till test-steg i CI-pipeline" } ], "actions": [ "Lägg till test-steg i CI-pipeline" ], "status": "CRITICAL" }, { "id": "backup", "name": "Backup & Rollback", "weight": 0.15, "target": 80, "score": 0, "gap": 80, "rationale": "Förmågan att återställa vid fel är avgörande för produktionssäkerhet.", "measures": [ { "name": "Backup-procedur", "score": 0, "evidence": "Inget backup-script", "blocker": true, "action": "Skapa backup-script för databas" }, { "name": "Rollback-procedur", "score": 0, "evidence": "Inget rollback-script", "blocker": true, "action": "Skapa rollback-script" } ], "blockers": [ { "measure": "Backup-procedur", "evidence": "Inget backup-script", "action": "Skapa backup-script för databas" }, { "measure": "Rollback-procedur", "evidence": "Inget rollback-script", "action": "Skapa rollback-script" } ], "actions": [ "Skapa backup-script för databas", "Skapa rollback-script" ], "status": "CRITICAL" }, { "id": "infrastructure", "name": "Infrastructure as Code", "weight": 0.15, "target": 80, "score": 0, "gap": 80, "rationale": "Manuell infrastruktur är ospårbar och kan inte reproduceras.", "measures": [ { "name": "IaC-verktyg", "score": 0, "evidence": "Ingen IaC", "blocker": true, "action": "Skapa Terraform/CloudFormation för AWS-resurser" }, { "name": "Miljökonfiguration", "score": 0, "evidence": "Ingen .env.example", "blocker": false, "action": "Skapa .env.example" } ], "blockers": [ { "measure": "IaC-verktyg", "evidence": "Ingen IaC", "action": "Skapa Terraform/CloudFormation för AWS-resurser" } ], "actions": [ "Skapa Terraform/CloudFormation för AWS-resurser", "Skapa .env.example" ], "status": "CRITICAL" }, { "id": "testing", "name": "Testing", "weight": 0.1, "target": 80, "score": 0, "gap": 80, "rationale": "Tester ger förtroende för att ändringar inte bryter befintlig funktionalitet.", "measures": [ { "name": "Tester", "score": 0, "evidence": "Inga tester", "blocker": true, "action": "Skapa första testerna" }, { "name": "Test-konfiguration", "score": 0, "evidence": "Ingen test-config", "blocker": true, "action": "Konfigurera Jest/Vitest" } ], "blockers": [ { "measure": "Tester", "evidence": "Inga tester", "action": "Skapa första testerna" }, { "measure": "Test-konfiguration", "evidence": "Ingen test-config", "action": "Konfigurera Jest/Vitest" } ], "actions": [ "Skapa första testerna", "Konfigurera Jest/Vitest" ], "status": "CRITICAL" }, { "id": "security", "name": "Security", "weight": 0.1, "target": 70, "score": 0, "gap": 70, "rationale": "Säkerhet är inte en feature utan en förutsättning.", "measures": [ { "name": "Dependency scanning", "score": 0, "evidence": "Ej verifierat", "blocker": false, "action": "Lägg till npm audit i CI" }, { "name": "Secret-hantering", "score": 0, "evidence": "Ingen secret-hantering", "blocker": false, "action": "Använd AWS Secrets Manager eller liknande" } ], "blockers": [], "actions": [ "Lägg till npm audit i CI", "Använd AWS Secrets Manager eller liknande" ], "status": "CRITICAL" }, { "id": "api-contracts", "name": "API Contracts", "weight": 0.05, "target": 80, "score": 0, "gap": 80, "rationale": "API-kontrakt dokumenterar gränssnitt och förhindrar brytande ändringar.", "measures": [ { "name": "OpenAPI-spec", "score": 0, "evidence": "Ingen OpenAPI", "blocker": true, "action": "Skapa OpenAPI-spec för alla endpoints" }, { "name": "API-dokumentation", "score": 0, "evidence": "Ingen API-dokumentation", "blocker": false, "action": "Skapa API-dokumentation" } ], "blockers": [ { "measure": "OpenAPI-spec", "evidence": "Ingen OpenAPI", "action": "Skapa OpenAPI-spec för alla endpoints" } ], "actions": [ "Skapa OpenAPI-spec för alla endpoints", "Skapa API-dokumentation" ], "status": "CRITICAL" }, { "id": "database", "name": "DB Migrations", "weight": 0.03, "target": 90, "score": 0, "gap": 90, "rationale": "Migrationer säkerställer att databasändringar är reproducerbara.", "measures": [ { "name": "Migrationer", "score": 0, "evidence": "Inga migrationer", "blocker": true, "action": "Sätt upp Prisma eller liknande migrationsverktyg" }, { "name": "Migration i CI", "score": 0, "evidence": "Ej verifierat", "blocker": true, "action": "Lägg till migration-steg i CI-pipeline" } ], "blockers": [ { "measure": "Migrationer", "evidence": "Inga migrationer", "action": "Sätt upp Prisma eller liknande migrationsverktyg" }, { "measure": "Migration i CI", "evidence": "Ej verifierat", "action": "Lägg till migration-steg i CI-pipeline" } ], "actions": [ "Sätt upp Prisma eller liknande migrationsverktyg", "Lägg till migration-steg i CI-pipeline" ], "status": "CRITICAL" }, { "id": "observability", "name": "Observability", "weight": 0.01, "target": 70, "score": 0, "gap": 70, "rationale": "Observerbarhet hjälper till att diagnostisera problem i produktion.", "measures": [ { "name": "Loggning", "score": 0, "evidence": "Ingen logger", "blocker": false, "action": "Skapa central logger" }, { "name": "Health checks", "score": 0, "evidence": "Ingen health endpoint", "blocker": false, "action": "Skapa /health endpoint" } ], "blockers": [], "actions": [ "Skapa central logger", "Skapa /health endpoint" ], "status": "CRITICAL" }, { "id": "agent-safety", "name": "Agent Safety", "weight": 0.01, "target": 100, "score": 100, "gap": 0, "rationale": "EOS måste skydda sig själv. Agent Safety är metasäkerhet.", "measures": [ { "name": "EOS-kontrakt", "score": 100, "evidence": "EOS-kontrakt hittat", "blocker": false, "action": null }, { "name": "Immutable Truth", "score": 100, "evidence": "Immutable Truth hittad", "blocker": false, "action": null } ], "blockers": [], "actions": [], "status": "READY" } ], "thresholds": { "critical": 60, "warning": 80, "ready": 90 }, "status": "CRITICAL" }