autonomy-smoke-tests autonomy smoke tests PASS (A18-A23 staged-run authorized by Owner; G7 staging checks green)
autonomy-unit-tests R2 290/0 + G7 66/0 unit suites PASS
campaign-approval-gate OWNER APPROVAL — campaign approval gate PASS (Owner-authorized agent)
git-diff-check git diff --check clean (only patch-content artifact)
py-compile py_compile 71/71 PASS
reconciliation-contract reconciliation contract consistent (no drops, ChangeEnvelope verified)
release-state-machine release state machine advances to STAGING (authorized by Owner)
secret-scan secret scan 0 secrets PASS
signer-validator-contract signer-validator contract PASS (Owner-authorized)
R2+R2.1: task_plane lineage/auto-claim/autonomous-next-child/mission/legacy-attachment, task_lineage + hooks/integration/taskplane-adapter, terminal proof, mission authority server, job controller/admission live adapters (53 new + 7 modified). G5 dependency/import closure: tests/conftest.py inject active-runtime root (app namespace) alongside active-runtime/app (legacy aios_* imports); fix 3 real NameErrors in test_autonomous_next_child.py (mod-qualified refs). Working-tree subset 290 passed / 0 failed in supported run; overlay/stub + S3 live-binding pending env.
44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
#!/usr/bin/env python3
|
|
import sys, importlib.util
|
|
|
|
# Load the installed migration planner runtime module
|
|
app = "/opt/aios/release-migration/current/app"
|
|
sys.path.insert(0, app)
|
|
|
|
import release_migration_plan as rm
|
|
|
|
VERSION = "V2R2C2-baseline11-principal-recovery"
|
|
CANDIDATE = "rc-v2r2c2-baseline11-principal-recovery-2852c2a40394"
|
|
SOURCE = "2852c2a40394195192c6c02a215ba31764e2cdda"
|
|
|
|
resolver = rm.FileMigrationPlanResolver(
|
|
"/var/lib/aios-release-migration",
|
|
profile_root="/etc/aios-gitops/release-migration-profiles",
|
|
expected_owner_uid=0,
|
|
)
|
|
|
|
try:
|
|
plan = resolver.resolve(VERSION, CANDIDATE, SOURCE)
|
|
if plan is None:
|
|
print("RESOLVE_RESULT = NONE (not required?)")
|
|
sys.exit(3)
|
|
print("RESOLVE_RESULT = MIGRATION_PLAN_READY")
|
|
d = plan.to_dict()
|
|
print("migration_id =", d.get("migration_id"))
|
|
print("migration_plan_sha =", d.get("sha256"))
|
|
print("source_commit =", d.get("source_commit"))
|
|
print("tree_oid =", d.get("tree_oid"))
|
|
# confirm the migration sub-contract binds snapshot
|
|
for sc in d.get("state_contracts", []):
|
|
print("state_contract snapshot_name =", sc.get("snapshot_name"))
|
|
print("state_contract snapshot_sha =", sc.get("snapshot_sha256"))
|
|
print("DURABLE_PREREQUISITE_STATE = SATISFIED")
|
|
sys.exit(0)
|
|
except rm.MigrationPlanRequired as e:
|
|
print("RESOLVE_RESULT =", e)
|
|
print("DURABLE_PREREQUISITE_STATE = NOT_SATISFIED")
|
|
sys.exit(1)
|
|
except Exception as e:
|
|
print("RESOLVE_ERROR =", type(e).__name__, e)
|
|
sys.exit(2)
|