Skip to main content

Full Runtime profile migration

This page records the earlier Basic-fallback acceptance. For the newer operator-validated three-profile workflow preserving custom DLP through explicit dependency recreation and mapping, use prod to dev — preserve custom DLP. The two runs have different scopes; custom-DLP preservation does not imply that Runtime backup clones DLP resources.

This workflow backs up all latest Runtime profiles and their referenced custom topics from aisecurity, restores them into an empty cdot65 destination, and verifies a second run changes nothing. It is not a complete tenant export: API keys, applications, historical revisions, traffic, and custom Enterprise DLP resources are outside this backup.

The source is TSG 1852583913; the destination is TSG 1220195158. Replace both tenant names and IDs when adapting this example. Do not use it against a production destination without reviewing the policies and the explicit loss of custom DLP protection.

Prerequisites​

Use CLI 5.7.1 or newer and existing named tenants with valid Management credentials. Run commands individually from a private working directory; environment variables and .env files are not read. These commands use the installed airs-cli executable.

airs-cli --version
airs-cli runtime profiles restore --help
airs-cli tenant list

Check both registered TSG IDs before continuing. The destination must be empty for this clean-start example. These are real writes; no existing configuration is deleted.

Inspect the destination and back up the source​

airs-cli tenant switch cdot65
airs-cli tenant list
airs-cli runtime profiles list --all --max 0 --output json
airs-cli runtime topics list --all --max 0 --output json

Both inventories must be []. Otherwise stop; use the recovery preview below for an already-started migration rather than repeating the clean-start workflow.

airs-cli tenant switch aisecurity
airs-cli runtime profiles backup --all --output-file ./source-profiles.json --output json
airs-cli tenant switch cdot65
airs-cli tenant list

Verify the backup response's source TSG and counts. Keep the backup private. Existing backup files are not overwritten; choose a new filename if necessary.

Preview and restore​

airs-cli runtime profiles restore ./source-profiles.json \
--on-missing-dlp basic --expect-tsg 1220195158 --dry-run --output json

Review every Basic fallback: custom detection rules are lost. Do not continue if you require those rules; use the custom-DLP preservation guide. Check the destination TSG, resource counts, and all proposed actions before proceeding.

airs-cli runtime profiles restore ./source-profiles.json \
--on-missing-dlp basic --expect-tsg 1220195158 --output json

Review the interactive confirmation. The result must have complete: true; any failure leaves completed writes in place. Inspect rather than automatically retrying.

Verify the restored configuration​

airs-cli runtime profiles list --all --max 0 --output json
airs-cli runtime topics list --all --max 0 --output json
airs-cli runtime profiles restore ./source-profiles.json \
--on-conflict verify --on-missing-dlp basic --expect-tsg 1220195158 --dry-run --output json

Expect every profile action to be verify and topic action to be reuse, with no creates or updates. Inspect individual policies with airs-cli runtime profiles get:

airs-cli runtime profiles get insomnia --output json
airs-cli runtime profiles get NexusOS-Platform-HIGH --output json
airs-cli runtime profiles get Truffles --output json

After a clean preview, complete verification and optionally back up the destination:

airs-cli runtime profiles restore ./source-profiles.json \
--on-conflict verify --on-missing-dlp basic --expect-tsg 1220195158 --output json
airs-cli runtime profiles backup --all --output-file ./destination-profiles.json --output json
airs-cli runtime profiles list --all --max 0 --output json
airs-cli runtime topics list --all --max 0 --output json
airs-cli tenant list

Expect complete: true, all profiles verified, topics reused, and unchanged destination IDs/revisions. Without --dry-run, verify can create missing resources; do not treat it as universally read-only. Keep source and destination backups private.

Recovery and protection differences​

If interrupted, retain the source backup and inspect a read-only recovery preview:

airs-cli runtime profiles restore ./source-profiles.json \
--on-conflict verify --on-missing-dlp basic --expect-tsg 1220195158 --dry-run

Ensure cdot65 is selected with the intended credentials. Remove --dry-run only after reviewing the plan. Avoid skip for acceptance: it does not prove existing profiles match.

Basic fallback explicitly loses custom detection rules. In this environment it affects insomnia and Truffles (Calvin Test), plus NexusOS-Platform-HIGH (Nested Tested). Actions and masking remain verified. This test does not claim custom detection parity, application cutover, scanner behavior or full Enterprise DLP dependency migration.

Observed server additions are checked separately: omitted detector severities, toxicity confidence settings, topic-guardrails and blocked-topic severities. Explicit source values, changed actions/identities/revisions, and unknown additions remain verification failures.

Acceptance evidence​

