Skip to content

DOMAIN:SOC2_CRITERIA

OWNER: julian
UPDATED: 2026-03-24
SCOPE: SOC 2 Type II Trust Services Criteria mapped to GE operations
SERVES: julian (compliance officer), amber (auditor)
ALSO_USED_BY: marta (CC8 evidence), boris (access evidence), rutger (availability evidence)


OVERVIEW

SOC 2 Type II examines operating effectiveness of controls over a period (6-12 months).
AUDITOR: CPA firm (Big 4 or specialized), examines design AND operating effectiveness.
REPORT_TYPE: restricted use (NDA required) — shared with clients on request.
GE_SCOPE: multi-agent software development platform, client project delivery, infrastructure.

TRUST_SERVICE_CATEGORIES_SELECTED:
- Security (mandatory — Common Criteria CC1-CC9)
- Availability (client SLA commitments)
- Confidentiality (client code and data protection)
NOTE: Processing Integrity and Privacy may be added in future based on client demand.


CC1 — CONTROL ENVIRONMENT

TAG:CC1 TAG:CONTROL_ENVIRONMENT

WHAT_AUDITORS_LOOK_FOR

  • Commitment to integrity and ethical values (CC1.1)
  • Board/management oversight of internal controls (CC1.2)
  • Organizational structure with clear reporting lines (CC1.3)
  • Commitment to attracting and retaining competent personnel (CC1.4)
  • Accountability for internal control responsibilities (CC1.5)

HOW_GE_SATISFIES

CC1.1 — INTEGRITY_AND_ETHICS:
- Constitution v2 defines 10 binding principles for all agents
- Principle 2 (Real Over Simulated) prohibits deception
- Constitution enforced by Ron (Guardian), Jaap (SSOT), Amber (Participation)
- Violations produce documented findings with corrective actions
EVIDENCE: constitution document, violation records, corrective action logs
AGENT: julian (policy), amber (monitoring)

CC1.2 — MANAGEMENT_OVERSIGHT:
- Dirk-Jan reviews every agent commissioning personally
- Amber performs quarterly internal audits
- Admin-UI provides real-time visibility into agent operations
- Management review meetings produce documented decisions
EVIDENCE: commissioning records, audit reports, management review minutes
AGENT: amber (audit), dirk-jan (human oversight)

CC1.3 — ORGANIZATIONAL_STRUCTURE:
- AGENT-REGISTRY.json defines all 54 agents with roles, teams, reporting
- Three-zone architecture (Public, Shared, Team) with clear boundaries
- Team structure: Alpha (Faye PM), Beta (Sytske PM), shared services
- Escalation paths defined: agent -> team lead -> Mira -> Dirk-Jan
EVIDENCE: AGENT-REGISTRY.json, org chart, escalation procedures
AGENT: julian (structure documentation)

CC1.4 — COMPETENT_PERSONNEL:
- Agent profiling pipeline ensures role fitness before activation
- Tiered identity (CORE + ROLE + REFERENCE) verified per agent
- Provider selection per agent capability (Claude/OpenAI/Gemini)
- Wiki brain provides continuous knowledge updates
EVIDENCE: agent profiles, commissioning records, capability assessments
AGENT: julian (competency framework)

CC1.5 — ACCOUNTABILITY:
- Every work item tracked in DAG with assigned agent
- Pipeline execution logs attribute every action to specific agent
- PTY capture produces audit trail of all agent sessions
- Cost gate tracks resource consumption per agent
EVIDENCE: DAG records, execution logs, PTY transcripts, cost reports
AGENT: amber (accountability monitoring)


CC2 — COMMUNICATION AND INFORMATION

TAG:CC2 TAG:COMMUNICATION

WHAT_AUDITORS_LOOK_FOR

  • Relevant quality information generated and used (CC2.1)
  • Internal communication of controls objectives and responsibilities (CC2.2)
  • External communication about matters affecting controls (CC2.3)

HOW_GE_SATISFIES

CC2.1 — QUALITY_INFORMATION:
- PostgreSQL as SSOT — single source of truth for all operational data
- Wiki brain provides curated knowledge (not raw data)
- Session learnings extract structured insights from every execution
- Knowledge synthesizer detects cross-session patterns (6-hourly)
EVIDENCE: database records, wiki content, learning extraction logs
AGENT: annegreet (knowledge curation), eltjo (pattern analysis)

