#!/usr/bin/env bash
set -Eeuo pipefail
umask 077

STEP_ID="STEP_050M07R16_TRANSACTIONAL_GENERATION_ACTIVATION_R06_HISTORY_COLLISION_REPAIR_AND_REPORT_CONTINUATION"
R01_STEP_ID="STEP_050M07R16_TRANSACTIONAL_GENERATION_ACTIVATION_R01"
R02_STEP_ID="STEP_050M07R16_TRANSACTIONAL_GENERATION_ACTIVATION_R02_PUBLICATION_CONTINUATION"
R03_STEP_ID="STEP_050M07R16_TRANSACTIONAL_GENERATION_ACTIVATION_R03_PUBLICATION_CONTINUATION"
R04_STEP_ID="STEP_050M07R16_TRANSACTIONAL_GENERATION_ACTIVATION_R04_REPORT_CONTINUATION"
R01_INSTALLER_SHA="7a6b018f150273784e294c1d78b117945a9f6390424484dd0b56ca458a2293c4"
R02_INSTALLER_SHA="c8bb032756dc818c7384ceac55eb55ca7c96d2972fe6d6dd17c4d993950ef58c"
R03_INSTALLER_SHA="9ccdb8aaccaf18b18549f3129f6066fccaf8fb3f6c40a86b01a4b280505610b9"
R04_INSTALLER_SHA="5542302988b360da1dafab7d08ca99f7fcdc0ae1bbeb73856f63a855814f7523"
R05_STEP_ID="STEP_050M07R16_TRANSACTIONAL_GENERATION_ACTIVATION_R05_STEP_REPORT_PATH_SANITIZATION_CONTINUATION"
R05_INSTALLER_SHA="23b8698e975d4f9bf05e2c40011a8649ed9c2e821036727ea681ba16e9532698"
GENERATION_ID="r15b2-20260716-215914"
EXPECTED_POST_KIND="label:project_source_post_vm101_transactional_generation_activation_r16"

SELF="$(readlink -f "$0")"
BUNDLE_DIR="$(dirname "$SELF")"
BUNDLE_ZIP="${BUNDLE_ZIP:?BUNDLE_ZIP is required}"
EXPECTED_BUNDLE_SHA256="${EXPECTED_BUNDLE_SHA256:?EXPECTED_BUNDLE_SHA256 is required}"
EXPECTED_INSTALLER_SHA256="${EXPECTED_INSTALLER_SHA256:?EXPECTED_INSTALLER_SHA256 is required}"
BASE=/opt/router-ops
BIN="$BASE/bin"
LIB="$BASE/lib"
PUBLISHER="$BIN/router-publish-report"
HTTP_VERIFY="$BIN/router-http-verify"
REINDEX="$BIN/router-public-reindex"
WORKFLOW_LIB="$LIB/router-step-workflow.sh"
PUBLICATION_LIB="$LIB/router-publication-contract.sh"
SAFE_PAYLOAD_BUILDER="$BUNDLE_DIR/scripts/vm130/build-public-safe-payload.sh"
HISTORY_REPAIR_HELPER="$BUNDLE_DIR/scripts/vm130/repair-step-history-collision.sh"
PUBLISHER_SHA="a4977d5bd3b6f31c38d514afcae4f0850dfa44fd7e5477991fef5476d324f029"
HTTP_VERIFY_SHA="b81a8db5878c04f1259eba829c8636cce17e38cc3f44e0fb82137178d0501776"
WORKFLOW_SHA="985e35997ff3c150f76208e2a2934bfaa37c5f0762063e1beea378f521f72a0f"
PUBLICATION_LIB_SHA="a6a5c2495e3e3ada7c9ad841d998fa5c98bf8ff42875e1e30486b5872cb44a67"
TS="$(date -u +%Y%m%d-%H%M%S)"
STEP_DIR="$BASE/steps/${TS}_${STEP_ID}"
mkdir -p "$STEP_DIR"
chmod 700 "$STEP_DIR"
cp -a "$SELF" "$STEP_DIR/step-code.sh"

REPORT="$STEP_DIR/report.txt"
FACTS="$STEP_DIR/facts.json"
VERIFY="$STEP_DIR/verify.txt"
ROLLBACK="$STEP_DIR/rollback.sh"
MAIN_LOG="$STEP_DIR/main.log"
PROGRESS_LOG="$STEP_DIR/progress.log"
TRANSFER_VERIFY="$STEP_DIR/transfer-verify.txt"
SYSTEM_MODEL="$STEP_DIR/system-model.txt"
METHODS_LIMIT="$STEP_DIR/methods-limitations.txt"
ACCESS_ROUTES="$STEP_DIR/access-routes.txt"
PHASE_CURRENT="$STEP_DIR/phase-current.env"
PHASE_EVENTS="$STEP_DIR/phase-events.log"
SNAPSHOT_LIST_LOG="$STEP_DIR/proxmox-vm101-snapshot-list.txt"
TARGET_POSTCHECK_LOG="$STEP_DIR/vm101-authoritative-postcheck.log"
R04_CLASSIFICATION_LOG="$STEP_DIR/r04-step-report-publication-classification.txt"
R05_CLASSIFICATION_LOG="$STEP_DIR/r05-history-collision-classification.txt"
HISTORY_REPAIR_LOG="$STEP_DIR/history-collision-repair.log"
HISTORY_EVIDENCE_DIR="$STEP_DIR/history-collision-evidence"
PUBLISHED_ARTIFACT_LOG="$STEP_DIR/existing-publications-verification.txt"
PAYLOAD_BUILD_LOG="$STEP_DIR/public-safe-payload-build.log"
STEP_PUBLISH_LOG="$STEP_DIR/step-publish.log"
HTTP_LOG="$STEP_DIR/http-verify.log"
STEP_PAYLOAD="$STEP_DIR/step-report-payload"

exec > >(tee -a "$MAIN_LOG") 2>&1

# shellcheck disable=SC1090
. "$WORKFLOW_LIB"
# shellcheck disable=SC1090
. "$PUBLICATION_LIB"
router_step_workflow_init "$PHASE_CURRENT" "$PHASE_EVENTS" \
 transfer_verification vm130_preflight evidence_chain r04_failure_classification \
 r05_history_collision_classification snapshot_direct_verification vm101_authoritative_postcheck exact_repo_verification \
 existing_publication_verification history_collision_repair step_report_preparation step_report_publication \
 external_http_verification final_artifact_sync

