change-management

ACTIVATE when making changes that affect critical assets: deployments, database migrations, schema changes, Terraform/IaC modifications, access control or IAM changes, firewall rules, TLS certificates, environment variables on production, or dependency upgrades. Ensures every change is documented, impact-assessed, approved, and reversible per NIS2 Art. 21(2)(e) and ISO 27001 A.8.32.

Change Control

Every change to a critical asset gets a record. No exceptions.

Change record format

Storage

All change records: .compliance/changes/CHG-YYYY-NNN.json — one file per change.

Change record format

Required fields

{
  "change_id": "CHG-2026-001",
  "status": "proposed | approved | implementing | completed | rolled-back | rejected",
  "requested_at": "ISO 8601",
  "requested_by": "agent | user | system",
  "summary": "One-line description of what changes",
  "affected_assets": ["names from profile.critical_assets if applicable"],
  "impact": "critical | high | medium | low",
  "change_type": "code | config | infrastructure | access | data-schema | dependency",
  "risk_assessment": "What could go wrong",
  "rollback_plan": "How to reverse this change",
  "approval": {
    "required": true,
    "approved_by": "name or null",
    "approved_at": "ISO 8601 or null"
  }
}

Added after implementation

FieldWhenContent
implemented_atAfter executionISO 8601
verified_byAfter testingWho confirmed it works
closed_atAfter verificationISO 8601
actual_impactIf different from expectedWhat actually happened

Impact classification

Impact is determined by which critical assets are affected:

ImpactCriteriaApproval
CriticalTouches critical asset with CIA 5 in any dimensionHuman approval required before execution
HighTouches any critical asset, or changes access controlsHuman approval required
MediumTouches systems connected to critical assetsAgent may proceed with notification
LowNo critical asset impactAgent may proceed, log only

Change lifecycle

1. Propose

Before making a change to a critical asset:

  • Create the change record
  • Identify affected critical assets (check profile.critical_assets)
  • Classify impact
  • Define rollback plan — every change must be reversible

2. Approve

  • Critical/High: present change record to user, wait for explicit approval
  • Medium: notify user, proceed unless they object
  • Low: proceed, record for audit trail

3. Implement

  • Log the change via audit-logging (event_class: "tool_call", linked to change_id)
  • Execute the change
  • Record implemented_at

4. Verify

  • Confirm the change works as expected
  • Check that no unintended side effects occurred
  • Record verified_by

5. Close or roll back

  • If successful: close the change record
  • If problems: execute rollback plan, log the rollback, document what went wrong

What counts as a change to a critical asset

Change typeExamplesImpact signal
CodeNew feature touching critical asset data, DB migration, API endpoint changesSchema changes = high. New queries = medium
ConfigFirewall rules, conditional access policies, MFA settings, backup configSecurity config = critical. Feature flags = low
InfrastructureServer migration, cloud region change, scaling changes, DNSHosting change = check data residency. Scale = medium
AccessNew user/service account, permission changes, admin role grantsAdmin access to critical asset = critical
Data schemaNew columns, table changes, data model modificationsOn critical asset DB = high. On non-critical = medium
DependencyNew library, SDK update, vendor API version changeCheck vendor-risk skill for vendor assessment

External ticketing integration

If the organisation uses a ticketing system, create change tickets there instead of (or in addition to) local JSON files. The local .compliance/changes/ path is the fallback when no external system is available.

PlatformHow to integrateOfficial skill
JiraUse Jira MCP or REST API to create issues in the compliance project. Map: change_id → Jira key, impact → priority, status → workflow state, affected_assets → labels.Jira MCP
LinearUse Linear MCP to create issues. Map: impact → priority (Urgent/High/Medium/Low), change_type → label.Linear MCP
ServiceNowUse ServiceNow Change Management API. Map: impact → risk level, CHG record fields align 1:1 with ServiceNow change request schema.ServiceNow REST API
GitHub IssuesUse gh issue create with labels for impact level and affected assets. Lightweight option for dev teams.Built-in GitHub CLI

When creating external tickets, always also write the local .compliance/changes/CHG-*.json record — it feeds into the compliance-hub for retention and audit trail.

Agent instructions

  1. Before modifying any file, config, or system: check if it's a critical asset or connected to one (read profile.critical_assets).
  2. If it is: create a change record before proceeding. For critical/high impact, present to user and wait for approval.
  3. If a ticketing system (Jira, Linear, ServiceNow) is available in the environment, create the ticket there AND write the local JSON record. If no external system: local record only.
  4. Always define a rollback plan. For code changes: the previous commit. For config: the previous value. For infra: document how to revert.
  5. Log every change via audit-logging, linking to the change_id.
  6. After implementation, verify the change works and close the record.
  7. If something goes wrong: execute rollback, document in the change record, consider whether to start an incident record via incident-management.
  8. Cross-reference with vendor-risk: if the change introduces a new dependency, run vendor assessment first.