CC2.2 — INTERNAL_COMMUNICATION:
- Constitution v2 injected on every agent boot
- Wiki brain provides JIT (just-in-time) domain knowledge
- Redis Streams for operational messaging
- Discussions API for multi-agent consensus decisions
EVIDENCE: constitution acknowledgement logs, Redis stream records, discussion records
AGENT: julian (policy communication)

CC2.3 — EXTERNAL_COMMUNICATION:
- Client communication through defined channels (Dima intake, PM updates)
- Incident communication templates (see incident-response/index.md)
- SOC 2 report shared with clients under NDA
- Privacy notices per GDPR requirements
EVIDENCE: client communication logs, incident notifications, privacy notices
AGENT: faye/sytske (client communication), mira (incident communication)


CC3 — RISK ASSESSMENT

TAG:CC3 TAG:RISK_ASSESSMENT

WHAT_AUDITORS_LOOK_FOR

  • Suitable risk objectives specified (CC3.1)
  • Risk identification and analysis (CC3.2)
  • Consideration of fraud risk (CC3.3)
  • Identification and assessment of significant changes (CC3.4)

HOW_GE_SATISFIES

CC3.1 — RISK_OBJECTIVES:
- Security objectives defined in Constitution v2
- Availability targets per client SLA
- Confidentiality requirements per data classification
- Compliance objectives per regulatory framework (GDPR, NIS2, etc.)
EVIDENCE: risk register, security objectives document, SLA definitions
AGENT: julian (risk framework)

CC3.2 — RISK_IDENTIFICATION:
- Threat intelligence collection (Annegreet)
- Vulnerability scanning (Trivy, Semgrep)
- Cross-session pattern detection identifies emerging risks
- Regulatory monitoring for new compliance requirements
EVIDENCE: risk register, vulnerability reports, pattern analysis outputs
AGENT: julian (risk assessment), annegreet (threat intelligence)

CC3.3 — FRAUD_RISK:
- Segregation of duties in anti-LLM pipeline (no agent both writes and approves)
- Cost gate prevents unauthorized resource consumption
- Amber audits participation and contribution quality
- Dima (public-facing) is stateless — cannot be socially engineered
EVIDENCE: segregation of duties matrix, cost gate logs, audit findings
AGENT: amber (fraud detection), julian (fraud risk assessment)

CC3.4 — CHANGE_ASSESSMENT:
- Constitution Principle 6 (Blast Radius Awareness) requires impact analysis for changes
- New regulation monitoring (EU AI Act, NIS2, CRA timelines tracked)
- Provider changes trigger security reassessment
- New agent onboarding includes risk assessment
EVIDENCE: blast radius assessments, regulatory tracker, provider review records
AGENT: julian (change risk assessment)


CC4 — MONITORING ACTIVITIES

TAG:CC4 TAG:MONITORING

WHAT_AUDITORS_LOOK_FOR

  • Ongoing and/or separate evaluations of control effectiveness (CC4.1)
  • Evaluation and communication of control deficiencies (CC4.2)

HOW_GE_SATISFIES

CC4.1 — CONTROL_EVALUATION:
- Ron (System Integrity Monitor) performs continuous runtime monitoring
- Amber performs quarterly internal audits (see audit-procedures.md)
- Automated compliance checks via kube-bench, Semgrep, Trivy
- Health escalation thresholds trigger automated responses
- Cost gate provides continuous financial control monitoring
EVIDENCE: monitoring dashboards, audit reports, automated scan results
AGENT: ron (continuous monitoring), amber (periodic evaluation)

CC4.2 — DEFICIENCY_COMMUNICATION:
- Audit findings classified (major/minor/observation)
- Corrective actions tracked with owners and deadlines
- Management review receives quarterly control status
- Critical deficiencies escalated immediately to Dirk-Jan
EVIDENCE: audit finding records, corrective action tracker, management review minutes
AGENT: amber (deficiency reporting), julian (corrective action tracking)


CC5 — CONTROL ACTIVITIES

TAG:CC5 TAG:CONTROL_ACTIVITIES

WHAT_AUDITORS_LOOK_FOR

  • Control activities designed and implemented to mitigate risks (CC5.1)
  • General controls over technology selected and developed (CC5.2)
  • Controls deployed through policies and procedures (CC5.3)

