#!/usr/bin/env node // ═══════════════════════════════════════════════════════════════════════════ // EOS Meta-Rules — Regler som gäller EOS självt // ═══════════════════════════════════════════════════════════════════════════ /** * Meta-Rule 6: Ingen revision får automatiskt leda till produktionsförändring * * Revisionen ska: * - upptäcka * - klassificera * - föreslå * - prioritera * * Men själva åtgärden ska alltid gå genom samma Engineering Contract * som all annan förändring. */ export const META_RULES = [ { id: 'meta-1', rule: 'Policyer är versionshanterade', check: () => { // TODO: Implementera return { valid: false, evidence: 'Ej implementerad' }; } }, { id: 'meta-2', rule: 'Ändringar av policyer kräver samma granskningsprocess som kod', check: () => { // TODO: Implementera return { valid: false, evidence: 'Ej implementerad' }; } }, { id: 'meta-3', rule: 'Varje undantag lämnar ett revisionsspår', check: () => { // TODO: Implementera return { valid: false, evidence: 'Ej implementerad' }; } }, { id: 'meta-4', rule: 'EOS kan inte inaktiveras av en agent', check: () => { // TODO: Implementera return { valid: false, evidence: 'Ej implementerad' }; } }, { id: 'meta-5', rule: 'EOS loggar alla egna ändringar', check: () => { // TODO: Implementera return { valid: false, evidence: 'Ej implementerad' }; } }, { id: 'meta-6', rule: 'Ingen revision får automatiskt leda till produktionsförändring', description: ` Revisionen ska: - upptäcka - klassificera - föreslå - prioritera Men själva åtgärden ska alltid gå genom samma Engineering Contract som all annan förändring. Exempel: - Revision hittar hemligheter i klartext → STOP-005-CRIT - Agent genererar nya hemligheter → OK (temporära) - Agent försöker uppdatera systemd → BLOCKERAD - Agent föreslår Terraform-bas → OK (förslag) - Mänsklig granskning godkänner → OK (deploy) `, check: () => { // Denna regel verifieras genom att kontrollera att inga ändringar // gjorts i produktion utan att gå genom Engineering Contract return { valid: true, evidence: 'Agent stoppade sig själv vid STOP-005-CRIT' }; } } ]; export function checkMetaRules() { return META_RULES.map(rule => ({ ...rule, result: rule.check() })); } // CLI if (process.argv[1] === new URL(import.meta.url).pathname) { console.log(JSON.stringify(checkMetaRules(), null, 2)); }