The first full attempt exposed previously untested topic severity defaults; a recovery attempt exposed contextual-grounding severity. Both stopped rather than bypassing policy verification. Regression tests were added for those observations. The interrupted run then completed and verified all 19 profiles and 26 topics, with unchanged source resources. Private recovery evidence: artifacts/full-runtime-migration-MGdhDm/.

Final clean-start result — 2026-09-09​

Passed all eight acceptance checks. After removing only this test's newly created resources, the final run started at zero profiles and zero topics and completed without interruption. Both source and destination credential files remained byte-for-byte unchanged; source inventories and source backup were unchanged. cdot65 was left selected. Restored resources are retained for review, so the destination is no longer empty.

Private evidence: artifacts/full-runtime-migration-Aodjkc/. The failed attempts and recovery evidence above are retained, not overwritten.

Actual aggregate output from the final run (fallback details summarized separately):

{"check":"Destination identity and starting inventories checked","passed":true,"profiles":0,"topics":0,"resume":false}
{"check":"Fresh source backup created with private permissions","passed":true,"profiles":19,"topics":26}
{"check":"Dry-run creates nothing; complete dependency plan","passed":true,"profiles":19,"topics":26,"basicFallbacks":3}
{"check":"Verify rerun and final preview passed; destination IDs, revisions and policies unchanged","passed":true,"verified":19}
{"check":"Source profiles/topics and original backup unchanged; destination backup exported","passed":true}
{"check":"Credential files and tenant registrations unchanged; destination selected","passed":true}

The restore receipt reports 19 created, zero previously verified, 26 topics created. Independent comparison verified every explicit source policy value after destination topic mapping and the three approved Basic substitutions. Unknown server additions still go through the CLI's restrictive comparator; this independent check does not replace it.

ProfileCustom DLP replacedDestination protection
insomniaCalvin TestBasic
NexusOS-Platform-HIGHNested TestedBasic
TrufflesCalvin TestBasic

Use the final --on-conflict verify --dry-run command for a non-mutating check now. Do not repeat the clean-start workflow unless the destination has been deliberately cleared. This acceptance covers configuration storage and read-back, not scanning efficacy or downstream applications switching to the new profile identities.

Regression validation: 1,680 CLI tests, 11,667 SDK tests, TypeScript checks and 14 release-contract tests passed. Lint passed with seven pre-existing CLI test warnings. The updated SDK independently parsed all 19 destination policies and 26 topic references without data changes. Those historical checks used internal acceptance tooling; the workflow above now presents direct CLI commands without exposing that tooling.

The SDK and CLI were also packed and installed together in an isolated consumer. The same runner with --resume passed all eight checks against the restored tenant: zero profiles created, 19 verified, zero topics created. Independent policy checks and unchanged-source checks passed again. Private packaged-consumer evidence: artifacts/full-runtime-migration-pebMFk/. These were local package candidates, not npm releases.

Published-package verification — 2026-09-09​

SDK 0.30.0 and CLI 5.7.0 were published to npm through their GitHub release workflows with signed provenance. A fresh registry installation resolved SDK 0.30.0; all seven CLI package files matched the tested release candidate byte-for-byte. The installed CLI's OAuth integration tests passed (3/3), as did all 11 native DLP consumer checks. Those native checks used the documented local font configuration; GitHub separately passed consumer tests on Node 20.17.0, 22.13.0 and 24.

The registry-installed CLI ran the full live acceptance runner with --resume against the already-restored tenant. All eight checks passed, without creating resources. Private evidence: artifacts/full-runtime-migration-KilnEM/.

Aggregate summary of package verification and restore receipts:

{
"cliVersion": "5.7.0",
"sdkVersion": "0.30.0",
"profilesCreated": 0,
"profilesVerified": 19,
"topicsCreated": 0,
"checks": 8,
"passed": true
}

Independent comparison again verified source preservation, destination topic bindings, explicit policy settings, and unchanged IDs/revisions. Both credential files remained unchanged, and cdot65 remained selected. The global executable on the acceptance host was updated from 5.6.0 to 5.7.0; users do not need a local repository checkout.

Release evidence: SDK publication, CLI publication, and CLI release checks. The published container also passed native DLP consumer checks on both linux/amd64 and linux/arm64, with network access disabled during verification (container workflow).

Assessment: 9/10 for this Runtime migration MVP, not for complete AIRS product coverage. Configuration migration, recovery, packaging and preservation checks pass. The remaining gap is intentional: custom Enterprise DLP profiles, patterns and dictionaries are not cloned, and Basic fallback cannot preserve their detection semantics. Full DLP dependency migration and post-migration scanner-efficacy tests remain separate work.