Files
aios/prove_prereq.py
T
AIOS Governed Continuation 7e1649808d
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)
feat(r2+g5): R2+R2.1 unified platform convergence candidate + G5 import/execution-mode fixes
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.
2026-09-14 22:33:41 +08:00

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)