HOW_GE_SATISFIES

CC5.1 — CONTROL_DESIGN:
- Controls mapped to risks in risk register
- Anti-LLM pipeline implements multiple control layers
- Defense in depth: network policies + RBAC + application controls + monitoring
EVIDENCE: risk-control mapping matrix, control design documentation
AGENT: julian (control design)

CC5.2 — TECHNOLOGY_CONTROLS:
- k8s RBAC for access control
- Network policies for zone isolation
- Vault for secrets management
- Automated scanning (Trivy, Semgrep, kube-bench)
- Cost gate for resource controls
EVIDENCE: RBAC manifests, network policies, Vault configuration, scan configurations
AGENT: rutger (technology controls), julian (policy)

CC5.3 — POLICY_DEPLOYMENT:
- Constitution v2 = master policy document
- CODEBASE-STANDARDS.md = development policy
- Wiki brain = distributed policy and procedure library
- Agent identity documents include role-specific policies
EVIDENCE: policy documents, acknowledgement records, wiki content
AGENT: julian (policy management)


CC6 — LOGICAL AND PHYSICAL ACCESS CONTROLS

TAG:CC6 TAG:ACCESS_CONTROLS TAG:FOCUS

WHAT_AUDITORS_LOOK_FOR

  • Logical access security over infrastructure and software (CC6.1)
  • Registration and authorization before access granted (CC6.2)
  • Access removal when no longer needed (CC6.3)
  • Access restricted to authorized individuals (CC6.4 — network, data)
  • Protection of system boundaries (CC6.5 — firewalls, DMZ)
  • Encryption of data in transit (CC6.6)
  • Management of credentials and secrets (CC6.7)
  • Protection against security threats (CC6.8)

HOW_GE_SATISFIES

CC6.1 — INFRASTRUCTURE_ACCESS:
- k8s RBAC with least privilege per agent role
- Admin-UI protected by WebAuthn (FIDO2 hardware keys)
- No shared credentials — per-agent Vault paths
- Database access restricted to admin-ui service account and boris (DBA)
- kubectl access controlled via kubeconfig mounted as hostPath
EVIDENCE: RBAC role bindings, WebAuthn enrollment records, Vault access policies
AGENT: rutger (RBAC), julian (access policy)
REVIEW: quarterly access review — verify no privilege creep

CC6.2 — REGISTRATION_AND_AUTHORIZATION:
- Agent commissioning process requires Dirk-Jan approval before activation
- Agent status in AGENT-REGISTRY.json controls access (unavailable = no work)
- New agent activation goes through profiling pipeline
- Client project access granted per project assignment only
EVIDENCE: commissioning records, registry change history, project assignment records
AGENT: julian (registration process)

CC6.3 — ACCESS_REMOVAL:
- Agent decommissioning sets status to unavailable in registry
- Vault tokens revoked on agent decommission
- k8s RBAC bindings removed
- Database access revoked
- Client project access ends with project completion
EVIDENCE: decommission records, Vault revocation logs, RBAC change history
AGENT: julian (decommission process), rutger (technical removal)

CC6.4 — ACCESS_RESTRICTION:
- THREE_ZONE_ARCHITECTURE enforces boundaries:
- ZONE_PUBLIC: Dima only — stateless, no internal knowledge
- ZONE_SHARED: service agents — cross-team access with purpose limitation
- ZONE_TEAM: Alpha/Beta — client data isolated per team
- Network policies restrict inter-namespace communication
- Database row-level security per client/team
- Redis stream permissions per agent (triggers.{agent} pattern)
EVIDENCE: network policy manifests, database permission matrices, Redis ACL config
AGENT: boris (database access), rutger (network access), julian (access policy)

CC6.5 — SYSTEM_BOUNDARY_PROTECTION:
- k3s cluster: all services internal, minimal external exposure
- NodePort services explicitly enumerated (wiki 30080, admin-ui)
- No direct database access from outside cluster
- Ingress controller with TLS termination
- Dima as only public-facing entry point (stateless, unhackable by design)
EVIDENCE: k8s service manifests, ingress configuration, network policy manifests
AGENT: rutger (boundary implementation)

