ObjectStackObjectStack

Package Upgrade

Package Upgrade protocol schemas

Package Upgrade Protocol

Defines the complete lifecycle for upgrading installed packages,

including pre-upgrade analysis, snapshot/backup, execution, validation,

and rollback capabilities.

Architecture Alignment

  • Salesforce: Managed Package upgrade with push upgrades and subscriber control

  • ServiceNow: Update Sets with preview, commit, and back-out support

  • Helm: Helm upgrade with rollback to previous release

  • Kubernetes: Rolling update with readiness probes and automatic rollback

Upgrade Flow


1. PreCheck    → Validate compatibility, check dependencies

2. Plan        → Generate upgrade plan with metadata diff

3. Snapshot    → Backup current state (metadata + customizations)

4. Execute     → Apply new package metadata with 3-way merge

5. Validate    → Run post-upgrade health checks

6. Commit      → Finalize upgrade (or Rollback on failure)

Source: packages/spec/src/kernel/package-upgrade.zod.ts

TypeScript Usage

import { MetadataChangeTypeSchema, MetadataDiffItemSchema, RollbackPackageRequestSchema, RollbackPackageResponseSchema, UpgradeImpactLevelSchema, UpgradePackageRequestSchema, UpgradePackageResponseSchema, UpgradePhaseSchema, UpgradePlanSchema, UpgradeSnapshotSchema } from '@objectstack/spec/kernel';
import type { MetadataChangeType, MetadataDiffItem, RollbackPackageRequest, RollbackPackageResponse, UpgradeImpactLevel, UpgradePackageRequest, UpgradePackageResponse, UpgradePhase, UpgradePlan, UpgradeSnapshot } from '@objectstack/spec/kernel';

// Validate data
const result = MetadataChangeTypeSchema.parse(data);

MetadataChangeType

Type of metadata change between package versions

Allowed Values

  • added
  • modified
  • removed
  • renamed

MetadataDiffItem

Single metadata change between package versions

Properties

PropertyTypeRequiredDescription
typestringMetadata type
namestringMetadata name
changeTypeEnum<'added' | 'modified' | 'removed' | 'renamed'>Category of metadata modification (added, modified, removed, or renamed)
hasConflictbooleanWhether this change may conflict with customizations
summarystringoptionalHuman-readable change summary
previousNamestringoptionalPrevious name if renamed

RollbackPackageRequest

Rollback package request

Properties

PropertyTypeRequiredDescription
packageIdstringPackage ID to rollback
snapshotIdstringSnapshot ID to restore from
rollbackCustomizationsbooleanWhether to restore pre-upgrade customizations

RollbackPackageResponse

Rollback package response

Properties

PropertyTypeRequiredDescription
successbooleanWhether the rollback succeeded
restoredVersionstringoptionalVersion restored to
messagestringoptionalRollback status message

UpgradeImpactLevel

Severity of upgrade impact

Allowed Values

  • none
  • low
  • medium
  • high
  • critical

UpgradePackageRequest

Upgrade package request

Properties

PropertyTypeRequiredDescription
packageIdstringPackage ID to upgrade
targetVersionstringoptionalTarget version (defaults to latest)
manifest{ id: string; namespace?: string; defaultDatasource?: string; version: string; … }optionalNew manifest (if installing from local)
createSnapshotbooleanoptionalWhether to create a pre-upgrade backup snapshot
mergeStrategyEnum<'keep-custom' | 'accept-incoming' | 'three-way-merge'>optionalHow to handle customer customizations
dryRunbooleanoptionalPreview upgrade without making changes
skipValidationbooleanoptionalSkip pre-upgrade compatibility checks

UpgradePackageResponse

Upgrade package response

Properties

PropertyTypeRequiredDescription
successbooleanWhether the upgrade succeeded
phaseEnum<'pending' | 'analyzing' | 'snapshot' | 'executing' | 'migrating' | 'validating' | 'completed' | 'failed' | 'rolling-back' | 'rolled-back'>Current upgrade phase
plan{ packageId: string; fromVersion: string; toVersion: string; impactLevel: Enum<'none' | 'low' | 'medium' | 'high' | 'critical'>; … }optionalUpgrade plan
snapshotIdstringoptionalSnapshot ID for rollback
conflicts{ path: string; baseValue: any; incomingValue: any; customValue: any }[]optionalUnresolved merge conflicts
errorMessagestringoptionalError message if upgrade failed
messagestringoptionalHuman-readable status message

UpgradePhase

Current phase of the upgrade process

Allowed Values

  • pending
  • analyzing
  • snapshot
  • executing
  • migrating
  • validating
  • completed
  • failed
  • rolling-back
  • rolled-back

UpgradePlan

Upgrade analysis plan generated before execution

Properties

PropertyTypeRequiredDescription
packageIdstringPackage identifier
fromVersionstringCurrently installed version
toVersionstringTarget upgrade version
impactLevelEnum<'none' | 'low' | 'medium' | 'high' | 'critical'>Severity assessment from none (seamless) to critical (breaking changes)
changes{ type: string; name: string; changeType: Enum<'added' | 'modified' | 'removed' | 'renamed'>; hasConflict: boolean; … }[]All metadata changes
affectedCustomizationsintegerCount of customizations that may be affected
requiresMigrationbooleanWhether data migration scripts are needed
migrationScriptsstring[]optionalPaths to migration scripts
dependencyUpgrades{ packageId: string; fromVersion: string; toVersion: string }[]optionalDependent packages that also need upgrading
estimatedDurationintegeroptionalEstimated upgrade duration in seconds
summarystringoptionalHuman-readable upgrade summary

UpgradeSnapshot

Pre-upgrade state snapshot for rollback capability

Properties

PropertyTypeRequiredDescription
idstringSnapshot identifier
packageIdstringPackage identifier
fromVersionstringVersion before upgrade
toVersionstringTarget upgrade version
tenantIdstringoptionalTenant identifier
previousManifest{ id: string; namespace?: string; defaultDatasource?: string; version: string; … }Complete manifest of the previous package version
metadataSnapshot{ type: string; name: string; metadata: Record<string, any> }[]Snapshot of all package metadata
customizationSnapshotRecord<string, any>[]optionalSnapshot of customer customizations
createdAtstringSnapshot creation timestamp
expiresAtstringoptionalSnapshot expiry timestamp

On this page