RESULT=STOP_R16_R06_NOT_STARTED
STOP_REASON=not_started
CURRENT_PHASE=initializing
R01_STEP_DIR=unknown
R02_STEP_DIR=unknown
R03_STEP_DIR=unknown
R04_STEP_DIR=unknown
R05_STEP_DIR=unknown
SNAPSHOT_NAME=unknown
SNAPSHOT_CREATED=true
SNAPSHOT_PROOF=direct_qm_listsnapshot
R01_EVIDENCE_COMPLETE=false
R02_FAILURE_CLASSIFIED=false
R03_FAILURE_CLASSIFIED=false
R04_FAILURE_CLASSIFIED=false
R05_FAILURE_CLASSIFIED=false
R06_POSTCHECK_COMPLETE=false
EXACT_REPO_VERIFIED=false
PLAN_PUBLICATION_COMPLETE=false
PROJECT_SOURCE_POST_PUBLICATION_COMPLETE=false
PROJECT_SOURCE_POST_CONTRACT_SALVAGED=false
PROJECT_SOURCE_POST_PUBLICATION_REPEATED=false
STEP_REPORT_PUBLICATION_COMPLETE=false
SUSPICIOUS_PATH_CLASSIFIED=false
PUBLIC_PATH_SANITIZATION_APPLIED=false
PUBLIC_PHASE_CURRENT_NAME=phase-current.txt
HISTORY_COLLISION_NAME=unknown
HISTORY_COLLISION_CLASSIFIED=false
HISTORY_COLLISION_STATE=unknown
HISTORY_COLLISION_LATEST_DIGEST=unknown
HISTORY_COLLISION_OLD_DIGEST=unknown
HISTORY_COLLISION_REPAIR_APPLIED=false
HISTORY_COLLISION_REPAIR_COMMITTED=false
HISTORY_COLLISION_REPAIR_ROLLED_BACK=false
HISTORY_FORENSIC_DIR=unknown
HISTORY_FORENSIC_URL=PENDING_NOT_PUBLISHED
CORE_CHANGE_COMPLETE=true
CORE_CHANGE_REPEATED=false
TARGET_INSTALLER_RERUN=false
SNAPSHOT_REPEATED=false
MACHINE_GIT_COMPLETE=true
MACHINE_GIT_REPEATED=false
EXACT_CLONE_REPEATED=false
SOURCE_PUBLICATION_REPEATED=false
MODEL_PUBLICATION_REPEATED=false
METHODS_PUBLICATION_REPEATED=false
PLAN_PUBLICATION_REPEATED=false
ROUTER_MACHINE_CLOSE_RERUN=false
VM101_RUNTIME_CHANGE=false
RUNTIME_IMPACT=false
TRAFFIC_INTERRUPTION=none
COPY_VERIFY=false
HTTP_VERIFY_PASS=false
STEP_SHA256="$EXPECTED_INSTALLER_SHA256"
VM101_GIT_COMMIT=unknown
VM101_GIT_TREE=unknown
VM101_GIT_FILE_COUNT=unknown
PROJECT_SOURCE_POST_ACTUAL_KIND=unknown
PROJECT_SOURCE_POST_SHA256=unknown
STEP_REPORT_URL=PENDING_NOT_PUBLISHED
PROJECT_SOURCE_POST_URL=PENDING_NOT_PUBLISHED
PROJECT_SOURCE_POST_FILE_URL=PENDING_NOT_PUBLISHED
LOCAL_M07_PLAN_URL="https://reports.secret-studio.ru/latest/20260717-103401_local_architecture_plan_vm101_autonomous_hmn_recovery_r16/"
GLOBAL_PROJECT_PLAN_URL="https://reports.secret-studio.ru/latest/20260711-123348_global_project_plan_wg_paid/"
ACCESS_MAP_URL="https://reports.secret-studio.ru/latest/20260715-210236_access_map_canonical_current/"
VM100_PUBLIC_URL="https://reports.secret-studio.ru/latest/20260715-190653_vm100_git_source_1958200ccc1b/"
VM101_PUBLIC_URL="https://reports.secret-studio.ru/latest/20260717-103352_vm101_git_source_d01016420799/"
VM121_PUBLIC_URL="https://reports.secret-studio.ru/latest/20260713-182700_vm121_git_source_93e0e5a31f09/"
VM101_MODEL_URL="https://reports.secret-studio.ru/latest/20260717-103359_vm101_model_transactional_generation_activation_r16/"
VM101_METHODS_URL="https://reports.secret-studio.ru/latest/20260717-103359_vm101_methods_transactional_generation_activation_r16/"
VM130_SOURCE_URL="https://reports.secret-studio.ru/latest/20260717-035339_vm130_router_ops_source_snapshot_r15d_workflow_hardening_r01/"
LATEST_ROOT_URL="https://reports.secret-studio.ru/latest/"
OLD_ROOT_URL="https://reports.secret-studio.ru/old/"
FACTS_URL=PENDING_NOT_PUBLISHED
VERIFY_URL=PENDING_NOT_PUBLISHED
ROLLBACK_URL=PENDING_NOT_PUBLISHED
PUBLIC_OBJECT_KIND=step-report
PREVIOUS_MOVED_COUNT=unknown
COLLISION_DEDUPLICATED_COUNT=unknown
STEP_PUBLISHED_DIR=unknown
POST_PUBLISHED_DIR=unknown
PLAN_PUBLISHED_DIR=unknown

restore_history_collision_if_needed() {
    local rc="${1:-0}" latest old
    [[ "$HISTORY_COLLISION_REPAIR_APPLIED" == true ]] || return 0
    [[ "$HISTORY_COLLISION_REPAIR_COMMITTED" == false ]] || return 0
    [[ "$HISTORY_COLLISION_REPAIR_ROLLED_BACK" == false ]] || return 0
    [[ "$HISTORY_FORENSIC_DIR" != unknown && -d "$HISTORY_FORENSIC_DIR" ]] || return 0
    TOKEN="$(cat "$BASE/public/.router-public-token" 2>/dev/null || true)"
    [[ -n "$TOKEN" ]] || return 0
    old="$BASE/public/r/$TOKEN/old"
    if [[ ! -e "$old/$HISTORY_COLLISION_NAME" ]]; then
        mv "$HISTORY_FORENSIC_DIR" "$old/$HISTORY_COLLISION_NAME" || return 0
        "$REINDEX" >/dev/null 2>&1 || true
        HISTORY_COLLISION_REPAIR_ROLLED_BACK=true
        HISTORY_FORENSIC_DIR=rolled_back
        HISTORY_FORENSIC_URL=not_applicable_rolled_back
    fi
    return "$rc"
}
cleanup_exit() {
    local rc=$?
    trap - EXIT
    set +e
    restore_history_collision_if_needed 0
    exit "$rc"
}
trap cleanup_exit EXIT

phase_begin() {
    CURRENT_PHASE="$1"
    echo ">>> [$(date -u '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$PROGRESS_LOG"
    router_step_phase_begin "$1"
}
phase_complete() { router_step_phase_complete "$1"; }
value_from_log() { awk -F= -v k="$1" '$1==k{print substr($0,index($0,"=")+1)}' "$2" | tail -n1; }
find_latest_step() { find /opt/router-ops/steps -mindepth 1 -maxdepth 1 -type d -name "*_$1" -print | LC_ALL=C sort | tail -n1; }