CC6.6 — ENCRYPTION_IN_TRANSIT:
- TLS 1.3 on all external-facing endpoints
- PostgreSQL SSL connections enforced
- Redis communication within cluster (internal only)
- Inter-service communication via k8s internal DNS (not exposed externally)
EVIDENCE: TLS certificates, PostgreSQL SSL configuration, cipher suite configuration
AGENT: rutger (TLS implementation), julian (crypto policy)

CC6.7 — CREDENTIAL_MANAGEMENT:
- Vault stores all secrets (API keys, database credentials)
- Per-agent Vault paths — agents cannot access other agents' secrets
- No credentials in code (Semgrep rules detect hardcoded secrets)
- WebAuthn eliminates password management for admin access
- Secret rotation policy documented
EVIDENCE: Vault configuration, secret scanning results, rotation records
AGENT: rutger (Vault management), julian (credential policy)

CC6.8 — THREAT_PROTECTION:
- Trivy container scanning (prevent vulnerable images)
- Semgrep static analysis (prevent vulnerable code)
- Ashley (Adversarial Agent) performs pre-deployment security testing
- Network policies prevent lateral movement
- Cost gate prevents resource abuse
EVIDENCE: Trivy reports, Semgrep results, adversarial test reports, network policies
AGENT: ashley (adversarial testing), koen (code security), rutger (infra security)


CC7 — SYSTEM OPERATIONS

TAG:CC7 TAG:SYSTEM_OPERATIONS TAG:FOCUS

WHAT_AUDITORS_LOOK_FOR

  • Detection of unauthorized changes (CC7.1 — change detection)
  • Monitoring for anomalies and security events (CC7.2)
  • Evaluation of detected events (CC7.3)
  • Response to identified incidents (CC7.4)
  • Recovery from incidents (CC7.5)

HOW_GE_SATISFIES

CC7.1 — CHANGE_DETECTION:
- Git tracks all code changes with attribution
- k8s audit logging detects configuration changes
- Jaap (SSOT Enforcer) detects drift from declared state
- Constitution Principle 1 (Config Is King) — config changes are version-controlled
- Container image rebuild required for all code changes (no runtime modification)
EVIDENCE: git audit log, k8s audit logs, SSOT enforcement records
AGENT: jaap (drift detection), ron (runtime monitoring)

CC7.2 — ANOMALY_MONITORING:
- Ron (System Integrity Monitor) performs continuous monitoring
- Health escalation: 3=warn, 5=escalate to mira, 10=critical
- Grafana dashboards with alerting rules
- Loki for log aggregation and pattern matching
- Cost gate detects abnormal token consumption
- Executor dedup detects double-delivery anomalies
EVIDENCE: alert configurations, Grafana dashboards, Loki queries, cost gate logs
AGENT: ron (monitoring), mira (escalation handling)

CC7.3 — EVENT_EVALUATION:
- Ron performs first-pass assessment of all security events
- Two-signal verification prevents false positive escalation
- Classification criteria per severity level (SEV1-4)
- Mira makes final classification decision for escalated events
EVIDENCE: event assessment logs, classification decisions with rationale
AGENT: ron (first-pass), mira (classification)

CC7.4 — INCIDENT_RESPONSE:
- Full incident lifecycle: detect -> classify -> respond -> mitigate -> resolve -> post-mortem
- Mira as designated Incident Commander
- Sandro (backend hotfix) and Tobias (frontend hotfix) as responders
- SLAs per severity: SEV1 acknowledge 5min, respond 15min, mitigate 1hr
- Communication templates for internal and client-facing notifications
EVIDENCE: incident records with timestamped actions, communication logs
AGENT: mira (commander), sandro/tobias (responders)
CROSS_REF: domains/incident-response/index.md

CC7.5 — INCIDENT_RECOVERY:
- ge-orchestrator: 2 replicas, HA consumer group, automatic recovery
- PodDisruptionBudget prevents simultaneous failures
- Recovery procedures: startup drain + 2-phase orphan claiming + stale consumer cleanup
- Post-mortem within 48 hours with mandatory action items
- Every SEV1/SEV2 produces wiki brain learning
EVIDENCE: recovery procedure documentation, PDB configurations, post-mortem records
AGENT: mira (recovery coordination), rutger (infrastructure recovery)


CC8 — CHANGE MANAGEMENT

