>>> [2026-07-15 15:58:00] verifying exact live source >>> [2026-07-15 15:58:00] building candidate from exact live source >>> [2026-07-15 15:58:00] checking candidate syntax and exact diff >>> [2026-07-15 15:58:00] preparing isolated publication sandbox >>> [2026-07-15 15:58:00] running first isolated publication >>> [2026-07-15 15:58:00] running second isolated publication and rotation test >>> [2026-07-15 15:58:01] confirming live source remained unchanged RESULT=PASS_ROUTER_PUBLISH_REPORT_CANDIDATE_BUILT_AND_SANDBOX_TESTED STEP_ID=PRECHECK_VM130_ROUTER_PUBLISH_REPORT_CANDIDATE_R04F SOURCE_BASIS=exact_live_R04E_copy EXPECTED_LIVE_SHA256=83582dd85e88032d3aecf8c285cd2ec758a2006ea285fa69c17fa35554a64ea4 LIVE_SHA256_BEFORE=83582dd85e88032d3aecf8c285cd2ec758a2006ea285fa69c17fa35554a64ea4 LIVE_SHA256_AFTER=83582dd85e88032d3aecf8c285cd2ec758a2006ea285fa69c17fa35554a64ea4 LIVE_SOURCE_UNCHANGED=true CANDIDATE=/opt/router-ops/steps/20260715-155800_PRECHECK_VM130_ROUTER_PUBLISH_REPORT_CANDIDATE_R04F/router-publish-report.candidate CANDIDATE_SHA256=e78430b57afbd0ae27fc575fc4de78bb267c76caf04ec935b01e9b2f89840e32 DIFF_FILE=/opt/router-ops/steps/20260715-155800_PRECHECK_VM130_ROUTER_PUBLISH_REPORT_CANDIDATE_R04F/router-publish-report.candidate.diff DIFF_SHA256=8f92ebfaaac5e247d499c45795bb4061b31cfa2992ed13005e449c6da6d8e792 CANDIDATE_SYNTAX_CHECK=PASS SANDBOX_FIRST_PUBLIC_URL=https://reports.secret-studio.ru/latest/20260715-155800_step_candidate_public_url_one/ SANDBOX_SECOND_PUBLIC_URL=https://reports.secret-studio.ru/latest/20260715-155801_step_candidate_public_url_two/ SANDBOX_LATEST_COUNT=1 SANDBOX_OLD_COUNT=1 SANDBOX_ROTATION=PASS ACCESS_MAP_ROTATION_FIX_PRESERVED=true LEGACY_TRYCLOUDFLARE_OUTPUT_PRESERVED=true PERMANENT_CANONICAL_OUTPUT_ADDED=true LIVE_INSTALL_PERFORMED=false PUBLIC_TREE_CHANGE=false CADDY_CHANGE=false SERVICE_CHANGE=false RUNTIME_IMPACT=false TRAFFIC_INTERRUPTION=none ROLLBACK_REQUIRED=false VERIFY=/opt/router-ops/steps/20260715-155800_PRECHECK_VM130_ROUTER_PUBLISH_REPORT_CANDIDATE_R04F/verify.txt FACTS=/opt/router-ops/steps/20260715-155800_PRECHECK_VM130_ROUTER_PUBLISH_REPORT_CANDIDATE_R04F/facts.json ROLLBACK=/opt/router-ops/steps/20260715-155800_PRECHECK_VM130_ROUTER_PUBLISH_REPORT_CANDIDATE_R04F/rollback.txt === CANDIDATE DIFF BEGIN === --- live/router-publish-report +++ candidate/router-publish-report @@ -4,6 +4,8 @@ BASE="${ROUTER_OPS_BASE:-/opt/router-ops}" PUBLIC="$BASE/public" +PUBLIC_BASE="${ROUTER_PUBLIC_BASE_URL:-https://reports.secret-studio.ru}" +PUBLIC_BASE="${PUBLIC_BASE%/}" TOKEN_FILE="${ROUTER_PUBLIC_TOKEN_FILE:-$PUBLIC/.router-public-token}" TOKEN="${ROUTER_PUBLIC_TOKEN:-}" @@ -179,6 +181,43 @@ printf 'PUBLIC_OBJECT_KIND=%s\n' "$KIND" printf 'PREVIOUS_MOVED_COUNT=%s\n' "$PREVIOUS_MOVED_COUNT" printf 'LOCAL_INDEX=http://192.168.30.84:8099/r/%s/latest/%s/\n' "$TOKEN" "$FOLDER" +printf 'LATEST_ROOT_URL=%s/latest/\n' "$PUBLIC_BASE" +printf 'OLD_ROOT_URL=%s/old/\n' "$PUBLIC_BASE" +printf 'PUBLIC_INDEX=%s/latest/\n' "$PUBLIC_BASE" +printf 'PUBLIC_URL=%s/latest/%s/\n' "$PUBLIC_BASE" "$FOLDER" + +case "$KIND" in + step-report) + printf 'STEP_REPORT_URL=%s/latest/%s/\n' "$PUBLIC_BASE" "$FOLDER" + ;; + local-m07-plan) + printf 'LOCAL_M07_PLAN_URL=%s/latest/%s/\n' "$PUBLIC_BASE" "$FOLDER" + ;; + global-project-plan) + printf 'GLOBAL_PROJECT_PLAN_URL=%s/latest/%s/\n' "$PUBLIC_BASE" "$FOLDER" + ;; + access-map) + printf 'ACCESS_MAP_URL=%s/latest/%s/\n' "$PUBLIC_BASE" "$FOLDER" + ;; + vm100) + printf 'VM100_PUBLIC_URL=%s/latest/%s/\n' "$PUBLIC_BASE" "$FOLDER" + ;; + vm101) + printf 'VM101_PUBLIC_URL=%s/latest/%s/\n' "$PUBLIC_BASE" "$FOLDER" + ;; + vm121) + printf 'VM121_PUBLIC_URL=%s/latest/%s/\n' "$PUBLIC_BASE" "$FOLDER" + ;; + vm101-model) + printf 'VM101_MODEL_URL=%s/latest/%s/\n' "$PUBLIC_BASE" "$FOLDER" + ;; + vm101-methods) + printf 'VM101_METHODS_URL=%s/latest/%s/\n' "$PUBLIC_BASE" "$FOLDER" + ;; + vm130-source) + printf 'VM130_SOURCE_URL=%s/latest/%s/\n' "$PUBLIC_BASE" "$FOLDER" + ;; +esac if [ -n "$TRYCF_BASE" ]; then TRYCF_BASE="${TRYCF_BASE%/}" === CANDIDATE DIFF END ===