=== STEP_037A5 CREATE CS2 SCHEMA DERIVED === timestamp=20260708-134255 mode=guarded create second WGPay peer with OpenAPI/DB-derived payload target=second canary for cs2 -> 0x204 -> vpn4 proof forbidden: selector changes, mapper changes, policy switch, backend restart, network/firewall reload === VM121 guarded schema-derived create === remote_backup_dir=/root/router-ops-backups/canary-test-subscription-cs2-schemaderived-20260708-134255 private_create_json=/root/router-ops-backups/canary-test-subscription-cs2-schemaderived-20260708-134255/create-full.private.json === backend health === {"status":"ok","service":"wg-access-backend","environment":"dev"} {"status":"ok","db":1} === before counts / duplicate guard === peers_before_curl_rc=0 jobs_before_curl_rc=0 peer_count_before=21 enabled_peer_count_before=1 job_count_before=37 pending_job_count_before=0 existing_canary_enabled_count=1 create_guard_safe=1 create_guard_safe_final=1 === read OpenAPI schema === openapi_curl_rc=0 openapi_post_found=True openapi_request_model=SubscriptionCreateRequest openapi_required_fields= openapi_property_fields=auto_renew,email,months,node_id,plan_code openapi_prop_auto_renew_type=boolean openapi_prop_auto_renew_default=False openapi_prop_email_type= openapi_prop_email_anyof=string,null openapi_prop_months_type=integer openapi_prop_months_default=1 openapi_prop_node_id_type=string openapi_prop_node_id_default=ddn-test openapi_prop_plan_code_type=string openapi_prop_plan_code_default=manual === DB-derived plan/code hints, read-only === postgres_container=wgaccess-postgres --- tables --- alembic_version invite_codes orders peers provisioning_jobs subscriptions users --- plan-like columns --- invite_codes.code orders.months orders.plan_code subscriptions.plan_code --- distinct subscription plan_code --- step027d-smoke manual_test cancel_test canary-test mgts-smoke expire_test --- plans code --- --- tariff/plans generic --- plan_code_hint=invite_codes === build schema-derived request === derived_request_keys=auto_renew,email,months,node_id,plan_code derived_request_email=wgpay-cs2-canary-20260708-134255@example.com derived_request_months=1 derived_request_node_id=ddn-test derived_request_plan_code=manual derived_request_auto_renew=False derived_required_fields= derived_plan_candidates=manual,invite_codes,orders,provisioning_jobs,step027d-smoke derived_has_all_required=True derive_request_rc=0 { "email": "wgpay-cs2-canary-20260708-134255@example.com", "months": 1, "node_id": "ddn-test", "plan_code": "manual", "auto_renew": false } derived_has_all_required_final=1 === create second canary subscription, private response saved only === create_curl_rc=0 create_http_code=200 cs2_subscription_id=e0dc09ca-5ef2-49d3-b8bc-2bb07a26717e cs2_peer_id=cb533a1a-7070-416d-9272-846327545060 cs2_job_id=03c6086d-1054-4a5b-983a-3b8273114fe2 cs2_tunnel_ip=10.253.1.11 cs2_client_endpoint=wg-studio.secret-studio.ru:51830 cs2_parse_ok=1 cs2_parse_reasons= cs2_parse_script_rc=0 === rollback script for cs2 test peer === rollback_vm121=/root/rollback-step037a5-cs2-test-peer.sh === apply pending job with agent === agent_start_rc=0 === after counts/state === peers_after_curl_rc=0 jobs_after_curl_rc=0 peer_count_after=22 enabled_peer_count_after=2 job_count_after=38 pending_job_count_after=0 enabled_peer_count_delta=1 new_enabled_peer_count=1 cs2_peer_found=True cs2_peer_id_actual=cb533a1a-7070-416d-9272-846327545060 cs2_peer_enabled=True cs2_peer_tunnel_ip=10.253.1.11 cs2_tunnel_ip_matches=True cs2_job_found=True cs2_job_status=completed cs2_job_attempts=1 === backend endpoint final === WG_CLIENT_ENDPOINT=wg-studio.secret-studio.ru:51830 === safety === private_response_not_published=1 no_selector_change=1 no_backend_restart=1 no_peer_disable=1 vm121_create_done=1 === VM100 read-only verify cs2 peer applied, selector unchanged === vm100_wg_paid_peer_count=2 vm100_existing_canary_visible_rc=0 vm100_cs2_peer_visible_rc=0 vm100_selector_active_entry_count=1 vm100_selector_has_cs2_ip_rc=1 vm100_selector_rule_visible_rc=0 no_remote_write_vm100=1 no_selector_change_vm100=1 no_wg_reload_vm100=1 no_network_reload_vm100=1 no_firewall_reload_vm100=1 vm100_readonly_verify_done=1 === STEP_037A5 RESULT === create_guard_safe_final=1 openapi_post_found=True derive_request_rc=0 derived_has_all_required_final=1 derived_request_keys=auto_renew,email,months,node_id,plan_code derived_request_email=wgpay-cs2-canary-20260708-134255@example.com derived_request_plan_code=manual create_curl_rc=0 create_http_code=200 cs2_parse_ok=1 cs2_parse_script_rc=0 cs2_parse_reasons= cs2_subscription_id=e0dc09ca-5ef2-49d3-b8bc-2bb07a26717e cs2_peer_id=cb533a1a-7070-416d-9272-846327545060 cs2_tunnel_ip=10.253.1.11 agent_start_rc=0 peer_count_after=22 enabled_peer_count_after=2 enabled_peer_count_delta=1 new_enabled_peer_count=1 pending_job_count_after=0 cs2_peer_found=True cs2_peer_enabled=True cs2_tunnel_ip_matches=True cs2_job_found=True cs2_job_status=completed endpoint_final_lines=1 vm100_wg_paid_peer_count=2 vm100_existing_canary_visible_rc=0 vm100_cs2_peer_visible_rc=0 vm100_selector_active_entry_count=1 vm100_selector_has_cs2_ip_rc=1 vm100_selector_rule_visible_rc=0 rollback_vm121=/root/rollback-step037a5-cs2-test-peer.sh decision=PASS_CS2_TEST_PEER_CREATED_AND_APPLIED