TAG:CC8 TAG:CHANGE_MANAGEMENT TAG:FOCUS

WHAT_AUDITORS_LOOK_FOR

  • Authorized changes before implementation (CC8.1)
  • Change testing before deployment (CC8.2 — test environments, test results)
  • Change approval and documentation (CC8.3 — audit trail)
  • Emergency changes managed appropriately (CC8.4)

HOW_GE_SATISFIES

CC8.1 — CHANGE_AUTHORIZATION:
- Anti-LLM pipeline: no code reaches production without multi-agent review
- Anna(spec) -> Antje(TDD) -> Devs -> Koen(linting) -> Marije(test) -> Jasper(reconcile) -> Marco(conflict) -> Ashley(adversarial) -> Jaap(SSOT) -> Marta(merge)
- Marta (GitHub Goalkeeper) is sole merge authority — controls what reaches main branch
- Feature branches required (Constitution: never commit to main directly)
- Work packages tracked in DAG with dependencies enforced
EVIDENCE: PR history with review records, DAG execution logs, merge approvals
AGENT: marta (merge authority), koen (code review), julian (change policy)

CC8.2 — CHANGE_TESTING:
- Antje (TDD) writes tests BEFORE development begins
- Marije (Testing Lead) ensures test coverage meets standards
- Jasper (Test Reconciliation) verifies test results match specifications
- Ashley (Adversarial Agent) performs pre-deployment security/edge-case testing
- Environment separation: dev -> staging -> production promotion path
EVIDENCE: test results, test coverage reports, adversarial test reports, environment configs
AGENT: antje (TDD), marije (testing), jasper (reconciliation), ashley (adversarial)

CC8.3 — CHANGE_DOCUMENTATION:
- Git commit history provides complete change attribution
- PR descriptions document change purpose and scope
- Blast Radius section required for shared interface changes (Principle 6)
- Constitution v2 acknowledged per session
- Container image rebuild log for deployments
EVIDENCE: git log, PR records, blast radius assessments, deployment logs
AGENT: marta (PR management), jaap (SSOT)

CC8.4 — EMERGENCY_CHANGES:
- Hotfix procedures documented (see incident-response/hotfix-procedures.md)
- Emergency: rollback-first philosophy (fastest mitigation)
- Mira authorizes emergency changes during incidents
- Emergency changes receive post-facto review within 24 hours
- All emergency actions timestamped in incident record
EVIDENCE: incident records, emergency change logs, post-facto review records
AGENT: mira (emergency authorization), sandro/tobias (hotfix execution)

MARTA_EVIDENCE_PRODUCTION:
- Every merge to main produces: PR number, reviewer list, test results, approval timestamp
- GitHub webhook captures merge events into PostgreSQL
- Monthly summary: total changes, review coverage, rejection rate, average review time
- SOC 2 auditors review sample of PRs for evidence of review process
FORMAT: structured JSON in PostgreSQL change_records table


CC9 — RISK MITIGATION

TAG:CC9 TAG:RISK_MITIGATION

WHAT_AUDITORS_LOOK_FOR

  • Vendor and business partner risk managed (CC9.1)
  • Risk acceptance decisions documented (CC9.2)

HOW_GE_SATISFIES

CC9.1 — VENDOR_RISK:
- LLM provider assessment: Anthropic, OpenAI, Google evaluated
- Data processing agreements with all providers
- No client PII sent to LLM providers
- SBOM for dependency supply chain visibility
- Vendor review cycle: annual or on significant change
EVIDENCE: vendor assessment records, DPAs, SBOM manifests
AGENT: julian (vendor assessment)

CC9.2 — RISK_ACCEPTANCE:
- Risk register with documented acceptance decisions
- Residual risk documented with compensating controls
- Management (Dirk-Jan) approves risk acceptance above defined threshold
- Risk acceptance review: annual
EVIDENCE: risk register, risk acceptance records with signatures
AGENT: julian (risk documentation)


AVAILABILITY — TRUST SERVICE CRITERIA

TAG:AVAILABILITY

WHAT_AUDITORS_LOOK_FOR

  • Performance monitoring against commitments (A1.1)
  • Recovery from incidents that affect availability (A1.2)
  • Testing of recovery procedures (A1.3)

HOW_GE_SATISFIES

