Change Plans

A structured workflow for proposing, reviewing, and implementing system changes.

What Is a Change Plan?

A change plan is a formal document that describes a proposed modification to your system. It includes what will change, why it needs to change, what the impact will be, and how risky the change is. Change plans are generated as YAML files that can be reviewed by team members or AI agents before implementation begins.

Change plans bring the rigor of RFC-style proposals to everyday development. Instead of making changes and hoping nothing breaks, you create a plan first, review the blast radius, and then proceed with full awareness of the consequences.

The Change Plan Workflow

  1. Create a plan. Use the CLI to generate a change plan document with a title describing the proposed change.
  2. Review the impact. The plan includes automatic impact analysis showing what will be affected.
  3. Assess the risk. Each plan is assigned a risk level based on the scope and nature of the changes.
  4. Get approval. Share the plan with your team or feed it to an AI agent for review.
  5. Implement. Make the changes described in the plan, then validate with sysmara build.

Creating a Change Plan

Use the sysmara plan create command to generate a new plan:

npx sysmara plan create "Add payment processing to billing module"

This creates a YAML file in your project with the plan details. The planner automatically runs impact analysis for any entities or capabilities mentioned in the plan.

Viewing a Change Plan

Use sysmara plan show to display an existing plan:

npx sysmara plan show plans/add-payment-processing.yaml

Plans can be rendered in multiple formats:

PlanRequest Format

When creating a plan programmatically or understanding what goes into one, a PlanRequest contains:

Risk Levels

Each change plan is classified with a risk level based on the impact surface:

Risk Level Criteria Recommended Action
Low Affects few specs, no cross-module impact, no invariants involved Proceed with normal review
Medium Crosses module boundaries or affects invariants Requires team review before implementation
High Large blast radius, affects critical paths, or modifies shared entities Requires thorough review and staged rollout

Example Change Plan

Here is a complete example of a change plan YAML file:

title: Add payment processing to billing module
description: |
  Introduce a Payment entity and ChargeCard capability to handle
  credit card processing within the billing module. This connects
  to the existing Subscription and Invoice entities.
type: modify
targets:
  - entity:Payment
  - capability:ChargeCard
  - module:billing

risk: medium

impact:
  affected_capabilities:
    - CreateSubscription
    - ChargeInvoice
    - ChargeCard
  affected_modules:
    - billing
  affected_entities:
    - Payment
    - Invoice
    - Subscription
  affected_invariants:
    - PaymentAmountPositive

steps:
  - Create Payment entity spec in system/entities/payment.yaml
  - Define ChargeCard capability in system/capabilities/charge-card.yaml
  - Add PaymentAmountPositive invariant
  - Update billing module to include new entity and capability
  - Run sysmara validate to check for errors
  - Run sysmara build to generate updated graph and diagnostics

notes: |
  The ChargeCard capability will need a policy for PCI compliance.
  Consider adding a RequirePCIScope policy before production deployment.

How Teams Use Change Plans in Practice

Change plans integrate naturally into development workflows:

Automating Plan Review

Since plans are YAML files with a known structure, you can automate review steps:

# In CI: reject high-risk plans without explicit approval
npx sysmara plan show plans/my-change.yaml --json | \
  jq -e '.risk != "high"' || echo "High-risk plan requires approval"

You can also use sysmara validate after implementing a plan to confirm that the changes are consistent with the rest of the system.