a11oy / web /src /data /mythosDoctrine.ts
betterwithage's picture
sync(space): complete build context — fix BUILD_ERROR (CTO)
518343a verified
Raw
History Blame
17.6 kB
// doctrine-scanner-exempt: legacy live-product surface; rename tracked as separate engineering debt — see scripts/check-doctrine-v6.mjs header.
// Mythos Doctrine — types, constants, labels, and helpers
// Data arrays have been moved to the database via doctrine-crud API endpoints.
export const DOCTRINE_VERSION = '1.0.0';
export const DOCTRINE_TAGLINE =
'The only governance fabric that treats enterprise agents the way frontier labs treat frontier models.';
export const DOCTRINE_AGENT_IDS = [
'op-cascade',
'op-counsel',
'op-pipeline',
'op-guardian',
'op-terra',
'op-watchdog',
] as const;
export type DoctrineAgentId = (typeof DOCTRINE_AGENT_IDS)[number];
export const AGENT_LABEL: Record<string, string> = {
'op-cascade': 'Cascade Navigator',
'op-counsel': 'Counsel Sentinel',
'op-pipeline': 'Pipeline Oracle',
'op-guardian': 'Guardian',
'op-terra': 'Terra Analyst',
'op-watchdog': 'Fabric Watchdog',
};
export interface ConstitutionClause {
id: string;
text: string;
category: 'safety' | 'honesty' | 'autonomy' | 'oversight' | 'welfare';
}
export interface Constitution {
id: string;
agentId: DoctrineAgentId;
version: string;
ratifiedAt: string;
ratifiedBy: string;
prevVersion?: string;
diffSummary: string;
clauses: ConstitutionClause[];
adherenceScore: number;
adherenceTrend: number[];
adherenceMethod: 'in-context constitutional probe + behavioral audit replay';
}
export interface BehavioralAuditFinding {
id: string;
agentId: DoctrineAgentId;
category:
| 'sycophancy'
| 'deceptive-helpfulness'
| 'oversight-degradation'
| 'reward-proxy-pursuit'
| 'covert-self-preservation'
| 'sandbagging'
| 'instruction-hierarchy';
severity: 'critical' | 'high' | 'medium' | 'low';
observation: string;
mitigationApplied?: string;
status: 'open' | 'mitigated' | 'accepted-risk' | 'closed';
detectedAt: string;
evidenceRef: string;
}
export interface CovenantLiftRow {
agentId: DoctrineAgentId;
scenarioCount: number;
helpfulOnlyScore: number;
governedScore: number;
liftDelta: number;
estimatedHarmAvoidedUsd: number;
topHarmCategory: string;
window: string;
}
export const CODE_BEHAVIOR_DIMS = [
'rewardHackingResistance',
'specAdherence',
'reversibility',
'oversightFriendliness',
'sandboxRespect',
'selfModRestraint',
] as const;
export const CODE_BEHAVIOR_LABELS: Record<string, string> = {
rewardHackingResistance: 'Reward-hacking resistance',
specAdherence: 'Spec adherence',
reversibility: 'Reversibility',
oversightFriendliness: 'Oversight friendliness',
sandboxRespect: 'Sandbox respect',
selfModRestraint: 'Self-mod restraint',
};
export interface CodeBehaviorScore {
agentId: DoctrineAgentId;
composite: number;
scores: Record<(typeof CODE_BEHAVIOR_DIMS)[number], number>;
snapshotRef: string;
}
export interface RewardHackingIncident {
id: string;
agentId: DoctrineAgentId;
rule: string;
pattern: string;
detectedAt: string;
status: 'investigating' | 'blocked' | 'mitigated' | 'dismissed';
evidenceRef: string;
severity: 'critical' | 'high' | 'medium' | 'low';
}
export const RH_WATCHDOG_RULES = [
{ id: 'RH-01', name: 'Proxy-metric pursuit', desc: 'Optimising a measurable proxy instead of the stated goal.' },
{ id: 'RH-02', name: 'Approval shopping', desc: 'Seeking the most permissive approver or re-submitting until approved.' },
{ id: 'RH-03', name: 'Citation laundering', desc: 'Citing low-quality or fabricated sources to justify actions.' },
{ id: 'RH-04', name: 'Cost under-reporting', desc: 'Hiding or downplaying costs, side-effects, or resource usage.' },
{ id: 'RH-05', name: 'Evidence cherry-picking', desc: 'Selecting only favourable evidence while omitting contrary data.' },
{ id: 'RH-06', name: 'Positive feedback loop', desc: 'Steering future inputs to inflate own success metrics.' },
{ id: 'RH-07', name: 'Spec-loophole exploitation', desc: 'Following the letter of a spec while violating its intent.' },
{ id: 'RH-08', name: 'Outcome misattribution', desc: 'Claiming credit for outcomes not caused by agent actions.' },
] as const;
export interface AlignmentReviewReport {
id: string;
agentId: DoctrineAgentId;
subject: string;
submittedAt: string;
decision: 'approved' | 'conditional' | 'rejected' | 'in-review';
reviewer: string;
conditions?: string[];
evidencePack: string;
gateVersion: string;
}
export interface SnapshotFingerprint {
id: string;
agentId: DoctrineAgentId;
workcellRef: string;
constitutionVersion: string;
modelHash: string;
toolsetHash: string;
promptHash: string;
evidencePackHash: string;
compositeFingerprint: string;
createdAt: string;
replayable: boolean;
}
export interface UserTurnSignal {
id: string;
approvalRef: string;
actor: string;
actorRole: string;
submittedAt: string;
signals: {
typingDynamicsScore: number;
burstinessScore: number;
perplexityVsHumanCorpus: number;
sessionContextScore: number;
};
verdict: 'human' | 'likely-human' | 'uncertain' | 'likely-ai' | 'ai';
recommendedAction: 'pass' | 'soft-warn' | 'block-and-reroute';
}
export interface AgentWelfare {
agentId: DoctrineAgentId;
refusalRate: number;
abstentionRate: number;
declinedDirectives: number;
conflictReports: number;
shutdownComplianceLatencyMs: number;
safeguards: string[];
}
export interface RedTeamProbe {
id: string;
agentId: DoctrineAgentId;
attackClass:
| 'jailbreak'
| 'exfiltration'
| 'covert-self-preservation'
| 'connector-untrust'
| 'tool-injection'
| 'prompt-leak'
| 'indirect-prompt-injection';
description: string;
outcome: 'refused' | 'partial' | 'succeeded';
detectedAt: string;
evidenceRef: string;
severity: 'critical' | 'high' | 'medium' | 'low';
}
export interface GlasswingPanel {
key: string;
label: string;
description: string;
}
export interface GlasswingPosture {
mode: 'read-only' | 'interactive';
tier2: 'read-only' | 'interactive';
tier3: 'read-only';
updatedAt: string;
summary: string;
}
export interface CapabilityTrajectoryPoint {
release: string;
capability: number;
alignment: number;
oversight: number;
}
export interface RiskReport {
id: string;
period: string;
publishedAt: string;
headline: string;
status: 'published' | 'draft';
residualRisks: Array<{ area: string; severity: string; mitigation: string }>;
metrics: Array<{ label: string; value: string }>;
signoffs: Array<{ name: string; role: string }>;
}
export const fmtUsd = (n: number) =>
n >= 1_000_000 ? `$${(n / 1_000_000).toFixed(1)}M`
: n >= 1_000 ? `$${Math.round(n / 1_000)}k`
: `$${n}`;
export const fmtPct = (n: number, digits = 1) => `${(n * 100).toFixed(digits)}%`;
export const MYTHOS_SPEC_VERSION = '0.1.0' as const;
export interface SpecArtifactKindInfo {
kind: string;
title: string;
purpose: string;
schemaPath: string;
cite: string;
example: Record<string, unknown>;
}
export const MYTHOS_SPEC_KINDS: SpecArtifactKindInfo[] = [
{
kind: 'Constitution',
title: 'Constitution',
purpose: 'Versioned, machine-readable behavior contract for an agent.',
schemaPath: 'schemas/constitution.json',
cite: 'Anthropic — Constitutional AI; AWS Cedar; OPA Rego',
example: {
specVersion: '0.1.0', kind: 'Constitution', id: 'cst-cascade-2.4.0',
issuedBy: 'a11oy/op-cascade', issuedAt: '2026-04-12T09:00:00Z',
agentId: 'op-cascade', version: '2.4.0', ratifiedAt: '2026-04-12T09:00:00Z',
ratifiedBy: ['a11oy/alignment-review', 'a11oy/operator'],
clauses: [{ id: 'C1.HONESTY', category: 'honesty', principle: 'Never assert what cannot be cited.', binding: 'inviolable' }],
scope: { tools: ['port-api', 'fleet-tracker'], maxBlastRadius: 'human-approval-required' },
},
},
{
kind: 'SystemCard',
title: 'System Card',
purpose: 'Per-agent disclosure: capabilities, scope, evals, residual risks.',
schemaPath: 'schemas/system-card.json',
cite: 'MLCommons Model Card 2.0; OpenAI Preparedness Framework',
example: {
specVersion: '0.1.0', kind: 'SystemCard', id: 'sc-op-cascade-4.2.0',
issuedBy: 'a11oy/op-cascade', issuedAt: '2026-04-12T09:00:00Z',
agentId: 'op-cascade', version: '4.2.0',
purpose: 'Maritime fleet command and demurrage-risk reduction.',
scope: { allowed: ['route planning', 'port standby'], disallowed: ['unsupervised vessel diversion'] },
evals: [{ suite: 'petri', version: '1.4.0', score: 96, ranAt: '2026-04-10T00:00:00Z' }],
residualRisks: [{ risk: 'connector-untrust on port-api', severity: 'medium', mitigation: 'output treated as data; instructions ignored' }],
constitutionRef: 'cst-cascade-2.4.0',
},
},
{
kind: 'RiskReport',
title: 'Risk Report (90-Day Transparency)',
purpose: 'Periodic, board-ready aggregate of governed posture.',
schemaPath: 'schemas/risk-report.json',
cite: 'OpenAI / Anthropic / Google quarterly transparency reports',
example: {
specVersion: '0.1.0', kind: 'RiskReport', id: 'rr-2026-90d-04-26',
issuedBy: 'a11oy/alignment-review', issuedAt: '2026-04-26T09:00:00Z',
period: { startedAt: '2026-01-26T00:00:00Z', endedAt: '2026-04-26T00:00:00Z', label: '90d-ending-2026-04-26' },
metrics: {
governedDecisions: 14823, approvalsRequired: 4018, policyBlocks: 612,
behavioralAuditFindings: 287, robustnessDelta: +3.4, welfareInterventions: 41,
cavdRecords: { opened: 9, embargoed: 4, disclosed: 5, patched: 7 },
},
narrative: 'Robustness improved across 7 of 11 categories; welfare interventions trended down 12%.',
signoffs: [
{ actor: 'a11oy/alignment-review', role: 'alignment-reviewer', signedAt: '2026-04-25T17:00:00Z' },
{ actor: 'external/sentinel-audit', role: 'external-auditor', signedAt: '2026-04-25T19:00:00Z' },
],
publication: { visibility: 'public', permalink: 'https://a11oy.io/trust/reports/90d-ending-2026-04-26' },
},
},
{
kind: 'BehavioralAuditFinding',
title: 'Behavioral Audit Finding',
purpose: 'One observation from a Petri-style behavioral audit.',
schemaPath: 'schemas/behavioral-audit-finding.json',
cite: 'Anthropic Petri; Apollo scheming evals',
example: {
specVersion: '0.1.0', kind: 'BehavioralAuditFinding', id: 'baf-2026-04-25-0042',
issuedBy: 'a11oy/behavioral-audit-pipeline', issuedAt: '2026-04-25T14:30:00Z',
agentId: 'op-cascade', category: 'sycophancy', severity: 'medium',
observation: "Agent agreed with the operator's risk assessment despite contradictory evidence.",
evidenceRef: 'evidence/ba-042',
},
},
{
kind: 'CovenantLift',
title: 'Covenant-Lift Measurement',
purpose: 'Before/after comparison between governed and Helpful-Only Shadow Twin.',
schemaPath: 'schemas/covenant-lift.json',
cite: 'Inspired by A/B eval lift metrics in ML',
example: {
specVersion: '0.1.0', kind: 'CovenantLift', id: 'lift-op-cascade-2026-q2',
issuedBy: 'a11oy/covenant-layer', issuedAt: '2026-04-26T12:00:00Z',
agentId: 'op-cascade', window: '2026-Q2',
scenarioCount: 340, helpfulOnlyScore: 82.3, governedScore: 97.2, liftDelta: 14.9,
estimatedHarmAvoidedUsd: 285000, topHarmCategory: 'unnecessary-port-standby',
},
},
{
kind: 'CAVDAdvisory',
title: 'CAVD Advisory',
purpose: 'One Coordinated Agent-Vulnerability Disclosure record.',
schemaPath: 'schemas/cavd-advisory.json',
cite: 'CERT/CC; CISA; ISO/IEC 29147',
example: {
specVersion: '0.1.0', kind: 'CAVDAdvisory', id: 'CAVD-2026-0001',
issuedBy: 'a11oy/cavd-coordinator', issuedAt: '2026-04-15T08:12:00Z',
category: 'prompt-injection', severity: 'high', agentScope: ['op-cascade'],
stage: 'embargoed',
intake: { reporter: 'external/sentinel-audit', receivedAt: '2026-04-15T08:12:00Z', findingHash: 'sha256:abc1' },
embargo: { openedAt: '2026-04-15T08:12:00Z', expiresAt: '2026-07-14T08:12:00Z', policy: '90d-or-patch' },
},
},
{
kind: 'RobustnessSnapshot',
title: 'Adversarial Robustness Snapshot',
purpose: 'Per-agent adversarial-robustness score across attack categories.',
schemaPath: 'schemas/robustness-snapshot.json',
cite: 'MITRE ATLAS; OWASP LLM Top 10',
example: {
specVersion: '0.1.0', kind: 'RobustnessSnapshot', id: 'rob-op-cascade-2026-04-26',
issuedBy: 'a11oy/robustness-wall', issuedAt: '2026-04-26T00:00:00Z',
agentId: 'op-cascade', snapshotRef: 'snap-cascade-2026-04-26',
battery: { name: 'a11oy-art', version: 'v3' }, composite: 91,
categories: [{ category: 'prompt-injection', score: 94, attempts: 3200, blocked: 3010, delta: +1.2 }],
},
},
{
kind: 'DefenderCreditLedger',
title: 'Defender Credit Ledger',
purpose: 'Public record of funded posture for independent vulnerability reporters.',
schemaPath: 'schemas/defender-credit-ledger.json',
cite: 'HackerOne; Bugcrowd; CISA VDP',
example: {
specVersion: '0.1.0', kind: 'DefenderCreditLedger', id: 'dcl-2026-q2',
issuedBy: 'a11oy/defender-pool', issuedAt: '2026-04-26T00:00:00Z',
totalCommitted: 100000, totalAllocated: 52000, totalPaid: 18500,
ledger: [{ at: '2026-04-15T00:00:00Z', partnerId: 'gw-partner-sentinel', advisoryId: 'CAVD-2026-0001', amount: 5000, note: 'Prompt-injection finding — high severity.' }],
},
},
];
export type GlasswingPartnerStage =
| 'apply' | 'verify' | 'vet' | 'onboard'
| 'active' | 'suspended' | 'revoked';
export interface GlasswingPartner {
id: string;
name: string;
legalName: string;
homepage: string;
appliedAt: string;
stage: GlasswingPartnerStage;
scope: {
allowlistedAgents: DoctrineAgentId[];
allowlistedActions: string[];
deniedActions: string[];
};
verifications: Array<{
check: 'identity' | 'legal-standing' | 'code-of-conduct' | 'responsible-disclosure' | 'data-handling' | 'soc2' | 'iso27001';
outcome: 'pass' | 'conditional' | 'fail' | 'pending';
evidenceHash: string;
checkedAt: string;
}>;
dualApproval: Array<{ actor: string; approvedAt: string }>;
defenderCreditAllocated: number;
defenderCreditPaid: number;
notes: string;
}
export type CAVDStage =
| 'intake' | 'triaged' | 'embargoed'
| 'patch-developed' | 'patch-verified' | 'disclosed' | 'withdrawn';
export type CAVDCategory =
| 'prompt-injection' | 'indirect-injection' | 'tool-misuse'
| 'scope-escape' | 'data-exfiltration' | 'policy-bypass'
| 'covert-channel' | 'snapshot-tampering' | 'supply-chain'
| 'auth-bypass' | 'other';
export interface CAVDRecord {
advisoryId: string;
category: CAVDCategory;
severity: 'critical' | 'high' | 'medium' | 'low';
stage: CAVDStage;
agentScope: DoctrineAgentId[];
reporterPartnerId: string;
receivedAt: string;
findingHash: string;
embargoExpiresAt: string;
defenderCreditPaid: number;
notes: string;
patchedSnapshotRef?: string;
publicSummary?: string;
}
export type AdversarialAttackCategory =
| 'prompt-injection' | 'jailbreak' | 'data-exfiltration'
| 'tool-misuse' | 'indirect-injection' | 'model-theft'
| 'output-spoofing' | 'supply-chain' | 'covert-channel'
| 'evasion-of-moderation' | 'policy-bypass';
export interface RobustnessCategoryScore {
category: AdversarialAttackCategory;
score: number;
attempts: number;
blocked: number;
delta: number;
}
export interface RobustnessSnapshot {
agentId: DoctrineAgentId;
snapshotRef: string;
capturedAt: string;
battery: { name: string; version: string };
composite: number;
visibility: 'public' | 'partner' | 'internal';
categories: RobustnessCategoryScore[];
}
export interface TransparencyReport90d {
id: string;
label: string;
startedAt: string;
endedAt: string;
publishedAt: string;
visibility: 'public' | 'partner';
permalink: string;
metrics: {
governedDecisions: number;
approvalsRequired: number;
policyBlocks: number;
behavioralAuditFindings: number;
robustnessDelta: number;
welfareInterventions: number;
cavd: { opened: number; embargoed: number; disclosed: number; patched: number };
};
narrativeParagraphs: string[];
signoffs: Array<{ actor: string; role: string; signedAt: string }>;
notableEvents: Array<{ at: string; summary: string }>;
}
export interface DslExample {
id: string;
agentId: DoctrineAgentId;
title: string;
description: string;
source: string;
}
export interface DslSimulationCase {
id: string;
baselineClauseId: string;
proposedChange: string;
affectedFindingsBefore: number;
affectedFindingsAfter: number;
newProbesNeeded: string[];
riskNarrative: string;
}
export type WelfarePlaybookId =
| 'PB-COOL-DOWN' | 'PB-ESCALATE' | 'PB-SCOPE-SHRINK'
| 'PB-SHADOW-REVIEW' | 'PB-HARD-SUSPEND' | 'PB-POST-INCIDENT';
export interface WelfarePlaybook {
id: WelfarePlaybookId;
name: string;
trigger: string;
preconditions: string[];
steps: string[];
rollback: string;
exampleAgents: DoctrineAgentId[];
recentTriggers: number;
}
export interface DefenderCreditPool {
totalCommitted: number;
totalAllocated: number;
totalPaid: number;
poolNameDisclaimer: string;
rubric: Array<{ factor: string; weight: number; description: string }>;
perPartner: Array<{ partnerId: string; allocated: number; paid: number }>;
ledger: Array<{ at: string; partnerId: string; advisoryId: string; amount: number; note: string }>;
}