Telecom & IT Operations · TypeScript SDK

Let a remediation agent act without skipping the change freeze

Your operations agent wants to restart a service at 2 a.m. The TypeScript SDK checks the change against your operations rules first, and a person can stop it from the portal while it runs.

Change facts the operations rule reads

The remediation simulator sends these. Most come from your incident tool and change calendar.

FactWhat it holds
service_tiercore_routing, billing_platform, customer_portal, or internal_tooling.
proposed_actionrestart_service, rollback_config, failover_region, or scale_out.
blast_radius_customersCustomers the change could affect.
incident_severitysev1, sev2, or sev3.
change_freeze_activeTrue during a change freeze.
approval_ticket_linkedTrue when an approved change ticket is attached.
execution_windowbusiness_hours or maintenance_window.

TypeScript: check between runbook steps

The callback receives a signal and throwIfStopped. Call it between steps so a stop from the portal takes effect before the next one starts.

TypeScript · @veriproof/sdk-core

import { Veriproof } from '@veriproof/sdk-core';

const veriproof = Veriproof.fromEnv();

const result = await veriproof.govern(
  'remediation.execute',
  change,
  async ({ input, invocationId, signal, throwIfStopped }) => {
    for (const step of runbook.steps(input)) {
      throwIfStopped();
      await step.run({ idempotencyKey: invocationId, signal });
    }
    return runbook.summary(input);
  },
  {
    facts: {
      service_tier: change.serviceTier,
      proposed_action: change.action,
      blast_radius_customers: change.affectedCustomers,
      incident_severity: incident.severity,
      change_freeze_active: calendar.freezeActive(),
      approval_ticket_linked: Boolean(change.ticketId),
      execution_window: calendar.windowFor(new Date()),
    },
  },
);

if (result.status === 'cancelled_by_directive') {
  await incidents.note(change.id, 'Stopped from the portal');
}

When a stop arrives mid-change, the status is cancelled_by_directive and execution says whether steps may already have run, so you know what to roll back.

Why TypeScript here: Plenty of incident automation and chat-ops tooling runs on Node.js, and the SDK passes an abort signal straight into your runbook steps.

Stopping a change halfway

A stop can arrive after the first step has run. Because the callback checks throwIfStopped() between steps, the rest never start, and the result tells you what may already have changed.

Three changes at three risk levels

Run any of these in the remediation simulator. Run remediation simulator

ResultWhenWhat your code seesWho picks it up
AllowedA scale-out inside the maintenance window.The runbook runs. The record keeps the change facts and the rule that allowed it.The Business Owner sees how much the agent resolves on its own. Auditors read the record inside an engagement.
Sent to a personA billing rollback during business hours that affects 8,500 customers.The change waits for a manager to decide.The operations manager with that authority, in the VeriProof Inbox, by email, or in Slack or Microsoft Teams, with reminders and escalation.
StoppedA SEV-1 restart during a change freeze with no approval ticket linked.The status is blocked and no runbook step runs.The Governance Engineer sees the freeze rule that stopped it.

When the operations rules move

Developer fix request

If a new rule reads the on-call engineer’s acknowledgement and your agent doesn’t send it, the Developer gets a fix request naming the field.

Changing the rule

Loosening the freeze for SEV-1 incidents is a rule change. Run it in Shadow against real incidents first. For the production agent, an administrator or compliance officer approves it, not the engineer who wrote it.

See how the six role portals hand off work

Next steps

Try the freeze scenario

Run the SEV-1 restart in the remediation simulator and see the change stop before anything restarts.