99 lines
2.9 KiB
JavaScript
99 lines
2.9 KiB
JavaScript
|
|
#!/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));
|
||
|
|
}
|