write_docs() {
    export RESULT STOP_REASON STEP_ID CURRENT_PHASE GENERATION_ID SNAPSHOT_NAME SNAPSHOT_CREATED SNAPSHOT_PROOF \
      R01_EVIDENCE_COMPLETE R02_FAILURE_CLASSIFIED R03_FAILURE_CLASSIFIED R04_FAILURE_CLASSIFIED R05_FAILURE_CLASSIFIED R06_POSTCHECK_COMPLETE \
      EXACT_REPO_VERIFIED PLAN_PUBLICATION_COMPLETE PROJECT_SOURCE_POST_PUBLICATION_COMPLETE \
      PROJECT_SOURCE_POST_CONTRACT_SALVAGED PROJECT_SOURCE_POST_PUBLICATION_REPEATED \
      PROJECT_SOURCE_POST_ACTUAL_KIND PROJECT_SOURCE_POST_SHA256 STEP_REPORT_PUBLICATION_COMPLETE \
      SUSPICIOUS_PATH_CLASSIFIED PUBLIC_PATH_SANITIZATION_APPLIED PUBLIC_PHASE_CURRENT_NAME \
      HISTORY_COLLISION_NAME HISTORY_COLLISION_CLASSIFIED HISTORY_COLLISION_STATE \
      HISTORY_COLLISION_LATEST_DIGEST HISTORY_COLLISION_OLD_DIGEST HISTORY_COLLISION_REPAIR_APPLIED \
      HISTORY_COLLISION_REPAIR_COMMITTED HISTORY_COLLISION_REPAIR_ROLLED_BACK HISTORY_FORENSIC_DIR HISTORY_FORENSIC_URL \
      CORE_CHANGE_COMPLETE CORE_CHANGE_REPEATED TARGET_INSTALLER_RERUN SNAPSHOT_REPEATED MACHINE_GIT_COMPLETE \
      MACHINE_GIT_REPEATED EXACT_CLONE_REPEATED SOURCE_PUBLICATION_REPEATED MODEL_PUBLICATION_REPEATED \
      METHODS_PUBLICATION_REPEATED PLAN_PUBLICATION_REPEATED ROUTER_MACHINE_CLOSE_RERUN \
      VM101_GIT_COMMIT VM101_GIT_TREE VM101_GIT_FILE_COUNT STEP_REPORT_URL PROJECT_SOURCE_POST_URL \
      PROJECT_SOURCE_POST_FILE_URL LOCAL_M07_PLAN_URL GLOBAL_PROJECT_PLAN_URL ACCESS_MAP_URL VM100_PUBLIC_URL \
      VM101_PUBLIC_URL VM121_PUBLIC_URL VM101_MODEL_URL VM101_METHODS_URL VM130_SOURCE_URL LATEST_ROOT_URL \
      OLD_ROOT_URL FACTS_URL VERIFY_URL ROLLBACK_URL PUBLIC_OBJECT_KIND PREVIOUS_MOVED_COUNT \
      COLLISION_DEDUPLICATED_COUNT COPY_VERIFY STEP_SHA256 HTTP_VERIFY_PASS TRAFFIC_INTERRUPTION RUNTIME_IMPACT

    cat > "$REPORT" <<EOF_REPORT
RESULT=$RESULT
STOP_REASON=$STOP_REASON
STEP_ID=$STEP_ID
CURRENT_PHASE=$CURRENT_PHASE
GENERATION_ID=$GENERATION_ID
SNAPSHOT_NAME=$SNAPSHOT_NAME
SNAPSHOT_CREATED=$SNAPSHOT_CREATED
SNAPSHOT_PROOF=$SNAPSHOT_PROOF
R01_EVIDENCE_COMPLETE=$R01_EVIDENCE_COMPLETE
R02_FAILURE_CLASSIFIED=$R02_FAILURE_CLASSIFIED
R03_FAILURE_CLASSIFIED=$R03_FAILURE_CLASSIFIED
R04_FAILURE_CLASSIFIED=$R04_FAILURE_CLASSIFIED
R05_FAILURE_CLASSIFIED=$R05_FAILURE_CLASSIFIED
R06_POSTCHECK_COMPLETE=$R06_POSTCHECK_COMPLETE
EXACT_REPO_VERIFIED=$EXACT_REPO_VERIFIED
PLAN_PUBLICATION_COMPLETE=$PLAN_PUBLICATION_COMPLETE
PROJECT_SOURCE_POST_PUBLICATION_COMPLETE=$PROJECT_SOURCE_POST_PUBLICATION_COMPLETE
PROJECT_SOURCE_POST_CONTRACT_SALVAGED=$PROJECT_SOURCE_POST_CONTRACT_SALVAGED
PROJECT_SOURCE_POST_PUBLICATION_REPEATED=$PROJECT_SOURCE_POST_PUBLICATION_REPEATED
PROJECT_SOURCE_POST_ACTUAL_KIND=$PROJECT_SOURCE_POST_ACTUAL_KIND
PROJECT_SOURCE_POST_SHA256=$PROJECT_SOURCE_POST_SHA256
STEP_REPORT_PUBLICATION_COMPLETE=$STEP_REPORT_PUBLICATION_COMPLETE
SUSPICIOUS_PATH_CLASSIFIED=$SUSPICIOUS_PATH_CLASSIFIED
PUBLIC_PATH_SANITIZATION_APPLIED=$PUBLIC_PATH_SANITIZATION_APPLIED
PUBLIC_PHASE_CURRENT_NAME=$PUBLIC_PHASE_CURRENT_NAME
HISTORY_COLLISION_NAME=$HISTORY_COLLISION_NAME
HISTORY_COLLISION_CLASSIFIED=$HISTORY_COLLISION_CLASSIFIED
HISTORY_COLLISION_STATE=$HISTORY_COLLISION_STATE
HISTORY_COLLISION_LATEST_DIGEST=$HISTORY_COLLISION_LATEST_DIGEST
HISTORY_COLLISION_OLD_DIGEST=$HISTORY_COLLISION_OLD_DIGEST
HISTORY_COLLISION_REPAIR_APPLIED=$HISTORY_COLLISION_REPAIR_APPLIED
HISTORY_COLLISION_REPAIR_COMMITTED=$HISTORY_COLLISION_REPAIR_COMMITTED
HISTORY_COLLISION_REPAIR_ROLLED_BACK=$HISTORY_COLLISION_REPAIR_ROLLED_BACK
HISTORY_FORENSIC_DIR=$HISTORY_FORENSIC_DIR
HISTORY_FORENSIC_URL=$HISTORY_FORENSIC_URL
CORE_CHANGE_COMPLETE=$CORE_CHANGE_COMPLETE
CORE_CHANGE_REPEATED=$CORE_CHANGE_REPEATED
TARGET_INSTALLER_RERUN=$TARGET_INSTALLER_RERUN
SNAPSHOT_REPEATED=$SNAPSHOT_REPEATED
MACHINE_GIT_COMPLETE=$MACHINE_GIT_COMPLETE
MACHINE_GIT_REPEATED=$MACHINE_GIT_REPEATED
EXACT_CLONE_REPEATED=$EXACT_CLONE_REPEATED
SOURCE_PUBLICATION_REPEATED=$SOURCE_PUBLICATION_REPEATED
MODEL_PUBLICATION_REPEATED=$MODEL_PUBLICATION_REPEATED
METHODS_PUBLICATION_REPEATED=$METHODS_PUBLICATION_REPEATED
PLAN_PUBLICATION_REPEATED=$PLAN_PUBLICATION_REPEATED
ROUTER_MACHINE_CLOSE_RERUN=$ROUTER_MACHINE_CLOSE_RERUN
VM101_GIT_COMMIT=$VM101_GIT_COMMIT
VM101_GIT_TREE=$VM101_GIT_TREE
VM101_GIT_FILE_COUNT=$VM101_GIT_FILE_COUNT
STEP_REPORT_URL=$STEP_REPORT_URL
PROJECT_SOURCE_POST_URL=$PROJECT_SOURCE_POST_URL
PROJECT_SOURCE_POST_FILE_URL=$PROJECT_SOURCE_POST_FILE_URL
LOCAL_M07_PLAN_URL=$LOCAL_M07_PLAN_URL
GLOBAL_PROJECT_PLAN_URL=$GLOBAL_PROJECT_PLAN_URL
ACCESS_MAP_URL=$ACCESS_MAP_URL
VM100_PUBLIC_URL=$VM100_PUBLIC_URL
VM101_PUBLIC_URL=$VM101_PUBLIC_URL
VM121_PUBLIC_URL=$VM121_PUBLIC_URL
VM101_MODEL_URL=$VM101_MODEL_URL
VM101_METHODS_URL=$VM101_METHODS_URL
VM130_SOURCE_URL=$VM130_SOURCE_URL
LATEST_ROOT_URL=$LATEST_ROOT_URL
OLD_ROOT_URL=$OLD_ROOT_URL
FACTS_URL=$FACTS_URL
VERIFY_URL=$VERIFY_URL
ROLLBACK_URL=$ROLLBACK_URL
PUBLIC_OBJECT_KIND=$PUBLIC_OBJECT_KIND
PREVIOUS_MOVED_COUNT=$PREVIOUS_MOVED_COUNT
COLLISION_DEDUPLICATED_COUNT=$COLLISION_DEDUPLICATED_COUNT
COPY_VERIFY=$COPY_VERIFY
STEP_SHA256=$STEP_SHA256
HTTP_VERIFY_PASS=$HTTP_VERIFY_PASS
TRAFFIC_INTERRUPTION=$TRAFFIC_INTERRUPTION
RUNTIME_IMPACT=$RUNTIME_IMPACT
EOF_REPORT
    cp -a "$REPORT" "$VERIFY"
    python3 - "$FACTS" <<'PY_FACTS'
import json, os, sys
keys = '''RESULT STOP_REASON STEP_ID CURRENT_PHASE GENERATION_ID SNAPSHOT_NAME SNAPSHOT_CREATED SNAPSHOT_PROOF
R01_EVIDENCE_COMPLETE R02_FAILURE_CLASSIFIED R03_FAILURE_CLASSIFIED R04_FAILURE_CLASSIFIED R05_FAILURE_CLASSIFIED R06_POSTCHECK_COMPLETE
EXACT_REPO_VERIFIED PLAN_PUBLICATION_COMPLETE PROJECT_SOURCE_POST_PUBLICATION_COMPLETE
PROJECT_SOURCE_POST_CONTRACT_SALVAGED PROJECT_SOURCE_POST_PUBLICATION_REPEATED PROJECT_SOURCE_POST_ACTUAL_KIND
PROJECT_SOURCE_POST_SHA256 STEP_REPORT_PUBLICATION_COMPLETE SUSPICIOUS_PATH_CLASSIFIED PUBLIC_PATH_SANITIZATION_APPLIED
PUBLIC_PHASE_CURRENT_NAME HISTORY_COLLISION_NAME HISTORY_COLLISION_CLASSIFIED HISTORY_COLLISION_STATE
HISTORY_COLLISION_LATEST_DIGEST HISTORY_COLLISION_OLD_DIGEST HISTORY_COLLISION_REPAIR_APPLIED
HISTORY_COLLISION_REPAIR_COMMITTED HISTORY_COLLISION_REPAIR_ROLLED_BACK HISTORY_FORENSIC_DIR HISTORY_FORENSIC_URL
CORE_CHANGE_COMPLETE CORE_CHANGE_REPEATED TARGET_INSTALLER_RERUN SNAPSHOT_REPEATED
MACHINE_GIT_COMPLETE MACHINE_GIT_REPEATED EXACT_CLONE_REPEATED SOURCE_PUBLICATION_REPEATED MODEL_PUBLICATION_REPEATED
METHODS_PUBLICATION_REPEATED PLAN_PUBLICATION_REPEATED ROUTER_MACHINE_CLOSE_RERUN VM101_GIT_COMMIT VM101_GIT_TREE
VM101_GIT_FILE_COUNT STEP_REPORT_URL PROJECT_SOURCE_POST_URL PROJECT_SOURCE_POST_FILE_URL LOCAL_M07_PLAN_URL
GLOBAL_PROJECT_PLAN_URL ACCESS_MAP_URL VM100_PUBLIC_URL VM101_PUBLIC_URL VM121_PUBLIC_URL VM101_MODEL_URL
VM101_METHODS_URL VM130_SOURCE_URL LATEST_ROOT_URL OLD_ROOT_URL FACTS_URL VERIFY_URL ROLLBACK_URL PUBLIC_OBJECT_KIND
PREVIOUS_MOVED_COUNT COLLISION_DEDUPLICATED_COUNT COPY_VERIFY STEP_SHA256 HTTP_VERIFY_PASS TRAFFIC_INTERRUPTION
RUNTIME_IMPACT'''.split()
bools = {'true': True, 'false': False}
data = {}
for key in keys:
    value = os.environ.get(key, 'unknown')
    data[key.lower()] = bools.get(value, value)
with open(sys.argv[1], 'w', encoding='utf-8') as handle:
    json.dump(data, handle, ensure_ascii=False, indent=2, sort_keys=True)
    handle.write('\n')
PY_FACTS
    cat > "$ROLLBACK" <<EOF_ROLLBACK
#!/bin/sh
set -eu
printf '%s\n' 'R16 production core was committed successfully by R01.'
printf '%s\n' 'R06 changes no VM101 runtime. It preserves both mismatched historical R01 reports and publishes only the final R16 report.'
printf '%s\n' 'Do not roll back R16 because of report-path or publication metadata failures.'
printf '%s\n' 'For an intentional runtime rollback, use the durable R16 target rollback referenced by the R01 evidence in this report.'
EOF_ROLLBACK
    chmod 700 "$ROLLBACK"
    cat > "$SYSTEM_MODEL" <<EOF_MODEL
R16 generation $GENERATION_ID is active on VM101.
R06 is the history-collision-repair and final-report continuation. It performs no snapshot, UCI, interface, route, service, Machine Git or canonical source/model/methods/plan/post changes.
The R05 failure was caused only by an existing mismatched historical copy of the R01 step-report folder in latest and old.
EOF_MODEL
    cat > "$METHODS_LIMIT" <<EOF_METHODS
R06 continuation boundary: first incomplete phase after R05 step-report publication.
The public payload remains denylist-safe. The history repair preserves both mismatched reports: current latest is later moved by the publisher to the original old name, while the pre-existing old variant is retained under a unique forensic name.
The same safe-payload builder is used for PASS and best-effort STOP reports, preventing recurrence of SUSPICIOUS_PATH during failure publication.
A later VM130 workflow-hardening STEP should generalize project_source_post_* classification, shared safe evidence mapping, and first-class forensic handling for HISTORY_COLLISION_MISMATCH.
EOF_METHODS
    cat > "$ACCESS_ROUTES" <<EOF_ACCESS
VM130: ops@router-ops
VM101 approved route: VM130 -> ssh pve-mgts -> root@10.71.100.2 using /root/.ssh/pve_to_openwrt_mgts_ed25519
R06 uses the route read-only for authoritative post-check only.
EOF_ACCESS
}