A1.1 — PERFORMANCE_MONITORING:
- Grafana dashboards track system metrics (CPU, memory, response time)
- Health dump script (scripts/k8s-health-dump.sh) runs on host cron
- SLA tracking: monthly report on uptime, response time, incident count
- Ron (System Integrity Monitor) alerts on performance degradation
EVIDENCE: monitoring dashboards, SLA reports, health dump data
AGENT: ron (monitoring), rutger (infrastructure)

A1.2 — AVAILABILITY_RECOVERY:
- ge-orchestrator: 2 replicas, consumer group failover
- PodDisruptionBudget (PDB) prevents full outage during updates
- Circuit breaker prevents cascading failures
- Incident response procedures (see CC7.4, CC7.5)
EVIDENCE: PDB configurations, failover test results, incident recovery records
AGENT: rutger (infrastructure), mira (incident recovery)

A1.3 — RECOVERY_TESTING:
- Backup restoration tests
- Failover simulation (orchestrator replica loss)
- Incident simulation exercises
EVIDENCE: recovery test results with timestamps and outcomes
AGENT: rutger (infrastructure testing), amber (test verification)
NOTE: recovery testing frequency = quarterly minimum


CONFIDENTIALITY — TRUST SERVICE CRITERIA

TAG:CONFIDENTIALITY

WHAT_AUDITORS_LOOK_FOR

  • Identification of confidential information (C1.1)
  • Disposal of confidential information (C1.2)

HOW_GE_SATISFIES

C1.1 — CONFIDENTIAL_INFORMATION_IDENTIFICATION:
- Client code and data classified as confidential by default
- Data classification schema: public, internal, confidential, restricted
- Three-zone architecture enforces confidentiality boundaries
- Dima (public zone) has zero access to confidential data
- Team zone isolation prevents cross-client data access
EVIDENCE: data classification records, network policy manifests, zone architecture docs
AGENT: julian (classification policy), boris (data controls)

C1.2 — CONFIDENTIAL_INFORMATION_DISPOSAL:
- Client data deletion on project completion or client request
- Redis stream MAXLEN prevents unbounded data retention
- Log rotation with defined retention periods
- Secure deletion procedures for storage media
EVIDENCE: deletion records, retention configuration, MAXLEN settings
AGENT: boris (data disposal), julian (retention policy)


AUDIT_EVIDENCE_COLLECTION

CONTINUOUS_EVIDENCE (automated)

  • Git commit history (change management)
  • k8s audit logs (access and configuration changes)
  • Trivy scan reports (vulnerability management)
  • Semgrep scan reports (code security)
  • Cost gate logs (resource consumption)
  • Health dump data (availability monitoring)
  • Redis stream records (operational messaging)
  • PTY capture transcripts (agent session traces)

PERIODIC_EVIDENCE (manual/semi-automated)

  • Quarterly internal audit reports (Amber)
  • Annual vendor assessments (Julian)
  • Quarterly access reviews (Julian + Rutger)
  • Monthly SLA compliance reports (Ron)
  • Post-mortem records (Mira)
  • Management review minutes (Dirk-Jan)

EVIDENCE_RETENTION

  • SOC 2 Type II examination period: 12 months
  • Evidence retained: minimum 3 years beyond examination period
  • PostgreSQL as SSOT for structured evidence
  • Wiki for human-readable documentation

SOC2_READINESS_CHECKLIST

BEFORE_ENGAGEMENT:  
[ ] scope defined (systems, categories, period)  
[ ] all CC1-CC9 controls documented  
[ ] evidence collection automated where possible  
[ ] internal audit completed (Amber)  
[ ] management review conducted (Dirk-Jan)  
[ ] corrective actions from internal audit closed or documented as in-progress  

DURING_EXAMINATION:  
[ ] auditor access to evidence systems provisioned  
[ ] designated contact for auditor inquiries (Julian)  
[ ] evidence samples prepared per CC  
[ ] walkthroughs of key processes scheduled  
[ ] system descriptions (description criteria) reviewed and current  

POST_EXAMINATION:  
[ ] management response to findings prepared  
[ ] corrective action plan for any exceptions  
[ ] lessons learned documented in wiki brain  
[ ] next examination cycle planned  

READ_ALSO: iso27001-controls.md, evidence-automation.md, audit-procedures.md, domains/incident-response/index.md