Memory Governance — Versioned ICM Operations
AOI uses governed memory versioning for workspaces registered in .specify/memory/versions/active.json. This skill describes the lifecycle of memory versions, bundles, sync, and rollback.
Version Architecture
.specify/memory/versions/
├── active.json # Canonical active version pointer
├── manifests/
│ └── {version-id}.json # Immutable version manifest
├── bundles/
│ └── {version-id}.json.gz # Exported portable bundles
└── templates/
├── memory-version.template.json
├── memory-bundle.template.json
└── dynamic-constitution.template.md
.exportsmemories/ is where portable bundles land for cross-workspace transfer.
Core Scripts
All scripts live in scripts/memory-sync/:
| Script | Purpose |
|---|---|
resolve-active-version.mjs |
Read active version for workspace |
prepare-version-manifest.mjs |
Create a new version manifest |
activate-version.mjs |
Set a version as active |
export-memory-bundle.mjs |
Export active version to portable bundle |
import-memory-bundle.mjs |
Import a bundle as a candidate version |
rollback-version.mjs |
Restore previous version |
bundle-contract.test.mjs |
Validate bundle schema |
bundle-lifecycle.test.mjs |
Validate full lifecycle |
Bundle Lifecycle
Export (/export-memory-bundle)
- Resolve active version:
node scripts/memory-sync/resolve-active-version.mjs "$WORKSPACE" - Ask Owner for scope:
fullortopic-subset - Run
node scripts/memory-sync/export-memory-bundle.mjswith version ID + scope - Bundle lands in
.exportsmemories/{workspace}-{versionId}.json.gz - Store provenance in ICM
Import (/import-memory-bundle or /sync-workspace-memory)
- Detect source (bundle file for import, workspace for sync)
- Validate schema:
node scripts/memory-sync/bundle-contract.test.mjs - Create candidate version via
import-memory-bundle.mjs - Gate: Candidate version is NOT active yet — Owner must approve
- Owner activates via
/sync-workspace-memoryconfirmation - Dynamic constitution is updated from snapshot
Rollback (/rollback-workspace-memory)
- Resolve active version + confirm
previousVersionId - Safety check: validate previous version integrity
- Run
node scripts/memory-sync/rollback-version.mjs "$WORKSPACE" "$targetVersionId" - Must provide
reasonfor rollback - Active pointer is updated atomically
Critical Constraints
- Manifests under
.specify/memory/versions/manifests/are immutable — never edit them active.jsonis the single source of truth for which version is active- Dynamic constitution snapshots MUST match the manifest they belong to
- Rollback targets ONLY the registered
previousVersionId— not arbitrary versions - Sync/import flows MUST declare
sourceWorkspace+sourceVersionId
ICM Topics for Memory Governance
Always store operations under:
{WORKSPACE}-contextfor version activation changes{WORKSPACE}-architecturefor memoir graph updates after syncsdd-{WORKSPACE}-memory-opsfor operational logs of bundle/sync/rollback