print_final() {
    cat <<EOF_FINAL
RESULT=$RESULT
STEP_REPORT_URL=$STEP_REPORT_URL
PROJECT_SOURCE_POST_URL=$PROJECT_SOURCE_POST_URL
PROJECT_SOURCE_POST_FILE_URL=$PROJECT_SOURCE_POST_FILE_URL
LOCAL_M07_PLAN_URL=$LOCAL_M07_PLAN_URL
GLOBAL_PROJECT_PLAN_URL=$GLOBAL_PROJECT_PLAN_URL
ACCESS_MAP_URL=$ACCESS_MAP_URL
VM100_PUBLIC_URL=$VM100_PUBLIC_URL
VM101_PUBLIC_URL=$VM101_PUBLIC_URL
VM121_PUBLIC_URL=$VM121_PUBLIC_URL
VM101_MODEL_URL=$VM101_MODEL_URL
VM101_METHODS_URL=$VM101_METHODS_URL
VM130_SOURCE_URL=$VM130_SOURCE_URL
LATEST_ROOT_URL=$LATEST_ROOT_URL
OLD_ROOT_URL=$OLD_ROOT_URL
FACTS_URL=$FACTS_URL
VERIFY_URL=$VERIFY_URL
ROLLBACK_URL=$ROLLBACK_URL
PUBLIC_OBJECT_KIND=$PUBLIC_OBJECT_KIND
PREVIOUS_MOVED_COUNT=$PREVIOUS_MOVED_COUNT
COLLISION_DEDUPLICATED_COUNT=$COLLISION_DEDUPLICATED_COUNT
SNAPSHOT_NAME=$SNAPSHOT_NAME
SNAPSHOT_CREATED=$SNAPSHOT_CREATED
SNAPSHOT_PROOF=$SNAPSHOT_PROOF
SUSPICIOUS_PATH_CLASSIFIED=$SUSPICIOUS_PATH_CLASSIFIED
PUBLIC_PATH_SANITIZATION_APPLIED=$PUBLIC_PATH_SANITIZATION_APPLIED
PUBLIC_PHASE_CURRENT_NAME=$PUBLIC_PHASE_CURRENT_NAME
HISTORY_COLLISION_NAME=$HISTORY_COLLISION_NAME
HISTORY_COLLISION_CLASSIFIED=$HISTORY_COLLISION_CLASSIFIED
HISTORY_COLLISION_STATE=$HISTORY_COLLISION_STATE
HISTORY_COLLISION_REPAIR_APPLIED=$HISTORY_COLLISION_REPAIR_APPLIED
HISTORY_COLLISION_REPAIR_COMMITTED=$HISTORY_COLLISION_REPAIR_COMMITTED
HISTORY_COLLISION_REPAIR_ROLLED_BACK=$HISTORY_COLLISION_REPAIR_ROLLED_BACK
HISTORY_FORENSIC_URL=$HISTORY_FORENSIC_URL
PROJECT_SOURCE_POST_CONTRACT_SALVAGED=$PROJECT_SOURCE_POST_CONTRACT_SALVAGED
PROJECT_SOURCE_POST_PUBLICATION_REPEATED=$PROJECT_SOURCE_POST_PUBLICATION_REPEATED
CORE_CHANGE_REPEATED=$CORE_CHANGE_REPEATED
ROUTER_MACHINE_CLOSE_RERUN=$ROUTER_MACHINE_CLOSE_RERUN
COPY_VERIFY=$COPY_VERIFY
STEP_SHA256=$STEP_SHA256
HTTP_VERIFY_PASS=$HTTP_VERIFY_PASS
TRAFFIC_INTERRUPTION=$TRAFFIC_INTERRUPTION
RUNTIME_IMPACT=$RUNTIME_IMPACT
EOF_FINAL
}

publish_object() {
    local label="$1" kind="$2" log="$3"
    shift 3
    local rc
    set +e
    "$PUBLISHER" "$label" "$@" > "$log" 2>&1
    rc=$?
    set -e
    cat "$log"
    router_publication_contract_load "$log" "$kind" || return 1
    [[ "$rc" -eq 0 || "$RPC_PUBLICATION_COMMITTED" == true ]]
}

build_public_payload() {
    "$SAFE_PAYLOAD_BUILDER" "$STEP_PAYLOAD" \
      "$STEP_DIR/step-code.sh" step-code.sh \
      "$REPORT" report.txt \
      "$FACTS" facts.json \
      "$VERIFY" verify.txt \
      "$ROLLBACK" rollback.sh \
      "$MAIN_LOG" main.log \
      "$PROGRESS_LOG" progress.log \
      "$TRANSFER_VERIFY" transfer-verify.txt \
      "$SYSTEM_MODEL" system-model.txt \
      "$METHODS_LIMIT" methods-limitations.txt \
      "$ACCESS_ROUTES" access-routes.txt \
      "$PHASE_CURRENT" phase-current.txt \
      "$PHASE_EVENTS" phase-events.log \
      "$SNAPSHOT_LIST_LOG" pro-virtualization-snapshot-list.txt \
      "$TARGET_POSTCHECK_LOG" vm101-authoritative-postcheck.log \
      "$R04_CLASSIFICATION_LOG" r04-step-report-publication-classification.txt \
      "$R05_CLASSIFICATION_LOG" r05-history-collision-classification.txt \
      "$HISTORY_REPAIR_LOG" history-collision-repair.log \
      "$HISTORY_EVIDENCE_DIR/latest.manifest.sha256" history-collision-latest.manifest.sha256 \
      "$HISTORY_EVIDENCE_DIR/old.manifest.sha256" history-collision-old.manifest.sha256 \
      "$HISTORY_EVIDENCE_DIR/manifest.diff" history-collision-manifest.diff \
      "$PUBLISHED_ARTIFACT_LOG" existing-publications-verification.txt \
      "$R01_STEP_DIR/target-apply.log" r01-target-apply.log \
      "$R01_STEP_DIR/target-postcheck.log" r01-target-postcheck.log \
      "$R01_STEP_DIR/router-machine-close.log" r01-router-machine-close.log \
      "$R01_STEP_DIR/plan-publish.log" r01-plan-publish.log \
      "$R02_STEP_DIR/report.txt" r02-report.txt \
      "$R03_STEP_DIR/report.txt" r03-report.txt \
      "$R03_STEP_DIR/post-publish.log" r03-post-publish.log \
      "$R04_STEP_DIR/report.txt" r04-report.txt \
      "$R04_STEP_DIR/step-publish.log" r04-step-publish.log \
      "$R04_STEP_DIR/project-source-post-salvage.txt" r04-project-source-post-salvage.txt \
      "$R05_STEP_DIR/report.txt" r05-report.txt \
      "$R05_STEP_DIR/step-publish.log" r05-step-publish.log \
      "$R03_STEP_DIR/project-source-post/WG_PAID_MGTS_VM101_TRANSACTIONAL_GENERATION_ACTIVATION_R16.md" project-source-post-r16.md \
      > "$PAYLOAD_BUILD_LOG"
    cat "$PAYLOAD_BUILD_LOG"
    grep -qx RESULT=PASS_PUBLIC_SAFE_PAYLOAD_BUILD "$PAYLOAD_BUILD_LOG"
    [[ -f "$STEP_PAYLOAD/phase-current.txt" && ! -e "$STEP_PAYLOAD/phase-current.env" ]]
    PUBLIC_PATH_SANITIZATION_APPLIED=true
}

publish_stop_report_best_effort() {
    [[ -x "$PUBLISHER" ]] || return 1
    write_docs
    build_public_payload || return 1
    local log="$STEP_DIR/stop-publish.log" rc
    set +e
    "$PUBLISHER" step050m07r16_r06_history_collision_repair_stop "$STEP_PAYLOAD"/* > "$log" 2>&1
    rc=$?
    set -e
    router_publication_contract_load "$log" step-report || return 1
    [[ "$rc" -eq 0 || "$RPC_PUBLICATION_COMMITTED" == true ]] || return 1
    STEP_PUBLISHED_DIR="$RPC_PUBLISHED_DIR"
    STEP_REPORT_URL="$RPC_PUBLIC_URL"
    PUBLIC_OBJECT_KIND="$RPC_PUBLIC_OBJECT_KIND"
    PREVIOUS_MOVED_COUNT="$RPC_PREVIOUS_MOVED_COUNT"
    COLLISION_DEDUPLICATED_COUNT="$RPC_COLLISION_DEDUPLICATED_COUNT"
    FACTS_URL="${STEP_REPORT_URL}facts.json"
    VERIFY_URL="${STEP_REPORT_URL}verify.txt"
    ROLLBACK_URL="${STEP_REPORT_URL}rollback.sh"
    STEP_REPORT_PUBLICATION_COMPLETE=true
    HISTORY_COLLISION_REPAIR_COMMITTED=true
    write_docs
    for file in "$REPORT" "$FACTS" "$VERIFY" "$ROLLBACK"; do
        cp -a "$file" "$STEP_PUBLISHED_DIR/$(basename "$file").tmp.$$"
        mv -f "$STEP_PUBLISHED_DIR/$(basename "$file").tmp.$$" "$STEP_PUBLISHED_DIR/$(basename "$file")"
    done
    "$REINDEX" >/dev/null 2>&1 || true
}

stop_step() {
    RESULT="$1"
    STOP_REASON="${2:-unspecified}"
    router_step_phase_fail "$CURRENT_PHASE" "$STOP_REASON" || true
    write_docs
    trap - ERR
    set +e
    publish_stop_report_best_effort || true
    restore_history_collision_if_needed 0 || true
    set -e
    write_docs
    print_final
    exit 1
}
on_err() {
    local rc=$? line=$1
    router_step_workflow_is_complete && return 0
    stop_step STOP_R16_R06_UNEXPECTED_ERROR "phase=$CURRENT_PHASE line=$line rc=$rc"
}
trap 'on_err $LINENO' ERR

phase_begin transfer_verification
ACTUAL_BUNDLE_SHA="$(sha256sum "$BUNDLE_ZIP" | awk '{print $1}')"
ACTUAL_INSTALLER_SHA="$(sha256sum "$SELF" | awk '{print $1}')"
[[ "$ACTUAL_BUNDLE_SHA" == "$EXPECTED_BUNDLE_SHA256" && "$ACTUAL_INSTALLER_SHA" == "$EXPECTED_INSTALLER_SHA256" ]] || stop_step STOP_COPY_OR_TRANSFER_ERROR sha
(cd "$BUNDLE_DIR" && sha256sum -c manifest.sha256 >/dev/null) || stop_step STOP_COPY_OR_TRANSFER_ERROR manifest
cat > "$TRANSFER_VERIFY" <<EOF_TRANSFER
EXPECTED_BUNDLE_SHA256=$EXPECTED_BUNDLE_SHA256
ACTUAL_BUNDLE_SHA256=$ACTUAL_BUNDLE_SHA
EXPECTED_INSTALLER_SHA256=$EXPECTED_INSTALLER_SHA256
ACTUAL_INSTALLER_SHA256=$ACTUAL_INSTALLER_SHA
COPY_VERIFY=PASS
STEP_SHA256=$ACTUAL_INSTALLER_SHA
EOF_TRANSFER
COPY_VERIFY=PASS
phase_complete transfer_verification

phase_begin vm130_preflight
[[ "$(hostname)" == router-ops ]] || stop_step STOP_R16_R06_VM130_HOSTNAME
for command_name in bash sh ssh sha256sum python3 git curl find awk sed grep cmp readlink timeout; do
    command -v "$command_name" >/dev/null || stop_step STOP_R16_R06_COMMAND_MISSING "$command_name"
done
[[ "$(sha256sum "$PUBLISHER" | awk '{print $1}')" == "$PUBLISHER_SHA" ]] || stop_step STOP_R16_R06_PUBLISHER_SHA
[[ "$(sha256sum "$HTTP_VERIFY" | awk '{print $1}')" == "$HTTP_VERIFY_SHA" ]] || stop_step STOP_R16_R06_HTTP_VERIFY_SHA
[[ "$(sha256sum "$WORKFLOW_LIB" | awk '{print $1}')" == "$WORKFLOW_SHA" ]] || stop_step STOP_R16_R06_WORKFLOW_SHA
[[ "$(sha256sum "$PUBLICATION_LIB" | awk '{print $1}')" == "$PUBLICATION_LIB_SHA" ]] || stop_step STOP_R16_R06_PUBLICATION_LIB_SHA
[[ -x "$SAFE_PAYLOAD_BUILDER" ]] || stop_step STOP_R16_R06_SAFE_PAYLOAD_BUILDER
[[ -x "$HISTORY_REPAIR_HELPER" ]] || stop_step STOP_R16_R06_HISTORY_REPAIR_HELPER
R01_STEP_DIR="$(find_latest_step "$R01_STEP_ID")"
R02_STEP_DIR="$(find_latest_step "$R02_STEP_ID")"
R03_STEP_DIR="$(find_latest_step "$R03_STEP_ID")"
R04_STEP_DIR="$(find_latest_step "$R04_STEP_ID")"
R05_STEP_DIR="$(find_latest_step "$R05_STEP_ID")"
[[ -d "$R01_STEP_DIR" && -d "$R02_STEP_DIR" && -d "$R03_STEP_DIR" && -d "$R04_STEP_DIR" && -d "$R05_STEP_DIR" ]] || stop_step STOP_R16_R06_PREVIOUS_STEP_DIR_MISSING
[[ "$(sha256sum "$R01_STEP_DIR/step-code.sh" | awk '{print $1}')" == "$R01_INSTALLER_SHA" ]] || stop_step STOP_R16_R06_R01_INSTALLER_SHA
[[ "$(sha256sum "$R02_STEP_DIR/step-code.sh" | awk '{print $1}')" == "$R02_INSTALLER_SHA" ]] || stop_step STOP_R16_R06_R02_INSTALLER_SHA
[[ "$(sha256sum "$R03_STEP_DIR/step-code.sh" | awk '{print $1}')" == "$R03_INSTALLER_SHA" ]] || stop_step STOP_R16_R06_R03_INSTALLER_SHA
[[ "$(sha256sum "$R04_STEP_DIR/step-code.sh" | awk '{print $1}')" == "$R04_INSTALLER_SHA" ]] || stop_step STOP_R16_R06_R04_INSTALLER_SHA
[[ "$(sha256sum "$R05_STEP_DIR/step-code.sh" | awk '{print $1}')" == "$R05_INSTALLER_SHA" ]] || stop_step STOP_R16_R06_R05_INSTALLER_SHA
phase_complete vm130_preflight

phase_begin evidence_chain
for file in target-apply.log target-postcheck.log router-machine-close.log model-publish.log methods-publish.log plan-publish.log facts.json verify.txt; do
    [[ -s "$R01_STEP_DIR/$file" ]] || stop_step STOP_R16_R06_R01_EVIDENCE_MISSING "$file"
done
grep -qx RESULT=PASS_R16_TARGET_CORE "$R01_STEP_DIR/target-apply.log" || stop_step STOP_R16_R06_R01_CORE_MARKER
grep -qx RESULT=PASS_R16_TARGET_POSTCHECK "$R01_STEP_DIR/target-postcheck.log" || stop_step STOP_R16_R06_R01_POSTCHECK_MARKER
grep -qx RESULT=PASS_ROUTER_MACHINE_CLOSE "$R01_STEP_DIR/router-machine-close.log" || stop_step STOP_R16_R06_R01_MACHINE_CLOSE_MARKER
VM101_GIT_COMMIT="$(value_from_log COMMIT "$R01_STEP_DIR/router-machine-close.log")"
[[ -n "$VM101_GIT_COMMIT" ]] || VM101_GIT_COMMIT="$(value_from_log GIT_COMMIT "$R01_STEP_DIR/router-machine-close.log")"
VM101_GIT_TREE="$(value_from_log TREE "$R01_STEP_DIR/router-machine-close.log")"
[[ -n "$VM101_GIT_TREE" ]] || VM101_GIT_TREE="$(value_from_log GIT_TREE "$R01_STEP_DIR/router-machine-close.log")"
VM101_GIT_FILE_COUNT="$(value_from_log GIT_FILE_COUNT "$R01_STEP_DIR/router-machine-close.log")"
[[ "$VM101_GIT_COMMIT" =~ ^[0-9a-f]{40}$ && "$VM101_GIT_TREE" =~ ^[0-9a-f]{40}$ && "$VM101_GIT_FILE_COUNT" =~ ^[0-9]+$ ]] || stop_step STOP_R16_R06_R01_GIT_FIELDS
SNAPSHOT_NAME="$(value_from_log SNAPSHOT_NAME "$R01_STEP_DIR/verify.txt")"
[[ -n "$SNAPSHOT_NAME" && "${#SNAPSHOT_NAME}" -le 40 ]] || stop_step STOP_R16_R06_SNAPSHOT_NAME
R01_EVIDENCE_COMPLETE=true

[[ "$(value_from_log RESULT "$R02_STEP_DIR/report.txt")" == STOP_R16_R02_SNAPSHOT_NOT_PROVEN ]] || stop_step STOP_R16_R06_R02_RESULT
[[ "$(value_from_log CORE_CHANGE_REPEATED "$R02_STEP_DIR/report.txt")" == false ]] || stop_step STOP_R16_R06_R02_CORE_REPEAT
R02_FAILURE_CLASSIFIED=true

[[ "$(value_from_log RESULT "$R03_STEP_DIR/report.txt")" == STOP_R16_R03_PROJECT_SOURCE_POST_PUBLICATION ]] || stop_step STOP_R16_R06_R03_RESULT
[[ "$(value_from_log PLAN_PUBLICATION_SALVAGED "$R03_STEP_DIR/report.txt")" == true ]] || stop_step STOP_R16_R06_R03_PLAN_NOT_SALVAGED
[[ "$(value_from_log PLAN_PUBLICATION_REPEATED "$R03_STEP_DIR/report.txt")" == false ]] || stop_step STOP_R16_R06_R03_PLAN_REPEATED
R03_FAILURE_CLASSIFIED=true
phase_complete evidence_chain

phase_begin r04_failure_classification
[[ "$(value_from_log RESULT "$R04_STEP_DIR/report.txt")" == STOP_R16_R04_STEP_REPORT_PUBLICATION ]] || stop_step STOP_R16_R06_R04_RESULT
[[ "$(value_from_log PROJECT_SOURCE_POST_CONTRACT_SALVAGED "$R04_STEP_DIR/report.txt")" == true ]] || stop_step STOP_R16_R06_R04_POST_NOT_SALVAGED
[[ "$(value_from_log PROJECT_SOURCE_POST_PUBLICATION_REPEATED "$R04_STEP_DIR/report.txt")" == false ]] || stop_step STOP_R16_R06_R04_POST_REPEATED
[[ "$(value_from_log CORE_CHANGE_REPEATED "$R04_STEP_DIR/report.txt")" == false ]] || stop_step STOP_R16_R06_R04_CORE_REPEAT
[[ -s "$R04_STEP_DIR/step-publish.log" ]] || stop_step STOP_R16_R06_R04_STEP_PUBLISH_LOG
grep -qx RESULT=STOP_ROUTER_PUBLISH_REPORT "$R04_STEP_DIR/step-publish.log" || stop_step STOP_R16_R06_R04_PUBLISHER_RESULT
grep -qx STOP_CODE=SUSPICIOUS_PATH "$R04_STEP_DIR/step-publish.log" || stop_step STOP_R16_R06_R04_STOP_CODE
grep -F 'phase-current.env' "$R04_STEP_DIR/step-publish.log" >/dev/null || stop_step STOP_R16_R06_R04_SUSPICIOUS_PATH
PROJECT_SOURCE_POST_URL="$(value_from_log PROJECT_SOURCE_POST_URL "$R04_STEP_DIR/report.txt")"
PROJECT_SOURCE_POST_FILE_URL="$(value_from_log PROJECT_SOURCE_POST_FILE_URL "$R04_STEP_DIR/report.txt")"
PROJECT_SOURCE_POST_SHA256="$(value_from_log PROJECT_SOURCE_POST_SHA256 "$R04_STEP_DIR/report.txt")"
PROJECT_SOURCE_POST_ACTUAL_KIND="$(value_from_log PROJECT_SOURCE_POST_ACTUAL_KIND "$R04_STEP_DIR/report.txt")"
LOCAL_M07_PLAN_URL="$(value_from_log LOCAL_M07_PLAN_URL "$R04_STEP_DIR/report.txt")"
VM101_PUBLIC_URL="$(value_from_log VM101_PUBLIC_URL "$R04_STEP_DIR/report.txt")"
VM101_MODEL_URL="$(value_from_log VM101_MODEL_URL "$R04_STEP_DIR/report.txt")"
VM101_METHODS_URL="$(value_from_log VM101_METHODS_URL "$R04_STEP_DIR/report.txt")"
[[ "$PROJECT_SOURCE_POST_URL" == https://reports.secret-studio.ru/latest/*/ ]] || stop_step STOP_R16_R06_POST_URL
[[ "$PROJECT_SOURCE_POST_FILE_URL" == "$PROJECT_SOURCE_POST_URL"* ]] || stop_step STOP_R16_R06_POST_FILE_URL
[[ "$PROJECT_SOURCE_POST_SHA256" =~ ^[0-9a-f]{64}$ ]] || stop_step STOP_R16_R06_POST_SHA
[[ "$PROJECT_SOURCE_POST_ACTUAL_KIND" == "$EXPECTED_POST_KIND" ]] || stop_step STOP_R16_R06_POST_KIND
[[ "$LOCAL_M07_PLAN_URL" == https://reports.secret-studio.ru/latest/*/ ]] || stop_step STOP_R16_R06_PLAN_URL
printf '%s\n' \
  "R04_STEP_DIR=$R04_STEP_DIR" \
  RESULT=STOP_R16_R04_STEP_REPORT_PUBLICATION \
  STOP_CODE=SUSPICIOUS_PATH \
  STOP_BASENAME=phase-current.env \
  CORE_CHANGE_REPEATED=false \
  PROJECT_SOURCE_POST_PUBLICATION_REPEATED=false \
  RESULT_CLASSIFICATION=PASS > "$R04_CLASSIFICATION_LOG"
SUSPICIOUS_PATH_CLASSIFIED=true
R04_FAILURE_CLASSIFIED=true
phase_complete r04_failure_classification

phase_begin r05_history_collision_classification
[[ "$(value_from_log RESULT "$R05_STEP_DIR/report.txt")" == STOP_R16_R05_STEP_REPORT_PUBLICATION ]] || stop_step STOP_R16_R06_R05_RESULT
[[ "$(value_from_log CORE_CHANGE_REPEATED "$R05_STEP_DIR/report.txt")" == false ]] || stop_step STOP_R16_R06_R05_CORE_REPEAT
[[ "$(value_from_log PUBLIC_PATH_SANITIZATION_APPLIED "$R05_STEP_DIR/report.txt")" == true ]] || stop_step STOP_R16_R06_R05_PATH_NOT_SANITIZED
[[ -s "$R05_STEP_DIR/step-publish.log" ]] || stop_step STOP_R16_R06_R05_STEP_PUBLISH_LOG
grep -qx RESULT=STOP_ROUTER_PUBLISH_REPORT "$R05_STEP_DIR/step-publish.log" || stop_step STOP_R16_R06_R05_PUBLISHER_RESULT
grep -qx STOP_CODE=HISTORY_COLLISION_MISMATCH "$R05_STEP_DIR/step-publish.log" || stop_step STOP_R16_R06_R05_STOP_CODE
HISTORY_COLLISION_NAME="$(value_from_log STOP_REASON "$R05_STEP_DIR/step-publish.log")"
[[ "$HISTORY_COLLISION_NAME" =~ ^[0-9]{8}-[0-9]{6}_step[[:alnum:]_.-]+$ ]] || stop_step STOP_R16_R06_COLLISION_NAME "$HISTORY_COLLISION_NAME"
[[ "$HISTORY_COLLISION_NAME" != *'/'* && "$HISTORY_COLLISION_NAME" != *'..'* ]] || stop_step STOP_R16_R06_COLLISION_NAME_UNSAFE
printf '%s\n' \
  "R05_STEP_DIR=$R05_STEP_DIR" \
  RESULT=STOP_R16_R05_STEP_REPORT_PUBLICATION \
  STOP_CODE=HISTORY_COLLISION_MISMATCH \
  "HISTORY_COLLISION_NAME=$HISTORY_COLLISION_NAME" \
  CORE_CHANGE_REPEATED=false \
  RESULT_CLASSIFICATION=PASS > "$R05_CLASSIFICATION_LOG"
HISTORY_COLLISION_CLASSIFIED=true
R05_FAILURE_CLASSIFIED=true
phase_complete r05_history_collision_classification

phase_begin snapshot_direct_verification
set +e
ssh -o BatchMode=yes pve-mgts "qm listsnapshot 101" > "$SNAPSHOT_LIST_LOG" 2>&1
snapshot_rc=$?
set -e
cat "$SNAPSHOT_LIST_LOG"
[[ "$snapshot_rc" -eq 0 ]] || stop_step STOP_R16_R06_SNAPSHOT_LIST_FAILED "rc=$snapshot_rc"
grep -F -- "$SNAPSHOT_NAME" "$SNAPSHOT_LIST_LOG" >/dev/null || stop_step STOP_R16_R06_SNAPSHOT_NOT_FOUND "$SNAPSHOT_NAME"
phase_complete snapshot_direct_verification

phase_begin vm101_authoritative_postcheck
set +e
ssh -o BatchMode=yes pve-mgts "ssh -o BatchMode=yes -i /root/.ssh/pve_to_openwrt_mgts_ed25519 root@10.71.100.2 'sh -s'" \
    < "$BUNDLE_DIR/scripts/vm101/r16-authoritative-postcheck.sh" > "$TARGET_POSTCHECK_LOG" 2>&1
post_rc=$?
set -e
cat "$TARGET_POSTCHECK_LOG"
[[ "$post_rc" -eq 0 ]] || stop_step STOP_R16_R06_VM101_POSTCHECK_FAILED "rc=$post_rc"
grep -qx RESULT=PASS_R16_R03_AUTHORITATIVE_POSTCHECK "$TARGET_POSTCHECK_LOG" || stop_step STOP_R16_R06_VM101_POSTCHECK_MARKER
R06_POSTCHECK_COMPLETE=true
phase_complete vm101_authoritative_postcheck

phase_begin exact_repo_verification
REPO=/opt/router-ops/state/source-repositories/wg-paid-vm101
[[ -d "$REPO/.git" ]] || stop_step STOP_R16_R06_EXACT_REPO_MISSING
[[ "$(git -C "$REPO" rev-parse HEAD)" == "$VM101_GIT_COMMIT" ]] || stop_step STOP_R16_R06_EXACT_REPO_COMMIT
[[ "$(git -C "$REPO" rev-parse 'HEAD^{tree}')" == "$VM101_GIT_TREE" ]] || stop_step STOP_R16_R06_EXACT_REPO_TREE
[[ -z "$(git -C "$REPO" status --porcelain=v1 --untracked-files=no)" ]] || stop_step STOP_R16_R06_EXACT_REPO_DIRTY
EXACT_REPO_VERIFIED=true
phase_complete exact_repo_verification

phase_begin existing_publication_verification
router_publication_contract_load "$R01_STEP_DIR/plan-publish.log" local-m07-plan || stop_step STOP_R16_R06_PLAN_CONTRACT
PLAN_PUBLISHED_DIR="$RPC_PUBLISHED_DIR"
[[ "$RPC_PUBLIC_URL" == "$LOCAL_M07_PLAN_URL" ]] || stop_step STOP_R16_R06_PLAN_URL_MISMATCH
[[ -f "$PLAN_PUBLISHED_DIR/canonical-plan.md" && -f "$PLAN_PUBLISHED_DIR/R16_PROGRESS.md" ]] || stop_step STOP_R16_R06_PLAN_FILES
PLAN_PUBLICATION_COMPLETE=true

POST_LOG="$R03_STEP_DIR/post-publish.log"
router_publication_contract_load "$POST_LOG" "$EXPECTED_POST_KIND" || stop_step STOP_R16_R06_POST_CONTRACT
POST_PUBLISHED_DIR="$RPC_PUBLISHED_DIR"
[[ "$RPC_PUBLIC_URL" == "$PROJECT_SOURCE_POST_URL" ]] || stop_step STOP_R16_R06_POST_URL_MISMATCH
POST_SOURCE="$R03_STEP_DIR/project-source-post/WG_PAID_MGTS_VM101_TRANSACTIONAL_GENERATION_ACTIVATION_R16.md"
POST_PUBLISHED_FILE="$POST_PUBLISHED_DIR/$(basename "$POST_SOURCE")"
[[ -s "$POST_SOURCE" && -s "$POST_PUBLISHED_FILE" ]] || stop_step STOP_R16_R06_POST_FILES
[[ "$(sha256sum "$POST_SOURCE" | awk '{print $1}')" == "$PROJECT_SOURCE_POST_SHA256" ]] || stop_step STOP_R16_R06_POST_SOURCE_SHA
[[ "$(sha256sum "$POST_PUBLISHED_FILE" | awk '{print $1}')" == "$PROJECT_SOURCE_POST_SHA256" ]] || stop_step STOP_R16_R06_POST_PUBLISHED_SHA
PROJECT_SOURCE_POST_PUBLICATION_COMPLETE=true
PROJECT_SOURCE_POST_CONTRACT_SALVAGED=true
PROJECT_SOURCE_POST_PUBLICATION_REPEATED=false

printf '%s\n' \
  "LOCAL_M07_PLAN_URL=$LOCAL_M07_PLAN_URL" \
  "PLAN_PUBLISHED_DIR=$PLAN_PUBLISHED_DIR" \
  "PROJECT_SOURCE_POST_URL=$PROJECT_SOURCE_POST_URL" \
  "PROJECT_SOURCE_POST_FILE_URL=$PROJECT_SOURCE_POST_FILE_URL" \
  "PROJECT_SOURCE_POST_SHA256=$PROJECT_SOURCE_POST_SHA256" \
  "PROJECT_SOURCE_POST_ACTUAL_KIND=$PROJECT_SOURCE_POST_ACTUAL_KIND" \
  "VM101_PUBLIC_URL=$VM101_PUBLIC_URL" \
  "VM101_MODEL_URL=$VM101_MODEL_URL" \
  "VM101_METHODS_URL=$VM101_METHODS_URL" \
  RESULT=PASS_R16_R06_EXISTING_PUBLICATIONS > "$PUBLISHED_ARTIFACT_LOG"
cat "$PUBLISHED_ARTIFACT_LOG"
phase_complete existing_publication_verification

phase_begin history_collision_repair
TOKEN="$(cat "$BASE/public/.router-public-token")"
PUBLIC_ROOT="$BASE/public/r/$TOKEN"
LATEST_DIR="$PUBLIC_ROOT/latest"
OLD_DIR="$PUBLIC_ROOT/old"
mkdir -p "$HISTORY_EVIDENCE_DIR"
set +e
"$HISTORY_REPAIR_HELPER" "$LATEST_DIR" "$OLD_DIR" "$HISTORY_COLLISION_NAME" "$HISTORY_EVIDENCE_DIR" > "$HISTORY_REPAIR_LOG" 2>&1
history_rc=$?
set -e
cat "$HISTORY_REPAIR_LOG"
[[ "$history_rc" -eq 0 ]] || stop_step STOP_R16_R06_HISTORY_REPAIR_FAILED "rc=$history_rc"
grep -qx RESULT=PASS_STEP_HISTORY_COLLISION_CLASSIFIED "$HISTORY_REPAIR_LOG" || stop_step STOP_R16_R06_HISTORY_REPAIR_MARKER
HISTORY_COLLISION_STATE="$(value_from_log HISTORY_COLLISION_STATE "$HISTORY_REPAIR_LOG")"
HISTORY_COLLISION_LATEST_DIGEST="$(value_from_log LATEST_PAYLOAD_DIGEST "$HISTORY_REPAIR_LOG")"
HISTORY_COLLISION_OLD_DIGEST="$(value_from_log OLD_PAYLOAD_DIGEST "$HISTORY_REPAIR_LOG")"
HISTORY_FORENSIC_DIR="$(value_from_log FORENSIC_DIR "$HISTORY_REPAIR_LOG")"
[[ "$HISTORY_COLLISION_LATEST_DIGEST" =~ ^[0-9a-f]{64}$ && "$HISTORY_COLLISION_OLD_DIGEST" =~ ^[0-9a-f]{64}$ ]] || stop_step STOP_R16_R06_HISTORY_DIGESTS
if [[ "$HISTORY_COLLISION_STATE" == mismatch ]]; then
    [[ -d "$HISTORY_FORENSIC_DIR" && ! -e "$OLD_DIR/$HISTORY_COLLISION_NAME" ]] || stop_step STOP_R16_R06_FORENSIC_MOVE_NOT_PROVEN
    HISTORY_COLLISION_REPAIR_APPLIED=true
    HISTORY_FORENSIC_URL="https://reports.secret-studio.ru/old/$(basename "$HISTORY_FORENSIC_DIR")/"
    "$REINDEX" >/dev/null || stop_step STOP_R16_R06_REINDEX_AFTER_HISTORY_REPAIR
elif [[ "$HISTORY_COLLISION_STATE" == identical ]]; then
    HISTORY_COLLISION_REPAIR_APPLIED=false
    HISTORY_FORENSIC_DIR=not_required
    HISTORY_FORENSIC_URL=not_required
else
    stop_step STOP_R16_R06_UNKNOWN_COLLISION_STATE "$HISTORY_COLLISION_STATE"
fi
phase_complete history_collision_repair

phase_begin step_report_preparation
RESULT=PASS_R16_TRANSACTIONAL_GENERATION_ACTIVATION
STOP_REASON=none
write_docs
build_public_payload || stop_step STOP_R16_R06_PUBLIC_SAFE_PAYLOAD_BUILD
phase_complete step_report_preparation

phase_begin step_report_publication
publish_object step050m07r16_transactional_generation_activation_r06_final step-report "$STEP_PUBLISH_LOG" "$STEP_PAYLOAD"/* || stop_step STOP_R16_R06_STEP_REPORT_PUBLICATION
STEP_PUBLISHED_DIR="$RPC_PUBLISHED_DIR"
STEP_REPORT_URL="$RPC_PUBLIC_URL"
PUBLIC_OBJECT_KIND="$RPC_PUBLIC_OBJECT_KIND"
PREVIOUS_MOVED_COUNT="$RPC_PREVIOUS_MOVED_COUNT"
COLLISION_DEDUPLICATED_COUNT="$RPC_COLLISION_DEDUPLICATED_COUNT"
FACTS_URL="${STEP_REPORT_URL}facts.json"
VERIFY_URL="${STEP_REPORT_URL}verify.txt"
ROLLBACK_URL="${STEP_REPORT_URL}rollback.sh"
STEP_REPORT_PUBLICATION_COMPLETE=true
HISTORY_COLLISION_REPAIR_COMMITTED=true
write_docs
for file in "$REPORT" "$FACTS" "$VERIFY" "$ROLLBACK"; do
    cp -a "$file" "$STEP_PUBLISHED_DIR/$(basename "$file").tmp.$$"
    mv -f "$STEP_PUBLISHED_DIR/$(basename "$file").tmp.$$" "$STEP_PUBLISHED_DIR/$(basename "$file")"
done
"$REINDEX" >/dev/null
phase_complete step_report_publication

phase_begin external_http_verification
: > "$HTTP_LOG"
"$HTTP_VERIFY" --url "$PROJECT_SOURCE_POST_FILE_URL" --output "$STEP_DIR/http-project-source-post.md" --sha256 "$PROJECT_SOURCE_POST_SHA256" >> "$HTTP_LOG" 2>&1
"$HTTP_VERIFY" --url "$LOCAL_M07_PLAN_URL" --output "$STEP_DIR/http-plan-index.html" >> "$HTTP_LOG" 2>&1
"$HTTP_VERIFY" --url "$VM101_PUBLIC_URL" --output "$STEP_DIR/http-vm101-source-index.html" >> "$HTTP_LOG" 2>&1
"$HTTP_VERIFY" --url "$VM101_MODEL_URL" --output "$STEP_DIR/http-model-index.html" >> "$HTTP_LOG" 2>&1
"$HTTP_VERIFY" --url "$VM101_METHODS_URL" --output "$STEP_DIR/http-methods-index.html" >> "$HTTP_LOG" 2>&1
"$HTTP_VERIFY" --url "$STEP_REPORT_URL" --output "$STEP_DIR/http-step-index.html" >> "$HTTP_LOG" 2>&1
HTTP_VERIFY_PASS=true
phase_complete external_http_verification

phase_begin final_artifact_sync
RESULT=PASS_R16_TRANSACTIONAL_GENERATION_ACTIVATION
STOP_REASON=none
write_docs
for file in "$REPORT" "$FACTS" "$VERIFY" "$ROLLBACK"; do
    cp -a "$file" "$STEP_PUBLISHED_DIR/$(basename "$file").tmp.$$"
    mv -f "$STEP_PUBLISHED_DIR/$(basename "$file").tmp.$$" "$STEP_PUBLISHED_DIR/$(basename "$file")"
done
cp -a "$HTTP_LOG" "$STEP_PUBLISHED_DIR/http-verify.log.tmp.$$"
mv -f "$STEP_PUBLISHED_DIR/http-verify.log.tmp.$$" "$STEP_PUBLISHED_DIR/http-verify.log"
"$REINDEX" >/dev/null
for file in "$REPORT" "$FACTS" "$VERIFY" "$ROLLBACK"; do
    "$HTTP_VERIFY" --url "${STEP_REPORT_URL}$(basename "$file")" \
      --output "$STEP_DIR/final-http-$(basename "$file")" \
      --sha256 "$(sha256sum "$file" | awk '{print $1}')" >> "$HTTP_LOG" 2>&1
done
phase_complete final_artifact_sync
CURRENT_PHASE=complete
write_docs
for file in "$REPORT" "$FACTS" "$VERIFY"; do
    cp -a "$file" "$STEP_PUBLISHED_DIR/$(basename "$file").tmp.$$"
    mv -f "$STEP_PUBLISHED_DIR/$(basename "$file").tmp.$$" "$STEP_PUBLISHED_DIR/$(basename "$file")"
done
"$REINDEX" >/dev/null
print_final
