1522 lines
56 KiB
JSON
1522 lines
56 KiB
JSON
{
|
||
"blocked_actions": [
|
||
"change_public_route",
|
||
"change_admin_route",
|
||
"change_api_route",
|
||
"change_cors_origin",
|
||
"modify_next_public_env",
|
||
"expose_internal_ip",
|
||
"expose_repo_slug",
|
||
"expose_owner_namespace",
|
||
"expose_secret_value",
|
||
"bypass_auth",
|
||
"change_callback_url",
|
||
"change_webhook_secret",
|
||
"modify_middleware_auth",
|
||
"disable_csrf",
|
||
"disable_rate_limit",
|
||
"change_cookie_policy",
|
||
"change_security_headers",
|
||
"publish_internal_transcript",
|
||
"publish_internal_status_code",
|
||
"deploy_frontend",
|
||
"deploy_api",
|
||
"rewrite_nginx_route",
|
||
"change_public_url",
|
||
"change_openapi_contract",
|
||
"mutate_database",
|
||
"run_migration",
|
||
"send_webhook",
|
||
"active_scan",
|
||
"enable_action_button",
|
||
"production_deploy",
|
||
"force_push",
|
||
"switch_github_primary"
|
||
],
|
||
"change_evidence_candidates": [
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"admin_auth_boundary_accepted": false,
|
||
"admin_auth_boundary_ref": null,
|
||
"admin_route_change_authorized": false,
|
||
"affected_route_refs": [],
|
||
"affected_scope": "公開產品頁、IwoooS / AwoooP / Tenants / Code Review 前台文案、raw identity 與內部協作文字防外洩",
|
||
"api_contract_change_authorized": false,
|
||
"api_contract_readback_accepted": false,
|
||
"api_contract_readback_ref": null,
|
||
"api_health_readback_ref": null,
|
||
"api_route_change_authorized": false,
|
||
"blast_radius": "pending_change_evidence",
|
||
"blocked_actions": [
|
||
"change_public_route",
|
||
"change_admin_route",
|
||
"change_api_route",
|
||
"change_cors_origin",
|
||
"modify_next_public_env",
|
||
"expose_internal_ip",
|
||
"expose_repo_slug",
|
||
"expose_owner_namespace",
|
||
"expose_secret_value",
|
||
"bypass_auth",
|
||
"change_callback_url",
|
||
"change_webhook_secret",
|
||
"modify_middleware_auth",
|
||
"disable_csrf",
|
||
"disable_rate_limit",
|
||
"change_cookie_policy",
|
||
"change_security_headers",
|
||
"publish_internal_transcript",
|
||
"publish_internal_status_code",
|
||
"deploy_frontend",
|
||
"deploy_api",
|
||
"rewrite_nginx_route",
|
||
"change_public_url",
|
||
"change_openapi_contract",
|
||
"mutate_database",
|
||
"run_migration",
|
||
"send_webhook",
|
||
"active_scan",
|
||
"enable_action_button",
|
||
"production_deploy",
|
||
"force_push",
|
||
"switch_github_primary"
|
||
],
|
||
"callback_url_change_authorized": false,
|
||
"change_evidence_accepted": false,
|
||
"change_evidence_candidate_id": "public_runtime_config_change_evidence:public_product_route_and_i18n_redaction",
|
||
"change_evidence_fields": [
|
||
"change_evidence_candidate_id",
|
||
"source_refs",
|
||
"control_tier",
|
||
"proposed_runtime_config_change_ref",
|
||
"affected_route_refs",
|
||
"public_url_or_domain_ref",
|
||
"admin_auth_boundary_ref",
|
||
"api_contract_readback_ref",
|
||
"cors_origin_diff_ref",
|
||
"frontend_env_diff_ref",
|
||
"i18n_redaction_review_ref",
|
||
"webhook_callback_owner_ref",
|
||
"desktop_mobile_smoke_ref",
|
||
"api_health_readback_ref",
|
||
"sensitive_string_scan_ref",
|
||
"console_error_scan_ref",
|
||
"blast_radius",
|
||
"maintenance_window",
|
||
"rollback_owner",
|
||
"rollback_plan_ref",
|
||
"postcheck_evidence_ref",
|
||
"redacted_evidence_refs",
|
||
"reviewer_outcome",
|
||
"not_approval"
|
||
],
|
||
"change_evidence_quarantined": false,
|
||
"change_evidence_received": false,
|
||
"change_evidence_rejected": false,
|
||
"console_error_scan_ref": null,
|
||
"control_tier": "C0",
|
||
"cookie_policy_change_authorized": false,
|
||
"cors_change_authorized": false,
|
||
"cors_origin_diff_accepted": false,
|
||
"cors_origin_diff_ref": null,
|
||
"csrf_disable_authorized": false,
|
||
"database_migration_authorized": false,
|
||
"desktop_mobile_smoke_accepted": false,
|
||
"desktop_mobile_smoke_authorized": false,
|
||
"desktop_mobile_smoke_ref": null,
|
||
"force_push_authorized": false,
|
||
"frontend_env_change_authorized": false,
|
||
"frontend_env_diff_accepted": false,
|
||
"frontend_env_diff_ref": null,
|
||
"github_primary_switch_authorized": false,
|
||
"i18n_public_text_internal_identity_allowed": false,
|
||
"i18n_redaction_review_accepted": false,
|
||
"i18n_redaction_review_ref": null,
|
||
"internal_ip_exposure_allowed": false,
|
||
"internal_status_code_exposure_allowed": false,
|
||
"internal_transcript_exposure_allowed": false,
|
||
"maintenance_window": "pending_change_evidence",
|
||
"middleware_auth_change_authorized": false,
|
||
"not_approval": true,
|
||
"outcome_lanes": [
|
||
"waiting_change_evidence",
|
||
"quarantine_sensitive_payload",
|
||
"reject_unredacted_or_runtime_claim",
|
||
"request_supplement",
|
||
"ready_for_reviewer_acceptance",
|
||
"ready_for_runtime_approval_package",
|
||
"waiting_maintenance_window",
|
||
"waiting_runtime_gate"
|
||
],
|
||
"owner_namespace_exposure_allowed": false,
|
||
"partial_token_collection_allowed": false,
|
||
"postcheck_evidence_accepted": false,
|
||
"postcheck_evidence_ref": null,
|
||
"production_deploy_authorized": false,
|
||
"proposed_runtime_config_change_ref": null,
|
||
"public_route_change_authorized": false,
|
||
"public_url_or_domain_ref": null,
|
||
"rate_limit_disable_authorized": false,
|
||
"raw_payload_storage_allowed": false,
|
||
"redacted_evidence_refs": [],
|
||
"repo_namespace_exposure_allowed": false,
|
||
"required_evidence_fields": [
|
||
"proposed_runtime_config_change_ref",
|
||
"affected_route_refs",
|
||
"public_url_or_domain_ref",
|
||
"admin_auth_boundary_ref",
|
||
"api_contract_readback_ref",
|
||
"cors_origin_diff_ref",
|
||
"frontend_env_diff_ref",
|
||
"i18n_redaction_review_ref",
|
||
"webhook_callback_owner_ref",
|
||
"desktop_mobile_smoke_ref",
|
||
"api_health_readback_ref",
|
||
"sensitive_string_scan_ref",
|
||
"console_error_scan_ref",
|
||
"blast_radius",
|
||
"maintenance_window",
|
||
"rollback_owner",
|
||
"rollback_plan_ref",
|
||
"postcheck_evidence_ref",
|
||
"redacted_evidence_refs",
|
||
"reviewer_outcome",
|
||
"not_approval"
|
||
],
|
||
"requires_runtime_approval_package": true,
|
||
"reviewer_checks": [
|
||
"change_ref_present",
|
||
"affected_route_refs_present",
|
||
"public_url_not_internal_ip",
|
||
"admin_auth_boundary_called_out",
|
||
"api_contract_readback_present",
|
||
"cors_origin_diff_ref_only",
|
||
"frontend_env_diff_ref_present",
|
||
"i18n_redaction_review_present",
|
||
"webhook_callback_owner_present",
|
||
"desktop_mobile_smoke_present",
|
||
"api_health_readback_present",
|
||
"sensitive_string_scan_present",
|
||
"console_error_scan_present",
|
||
"no_secret_value_or_cookie",
|
||
"security_header_or_cookie_impact_called_out",
|
||
"blast_radius_present",
|
||
"maintenance_window_present",
|
||
"rollback_owner_present",
|
||
"postcheck_evidence_present",
|
||
"no_runtime_action_claim",
|
||
"cross_project_sync_noted"
|
||
],
|
||
"reviewer_outcome": "waiting_change_evidence",
|
||
"risk": "HIGH",
|
||
"rollback_owner": "pending_change_evidence",
|
||
"rollback_plan_ref": null,
|
||
"route_scope_accepted": false,
|
||
"route_smoke_authorized": false,
|
||
"runtime_approval_package_ready": false,
|
||
"runtime_config_change_authorized": false,
|
||
"runtime_execution_authorized": false,
|
||
"runtime_gate": false,
|
||
"secret_hash_collection_allowed": false,
|
||
"secret_value_collection_allowed": false,
|
||
"security_header_change_authorized": false,
|
||
"sensitive_string_scan_accepted": false,
|
||
"sensitive_string_scan_ref": null,
|
||
"source_ref_existing_count": 3,
|
||
"source_refs": [
|
||
"apps/web/src/app/[locale]",
|
||
"apps/web/messages/zh-TW.json",
|
||
"apps/web/messages/en.json"
|
||
],
|
||
"status": "waiting_change_evidence",
|
||
"title": "Public product route / i18n redaction boundary",
|
||
"webhook_callback_owner_accepted": false,
|
||
"webhook_callback_owner_ref": null,
|
||
"webhook_receiver_change_authorized": false,
|
||
"webhook_secret_change_authorized": false,
|
||
"write_capable": true
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"admin_auth_boundary_accepted": false,
|
||
"admin_auth_boundary_ref": null,
|
||
"admin_route_change_authorized": false,
|
||
"affected_route_refs": [],
|
||
"affected_scope": "AwoooP operator console、approvals、work-items、runs、admin auth / CSRF / owner guard",
|
||
"api_contract_change_authorized": false,
|
||
"api_contract_readback_accepted": false,
|
||
"api_contract_readback_ref": null,
|
||
"api_health_readback_ref": null,
|
||
"api_route_change_authorized": false,
|
||
"blast_radius": "pending_change_evidence",
|
||
"blocked_actions": [
|
||
"change_public_route",
|
||
"change_admin_route",
|
||
"change_api_route",
|
||
"change_cors_origin",
|
||
"modify_next_public_env",
|
||
"expose_internal_ip",
|
||
"expose_repo_slug",
|
||
"expose_owner_namespace",
|
||
"expose_secret_value",
|
||
"bypass_auth",
|
||
"change_callback_url",
|
||
"change_webhook_secret",
|
||
"modify_middleware_auth",
|
||
"disable_csrf",
|
||
"disable_rate_limit",
|
||
"change_cookie_policy",
|
||
"change_security_headers",
|
||
"publish_internal_transcript",
|
||
"publish_internal_status_code",
|
||
"deploy_frontend",
|
||
"deploy_api",
|
||
"rewrite_nginx_route",
|
||
"change_public_url",
|
||
"change_openapi_contract",
|
||
"mutate_database",
|
||
"run_migration",
|
||
"send_webhook",
|
||
"active_scan",
|
||
"enable_action_button",
|
||
"production_deploy",
|
||
"force_push",
|
||
"switch_github_primary"
|
||
],
|
||
"callback_url_change_authorized": false,
|
||
"change_evidence_accepted": false,
|
||
"change_evidence_candidate_id": "public_runtime_config_change_evidence:admin_auth_and_operator_console_boundary",
|
||
"change_evidence_fields": [
|
||
"change_evidence_candidate_id",
|
||
"source_refs",
|
||
"control_tier",
|
||
"proposed_runtime_config_change_ref",
|
||
"affected_route_refs",
|
||
"public_url_or_domain_ref",
|
||
"admin_auth_boundary_ref",
|
||
"api_contract_readback_ref",
|
||
"cors_origin_diff_ref",
|
||
"frontend_env_diff_ref",
|
||
"i18n_redaction_review_ref",
|
||
"webhook_callback_owner_ref",
|
||
"desktop_mobile_smoke_ref",
|
||
"api_health_readback_ref",
|
||
"sensitive_string_scan_ref",
|
||
"console_error_scan_ref",
|
||
"blast_radius",
|
||
"maintenance_window",
|
||
"rollback_owner",
|
||
"rollback_plan_ref",
|
||
"postcheck_evidence_ref",
|
||
"redacted_evidence_refs",
|
||
"reviewer_outcome",
|
||
"not_approval"
|
||
],
|
||
"change_evidence_quarantined": false,
|
||
"change_evidence_received": false,
|
||
"change_evidence_rejected": false,
|
||
"console_error_scan_ref": null,
|
||
"control_tier": "C0",
|
||
"cookie_policy_change_authorized": false,
|
||
"cors_change_authorized": false,
|
||
"cors_origin_diff_accepted": false,
|
||
"cors_origin_diff_ref": null,
|
||
"csrf_disable_authorized": false,
|
||
"database_migration_authorized": false,
|
||
"desktop_mobile_smoke_accepted": false,
|
||
"desktop_mobile_smoke_authorized": false,
|
||
"desktop_mobile_smoke_ref": null,
|
||
"force_push_authorized": false,
|
||
"frontend_env_change_authorized": false,
|
||
"frontend_env_diff_accepted": false,
|
||
"frontend_env_diff_ref": null,
|
||
"github_primary_switch_authorized": false,
|
||
"i18n_public_text_internal_identity_allowed": false,
|
||
"i18n_redaction_review_accepted": false,
|
||
"i18n_redaction_review_ref": null,
|
||
"internal_ip_exposure_allowed": false,
|
||
"internal_status_code_exposure_allowed": false,
|
||
"internal_transcript_exposure_allowed": false,
|
||
"maintenance_window": "pending_change_evidence",
|
||
"middleware_auth_change_authorized": false,
|
||
"not_approval": true,
|
||
"outcome_lanes": [
|
||
"waiting_change_evidence",
|
||
"quarantine_sensitive_payload",
|
||
"reject_unredacted_or_runtime_claim",
|
||
"request_supplement",
|
||
"ready_for_reviewer_acceptance",
|
||
"ready_for_runtime_approval_package",
|
||
"waiting_maintenance_window",
|
||
"waiting_runtime_gate"
|
||
],
|
||
"owner_namespace_exposure_allowed": false,
|
||
"partial_token_collection_allowed": false,
|
||
"postcheck_evidence_accepted": false,
|
||
"postcheck_evidence_ref": null,
|
||
"production_deploy_authorized": false,
|
||
"proposed_runtime_config_change_ref": null,
|
||
"public_route_change_authorized": false,
|
||
"public_url_or_domain_ref": null,
|
||
"rate_limit_disable_authorized": false,
|
||
"raw_payload_storage_allowed": false,
|
||
"redacted_evidence_refs": [],
|
||
"repo_namespace_exposure_allowed": false,
|
||
"required_evidence_fields": [
|
||
"proposed_runtime_config_change_ref",
|
||
"affected_route_refs",
|
||
"public_url_or_domain_ref",
|
||
"admin_auth_boundary_ref",
|
||
"api_contract_readback_ref",
|
||
"cors_origin_diff_ref",
|
||
"frontend_env_diff_ref",
|
||
"i18n_redaction_review_ref",
|
||
"webhook_callback_owner_ref",
|
||
"desktop_mobile_smoke_ref",
|
||
"api_health_readback_ref",
|
||
"sensitive_string_scan_ref",
|
||
"console_error_scan_ref",
|
||
"blast_radius",
|
||
"maintenance_window",
|
||
"rollback_owner",
|
||
"rollback_plan_ref",
|
||
"postcheck_evidence_ref",
|
||
"redacted_evidence_refs",
|
||
"reviewer_outcome",
|
||
"not_approval"
|
||
],
|
||
"requires_runtime_approval_package": true,
|
||
"reviewer_checks": [
|
||
"change_ref_present",
|
||
"affected_route_refs_present",
|
||
"public_url_not_internal_ip",
|
||
"admin_auth_boundary_called_out",
|
||
"api_contract_readback_present",
|
||
"cors_origin_diff_ref_only",
|
||
"frontend_env_diff_ref_present",
|
||
"i18n_redaction_review_present",
|
||
"webhook_callback_owner_present",
|
||
"desktop_mobile_smoke_present",
|
||
"api_health_readback_present",
|
||
"sensitive_string_scan_present",
|
||
"console_error_scan_present",
|
||
"no_secret_value_or_cookie",
|
||
"security_header_or_cookie_impact_called_out",
|
||
"blast_radius_present",
|
||
"maintenance_window_present",
|
||
"rollback_owner_present",
|
||
"postcheck_evidence_present",
|
||
"no_runtime_action_claim",
|
||
"cross_project_sync_noted"
|
||
],
|
||
"reviewer_outcome": "waiting_change_evidence",
|
||
"risk": "HIGH",
|
||
"rollback_owner": "pending_change_evidence",
|
||
"rollback_plan_ref": null,
|
||
"route_scope_accepted": false,
|
||
"route_smoke_authorized": false,
|
||
"runtime_approval_package_ready": false,
|
||
"runtime_config_change_authorized": false,
|
||
"runtime_execution_authorized": false,
|
||
"runtime_gate": false,
|
||
"secret_hash_collection_allowed": false,
|
||
"secret_value_collection_allowed": false,
|
||
"security_header_change_authorized": false,
|
||
"sensitive_string_scan_accepted": false,
|
||
"sensitive_string_scan_ref": null,
|
||
"source_ref_existing_count": 3,
|
||
"source_refs": [
|
||
"apps/web/src/app/[locale]/awooop",
|
||
"apps/api/src/core/awooop_operator_auth.py",
|
||
"apps/api/src/core/csrf.py"
|
||
],
|
||
"status": "waiting_change_evidence",
|
||
"title": "Admin / operator console auth boundary",
|
||
"webhook_callback_owner_accepted": false,
|
||
"webhook_callback_owner_ref": null,
|
||
"webhook_receiver_change_authorized": false,
|
||
"webhook_secret_change_authorized": false,
|
||
"write_capable": true
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"admin_auth_boundary_accepted": false,
|
||
"admin_auth_boundary_ref": null,
|
||
"admin_route_change_authorized": false,
|
||
"affected_route_refs": [],
|
||
"affected_scope": "API base URL、CORS origins、NEXT_PUBLIC build-time config、public domain / internal IP boundary",
|
||
"api_contract_change_authorized": false,
|
||
"api_contract_readback_accepted": false,
|
||
"api_contract_readback_ref": null,
|
||
"api_health_readback_ref": null,
|
||
"api_route_change_authorized": false,
|
||
"blast_radius": "pending_change_evidence",
|
||
"blocked_actions": [
|
||
"change_public_route",
|
||
"change_admin_route",
|
||
"change_api_route",
|
||
"change_cors_origin",
|
||
"modify_next_public_env",
|
||
"expose_internal_ip",
|
||
"expose_repo_slug",
|
||
"expose_owner_namespace",
|
||
"expose_secret_value",
|
||
"bypass_auth",
|
||
"change_callback_url",
|
||
"change_webhook_secret",
|
||
"modify_middleware_auth",
|
||
"disable_csrf",
|
||
"disable_rate_limit",
|
||
"change_cookie_policy",
|
||
"change_security_headers",
|
||
"publish_internal_transcript",
|
||
"publish_internal_status_code",
|
||
"deploy_frontend",
|
||
"deploy_api",
|
||
"rewrite_nginx_route",
|
||
"change_public_url",
|
||
"change_openapi_contract",
|
||
"mutate_database",
|
||
"run_migration",
|
||
"send_webhook",
|
||
"active_scan",
|
||
"enable_action_button",
|
||
"production_deploy",
|
||
"force_push",
|
||
"switch_github_primary"
|
||
],
|
||
"callback_url_change_authorized": false,
|
||
"change_evidence_accepted": false,
|
||
"change_evidence_candidate_id": "public_runtime_config_change_evidence:api_cors_and_public_url_runtime_config",
|
||
"change_evidence_fields": [
|
||
"change_evidence_candidate_id",
|
||
"source_refs",
|
||
"control_tier",
|
||
"proposed_runtime_config_change_ref",
|
||
"affected_route_refs",
|
||
"public_url_or_domain_ref",
|
||
"admin_auth_boundary_ref",
|
||
"api_contract_readback_ref",
|
||
"cors_origin_diff_ref",
|
||
"frontend_env_diff_ref",
|
||
"i18n_redaction_review_ref",
|
||
"webhook_callback_owner_ref",
|
||
"desktop_mobile_smoke_ref",
|
||
"api_health_readback_ref",
|
||
"sensitive_string_scan_ref",
|
||
"console_error_scan_ref",
|
||
"blast_radius",
|
||
"maintenance_window",
|
||
"rollback_owner",
|
||
"rollback_plan_ref",
|
||
"postcheck_evidence_ref",
|
||
"redacted_evidence_refs",
|
||
"reviewer_outcome",
|
||
"not_approval"
|
||
],
|
||
"change_evidence_quarantined": false,
|
||
"change_evidence_received": false,
|
||
"change_evidence_rejected": false,
|
||
"console_error_scan_ref": null,
|
||
"control_tier": "C0",
|
||
"cookie_policy_change_authorized": false,
|
||
"cors_change_authorized": false,
|
||
"cors_origin_diff_accepted": false,
|
||
"cors_origin_diff_ref": null,
|
||
"csrf_disable_authorized": false,
|
||
"database_migration_authorized": false,
|
||
"desktop_mobile_smoke_accepted": false,
|
||
"desktop_mobile_smoke_authorized": false,
|
||
"desktop_mobile_smoke_ref": null,
|
||
"force_push_authorized": false,
|
||
"frontend_env_change_authorized": false,
|
||
"frontend_env_diff_accepted": false,
|
||
"frontend_env_diff_ref": null,
|
||
"github_primary_switch_authorized": false,
|
||
"i18n_public_text_internal_identity_allowed": false,
|
||
"i18n_redaction_review_accepted": false,
|
||
"i18n_redaction_review_ref": null,
|
||
"internal_ip_exposure_allowed": false,
|
||
"internal_status_code_exposure_allowed": false,
|
||
"internal_transcript_exposure_allowed": false,
|
||
"maintenance_window": "pending_change_evidence",
|
||
"middleware_auth_change_authorized": false,
|
||
"not_approval": true,
|
||
"outcome_lanes": [
|
||
"waiting_change_evidence",
|
||
"quarantine_sensitive_payload",
|
||
"reject_unredacted_or_runtime_claim",
|
||
"request_supplement",
|
||
"ready_for_reviewer_acceptance",
|
||
"ready_for_runtime_approval_package",
|
||
"waiting_maintenance_window",
|
||
"waiting_runtime_gate"
|
||
],
|
||
"owner_namespace_exposure_allowed": false,
|
||
"partial_token_collection_allowed": false,
|
||
"postcheck_evidence_accepted": false,
|
||
"postcheck_evidence_ref": null,
|
||
"production_deploy_authorized": false,
|
||
"proposed_runtime_config_change_ref": null,
|
||
"public_route_change_authorized": false,
|
||
"public_url_or_domain_ref": null,
|
||
"rate_limit_disable_authorized": false,
|
||
"raw_payload_storage_allowed": false,
|
||
"redacted_evidence_refs": [],
|
||
"repo_namespace_exposure_allowed": false,
|
||
"required_evidence_fields": [
|
||
"proposed_runtime_config_change_ref",
|
||
"affected_route_refs",
|
||
"public_url_or_domain_ref",
|
||
"admin_auth_boundary_ref",
|
||
"api_contract_readback_ref",
|
||
"cors_origin_diff_ref",
|
||
"frontend_env_diff_ref",
|
||
"i18n_redaction_review_ref",
|
||
"webhook_callback_owner_ref",
|
||
"desktop_mobile_smoke_ref",
|
||
"api_health_readback_ref",
|
||
"sensitive_string_scan_ref",
|
||
"console_error_scan_ref",
|
||
"blast_radius",
|
||
"maintenance_window",
|
||
"rollback_owner",
|
||
"rollback_plan_ref",
|
||
"postcheck_evidence_ref",
|
||
"redacted_evidence_refs",
|
||
"reviewer_outcome",
|
||
"not_approval"
|
||
],
|
||
"requires_runtime_approval_package": true,
|
||
"reviewer_checks": [
|
||
"change_ref_present",
|
||
"affected_route_refs_present",
|
||
"public_url_not_internal_ip",
|
||
"admin_auth_boundary_called_out",
|
||
"api_contract_readback_present",
|
||
"cors_origin_diff_ref_only",
|
||
"frontend_env_diff_ref_present",
|
||
"i18n_redaction_review_present",
|
||
"webhook_callback_owner_present",
|
||
"desktop_mobile_smoke_present",
|
||
"api_health_readback_present",
|
||
"sensitive_string_scan_present",
|
||
"console_error_scan_present",
|
||
"no_secret_value_or_cookie",
|
||
"security_header_or_cookie_impact_called_out",
|
||
"blast_radius_present",
|
||
"maintenance_window_present",
|
||
"rollback_owner_present",
|
||
"postcheck_evidence_present",
|
||
"no_runtime_action_claim",
|
||
"cross_project_sync_noted"
|
||
],
|
||
"reviewer_outcome": "waiting_change_evidence",
|
||
"risk": "HIGH",
|
||
"rollback_owner": "pending_change_evidence",
|
||
"rollback_plan_ref": null,
|
||
"route_scope_accepted": false,
|
||
"route_smoke_authorized": false,
|
||
"runtime_approval_package_ready": false,
|
||
"runtime_config_change_authorized": false,
|
||
"runtime_execution_authorized": false,
|
||
"runtime_gate": false,
|
||
"secret_hash_collection_allowed": false,
|
||
"secret_value_collection_allowed": false,
|
||
"security_header_change_authorized": false,
|
||
"sensitive_string_scan_accepted": false,
|
||
"sensitive_string_scan_ref": null,
|
||
"source_ref_existing_count": 4,
|
||
"source_refs": [
|
||
"apps/api/src/core/config.py",
|
||
"apps/api/src/config.py",
|
||
"apps/web/src/lib/config.ts",
|
||
"apps/web/src/lib/api-client.ts"
|
||
],
|
||
"status": "waiting_change_evidence",
|
||
"title": "API / CORS / public URL runtime config",
|
||
"webhook_callback_owner_accepted": false,
|
||
"webhook_callback_owner_ref": null,
|
||
"webhook_receiver_change_authorized": false,
|
||
"webhook_secret_change_authorized": false,
|
||
"write_capable": true
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"admin_auth_boundary_accepted": false,
|
||
"admin_auth_boundary_ref": null,
|
||
"admin_route_change_authorized": false,
|
||
"affected_route_refs": [],
|
||
"affected_scope": "Next.js middleware、Sentry tunnel、browser-facing env、health route 與 console error boundary",
|
||
"api_contract_change_authorized": false,
|
||
"api_contract_readback_accepted": false,
|
||
"api_contract_readback_ref": null,
|
||
"api_health_readback_ref": null,
|
||
"api_route_change_authorized": false,
|
||
"blast_radius": "pending_change_evidence",
|
||
"blocked_actions": [
|
||
"change_public_route",
|
||
"change_admin_route",
|
||
"change_api_route",
|
||
"change_cors_origin",
|
||
"modify_next_public_env",
|
||
"expose_internal_ip",
|
||
"expose_repo_slug",
|
||
"expose_owner_namespace",
|
||
"expose_secret_value",
|
||
"bypass_auth",
|
||
"change_callback_url",
|
||
"change_webhook_secret",
|
||
"modify_middleware_auth",
|
||
"disable_csrf",
|
||
"disable_rate_limit",
|
||
"change_cookie_policy",
|
||
"change_security_headers",
|
||
"publish_internal_transcript",
|
||
"publish_internal_status_code",
|
||
"deploy_frontend",
|
||
"deploy_api",
|
||
"rewrite_nginx_route",
|
||
"change_public_url",
|
||
"change_openapi_contract",
|
||
"mutate_database",
|
||
"run_migration",
|
||
"send_webhook",
|
||
"active_scan",
|
||
"enable_action_button",
|
||
"production_deploy",
|
||
"force_push",
|
||
"switch_github_primary"
|
||
],
|
||
"callback_url_change_authorized": false,
|
||
"change_evidence_accepted": false,
|
||
"change_evidence_candidate_id": "public_runtime_config_change_evidence:frontend_env_and_sentry_tunnel_runtime_config",
|
||
"change_evidence_fields": [
|
||
"change_evidence_candidate_id",
|
||
"source_refs",
|
||
"control_tier",
|
||
"proposed_runtime_config_change_ref",
|
||
"affected_route_refs",
|
||
"public_url_or_domain_ref",
|
||
"admin_auth_boundary_ref",
|
||
"api_contract_readback_ref",
|
||
"cors_origin_diff_ref",
|
||
"frontend_env_diff_ref",
|
||
"i18n_redaction_review_ref",
|
||
"webhook_callback_owner_ref",
|
||
"desktop_mobile_smoke_ref",
|
||
"api_health_readback_ref",
|
||
"sensitive_string_scan_ref",
|
||
"console_error_scan_ref",
|
||
"blast_radius",
|
||
"maintenance_window",
|
||
"rollback_owner",
|
||
"rollback_plan_ref",
|
||
"postcheck_evidence_ref",
|
||
"redacted_evidence_refs",
|
||
"reviewer_outcome",
|
||
"not_approval"
|
||
],
|
||
"change_evidence_quarantined": false,
|
||
"change_evidence_received": false,
|
||
"change_evidence_rejected": false,
|
||
"console_error_scan_ref": null,
|
||
"control_tier": "C0",
|
||
"cookie_policy_change_authorized": false,
|
||
"cors_change_authorized": false,
|
||
"cors_origin_diff_accepted": false,
|
||
"cors_origin_diff_ref": null,
|
||
"csrf_disable_authorized": false,
|
||
"database_migration_authorized": false,
|
||
"desktop_mobile_smoke_accepted": false,
|
||
"desktop_mobile_smoke_authorized": false,
|
||
"desktop_mobile_smoke_ref": null,
|
||
"force_push_authorized": false,
|
||
"frontend_env_change_authorized": false,
|
||
"frontend_env_diff_accepted": false,
|
||
"frontend_env_diff_ref": null,
|
||
"github_primary_switch_authorized": false,
|
||
"i18n_public_text_internal_identity_allowed": false,
|
||
"i18n_redaction_review_accepted": false,
|
||
"i18n_redaction_review_ref": null,
|
||
"internal_ip_exposure_allowed": false,
|
||
"internal_status_code_exposure_allowed": false,
|
||
"internal_transcript_exposure_allowed": false,
|
||
"maintenance_window": "pending_change_evidence",
|
||
"middleware_auth_change_authorized": false,
|
||
"not_approval": true,
|
||
"outcome_lanes": [
|
||
"waiting_change_evidence",
|
||
"quarantine_sensitive_payload",
|
||
"reject_unredacted_or_runtime_claim",
|
||
"request_supplement",
|
||
"ready_for_reviewer_acceptance",
|
||
"ready_for_runtime_approval_package",
|
||
"waiting_maintenance_window",
|
||
"waiting_runtime_gate"
|
||
],
|
||
"owner_namespace_exposure_allowed": false,
|
||
"partial_token_collection_allowed": false,
|
||
"postcheck_evidence_accepted": false,
|
||
"postcheck_evidence_ref": null,
|
||
"production_deploy_authorized": false,
|
||
"proposed_runtime_config_change_ref": null,
|
||
"public_route_change_authorized": false,
|
||
"public_url_or_domain_ref": null,
|
||
"rate_limit_disable_authorized": false,
|
||
"raw_payload_storage_allowed": false,
|
||
"redacted_evidence_refs": [],
|
||
"repo_namespace_exposure_allowed": false,
|
||
"required_evidence_fields": [
|
||
"proposed_runtime_config_change_ref",
|
||
"affected_route_refs",
|
||
"public_url_or_domain_ref",
|
||
"admin_auth_boundary_ref",
|
||
"api_contract_readback_ref",
|
||
"cors_origin_diff_ref",
|
||
"frontend_env_diff_ref",
|
||
"i18n_redaction_review_ref",
|
||
"webhook_callback_owner_ref",
|
||
"desktop_mobile_smoke_ref",
|
||
"api_health_readback_ref",
|
||
"sensitive_string_scan_ref",
|
||
"console_error_scan_ref",
|
||
"blast_radius",
|
||
"maintenance_window",
|
||
"rollback_owner",
|
||
"rollback_plan_ref",
|
||
"postcheck_evidence_ref",
|
||
"redacted_evidence_refs",
|
||
"reviewer_outcome",
|
||
"not_approval"
|
||
],
|
||
"requires_runtime_approval_package": true,
|
||
"reviewer_checks": [
|
||
"change_ref_present",
|
||
"affected_route_refs_present",
|
||
"public_url_not_internal_ip",
|
||
"admin_auth_boundary_called_out",
|
||
"api_contract_readback_present",
|
||
"cors_origin_diff_ref_only",
|
||
"frontend_env_diff_ref_present",
|
||
"i18n_redaction_review_present",
|
||
"webhook_callback_owner_present",
|
||
"desktop_mobile_smoke_present",
|
||
"api_health_readback_present",
|
||
"sensitive_string_scan_present",
|
||
"console_error_scan_present",
|
||
"no_secret_value_or_cookie",
|
||
"security_header_or_cookie_impact_called_out",
|
||
"blast_radius_present",
|
||
"maintenance_window_present",
|
||
"rollback_owner_present",
|
||
"postcheck_evidence_present",
|
||
"no_runtime_action_claim",
|
||
"cross_project_sync_noted"
|
||
],
|
||
"reviewer_outcome": "waiting_change_evidence",
|
||
"risk": "HIGH",
|
||
"rollback_owner": "pending_change_evidence",
|
||
"rollback_plan_ref": null,
|
||
"route_scope_accepted": false,
|
||
"route_smoke_authorized": false,
|
||
"runtime_approval_package_ready": false,
|
||
"runtime_config_change_authorized": false,
|
||
"runtime_execution_authorized": false,
|
||
"runtime_gate": false,
|
||
"secret_hash_collection_allowed": false,
|
||
"secret_value_collection_allowed": false,
|
||
"security_header_change_authorized": false,
|
||
"sensitive_string_scan_accepted": false,
|
||
"sensitive_string_scan_ref": null,
|
||
"source_ref_existing_count": 3,
|
||
"source_refs": [
|
||
"apps/web/src/middleware.ts",
|
||
"apps/web/src/app/api/sentry-tunnel/route.ts",
|
||
"apps/web/src/app/api/health/route.ts"
|
||
],
|
||
"status": "waiting_change_evidence",
|
||
"title": "Frontend env / Sentry tunnel / browser runtime config",
|
||
"webhook_callback_owner_accepted": false,
|
||
"webhook_callback_owner_ref": null,
|
||
"webhook_receiver_change_authorized": false,
|
||
"webhook_secret_change_authorized": false,
|
||
"write_capable": true
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"admin_auth_boundary_accepted": false,
|
||
"admin_auth_boundary_ref": null,
|
||
"admin_route_change_authorized": false,
|
||
"affected_route_refs": [],
|
||
"affected_scope": "webhook callback、proposal route、deep link、notification route 與 external send boundary",
|
||
"api_contract_change_authorized": false,
|
||
"api_contract_readback_accepted": false,
|
||
"api_contract_readback_ref": null,
|
||
"api_health_readback_ref": null,
|
||
"api_route_change_authorized": false,
|
||
"blast_radius": "pending_change_evidence",
|
||
"blocked_actions": [
|
||
"change_public_route",
|
||
"change_admin_route",
|
||
"change_api_route",
|
||
"change_cors_origin",
|
||
"modify_next_public_env",
|
||
"expose_internal_ip",
|
||
"expose_repo_slug",
|
||
"expose_owner_namespace",
|
||
"expose_secret_value",
|
||
"bypass_auth",
|
||
"change_callback_url",
|
||
"change_webhook_secret",
|
||
"modify_middleware_auth",
|
||
"disable_csrf",
|
||
"disable_rate_limit",
|
||
"change_cookie_policy",
|
||
"change_security_headers",
|
||
"publish_internal_transcript",
|
||
"publish_internal_status_code",
|
||
"deploy_frontend",
|
||
"deploy_api",
|
||
"rewrite_nginx_route",
|
||
"change_public_url",
|
||
"change_openapi_contract",
|
||
"mutate_database",
|
||
"run_migration",
|
||
"send_webhook",
|
||
"active_scan",
|
||
"enable_action_button",
|
||
"production_deploy",
|
||
"force_push",
|
||
"switch_github_primary"
|
||
],
|
||
"callback_url_change_authorized": false,
|
||
"change_evidence_accepted": false,
|
||
"change_evidence_candidate_id": "public_runtime_config_change_evidence:webhook_callback_and_notification_runtime_config",
|
||
"change_evidence_fields": [
|
||
"change_evidence_candidate_id",
|
||
"source_refs",
|
||
"control_tier",
|
||
"proposed_runtime_config_change_ref",
|
||
"affected_route_refs",
|
||
"public_url_or_domain_ref",
|
||
"admin_auth_boundary_ref",
|
||
"api_contract_readback_ref",
|
||
"cors_origin_diff_ref",
|
||
"frontend_env_diff_ref",
|
||
"i18n_redaction_review_ref",
|
||
"webhook_callback_owner_ref",
|
||
"desktop_mobile_smoke_ref",
|
||
"api_health_readback_ref",
|
||
"sensitive_string_scan_ref",
|
||
"console_error_scan_ref",
|
||
"blast_radius",
|
||
"maintenance_window",
|
||
"rollback_owner",
|
||
"rollback_plan_ref",
|
||
"postcheck_evidence_ref",
|
||
"redacted_evidence_refs",
|
||
"reviewer_outcome",
|
||
"not_approval"
|
||
],
|
||
"change_evidence_quarantined": false,
|
||
"change_evidence_received": false,
|
||
"change_evidence_rejected": false,
|
||
"console_error_scan_ref": null,
|
||
"control_tier": "C0",
|
||
"cookie_policy_change_authorized": false,
|
||
"cors_change_authorized": false,
|
||
"cors_origin_diff_accepted": false,
|
||
"cors_origin_diff_ref": null,
|
||
"csrf_disable_authorized": false,
|
||
"database_migration_authorized": false,
|
||
"desktop_mobile_smoke_accepted": false,
|
||
"desktop_mobile_smoke_authorized": false,
|
||
"desktop_mobile_smoke_ref": null,
|
||
"force_push_authorized": false,
|
||
"frontend_env_change_authorized": false,
|
||
"frontend_env_diff_accepted": false,
|
||
"frontend_env_diff_ref": null,
|
||
"github_primary_switch_authorized": false,
|
||
"i18n_public_text_internal_identity_allowed": false,
|
||
"i18n_redaction_review_accepted": false,
|
||
"i18n_redaction_review_ref": null,
|
||
"internal_ip_exposure_allowed": false,
|
||
"internal_status_code_exposure_allowed": false,
|
||
"internal_transcript_exposure_allowed": false,
|
||
"maintenance_window": "pending_change_evidence",
|
||
"middleware_auth_change_authorized": false,
|
||
"not_approval": true,
|
||
"outcome_lanes": [
|
||
"waiting_change_evidence",
|
||
"quarantine_sensitive_payload",
|
||
"reject_unredacted_or_runtime_claim",
|
||
"request_supplement",
|
||
"ready_for_reviewer_acceptance",
|
||
"ready_for_runtime_approval_package",
|
||
"waiting_maintenance_window",
|
||
"waiting_runtime_gate"
|
||
],
|
||
"owner_namespace_exposure_allowed": false,
|
||
"partial_token_collection_allowed": false,
|
||
"postcheck_evidence_accepted": false,
|
||
"postcheck_evidence_ref": null,
|
||
"production_deploy_authorized": false,
|
||
"proposed_runtime_config_change_ref": null,
|
||
"public_route_change_authorized": false,
|
||
"public_url_or_domain_ref": null,
|
||
"rate_limit_disable_authorized": false,
|
||
"raw_payload_storage_allowed": false,
|
||
"redacted_evidence_refs": [],
|
||
"repo_namespace_exposure_allowed": false,
|
||
"required_evidence_fields": [
|
||
"proposed_runtime_config_change_ref",
|
||
"affected_route_refs",
|
||
"public_url_or_domain_ref",
|
||
"admin_auth_boundary_ref",
|
||
"api_contract_readback_ref",
|
||
"cors_origin_diff_ref",
|
||
"frontend_env_diff_ref",
|
||
"i18n_redaction_review_ref",
|
||
"webhook_callback_owner_ref",
|
||
"desktop_mobile_smoke_ref",
|
||
"api_health_readback_ref",
|
||
"sensitive_string_scan_ref",
|
||
"console_error_scan_ref",
|
||
"blast_radius",
|
||
"maintenance_window",
|
||
"rollback_owner",
|
||
"rollback_plan_ref",
|
||
"postcheck_evidence_ref",
|
||
"redacted_evidence_refs",
|
||
"reviewer_outcome",
|
||
"not_approval"
|
||
],
|
||
"requires_runtime_approval_package": true,
|
||
"reviewer_checks": [
|
||
"change_ref_present",
|
||
"affected_route_refs_present",
|
||
"public_url_not_internal_ip",
|
||
"admin_auth_boundary_called_out",
|
||
"api_contract_readback_present",
|
||
"cors_origin_diff_ref_only",
|
||
"frontend_env_diff_ref_present",
|
||
"i18n_redaction_review_present",
|
||
"webhook_callback_owner_present",
|
||
"desktop_mobile_smoke_present",
|
||
"api_health_readback_present",
|
||
"sensitive_string_scan_present",
|
||
"console_error_scan_present",
|
||
"no_secret_value_or_cookie",
|
||
"security_header_or_cookie_impact_called_out",
|
||
"blast_radius_present",
|
||
"maintenance_window_present",
|
||
"rollback_owner_present",
|
||
"postcheck_evidence_present",
|
||
"no_runtime_action_claim",
|
||
"cross_project_sync_noted"
|
||
],
|
||
"reviewer_outcome": "waiting_change_evidence",
|
||
"risk": "HIGH",
|
||
"rollback_owner": "pending_change_evidence",
|
||
"rollback_plan_ref": null,
|
||
"route_scope_accepted": false,
|
||
"route_smoke_authorized": false,
|
||
"runtime_approval_package_ready": false,
|
||
"runtime_config_change_authorized": false,
|
||
"runtime_execution_authorized": false,
|
||
"runtime_gate": false,
|
||
"secret_hash_collection_allowed": false,
|
||
"secret_value_collection_allowed": false,
|
||
"security_header_change_authorized": false,
|
||
"sensitive_string_scan_accepted": false,
|
||
"sensitive_string_scan_ref": null,
|
||
"source_ref_existing_count": 3,
|
||
"source_refs": [
|
||
"apps/api/src/models/webhook.py",
|
||
"apps/api/src/routers/proposals.py",
|
||
"apps/api/src/core/deep_linking.py"
|
||
],
|
||
"status": "waiting_change_evidence",
|
||
"title": "Webhook / callback / notification runtime route",
|
||
"webhook_callback_owner_accepted": false,
|
||
"webhook_callback_owner_ref": null,
|
||
"webhook_receiver_change_authorized": false,
|
||
"webhook_secret_change_authorized": false,
|
||
"write_capable": true
|
||
},
|
||
{
|
||
"action_buttons_allowed": false,
|
||
"admin_auth_boundary_accepted": false,
|
||
"admin_auth_boundary_ref": null,
|
||
"admin_route_change_authorized": false,
|
||
"affected_route_refs": [],
|
||
"affected_scope": "VibeWork、agent-bounty-protocol、StockPlatform、官方形象網站、藥局網站與其他產品 runtime route scope",
|
||
"api_contract_change_authorized": false,
|
||
"api_contract_readback_accepted": false,
|
||
"api_contract_readback_ref": null,
|
||
"api_health_readback_ref": null,
|
||
"api_route_change_authorized": false,
|
||
"blast_radius": "pending_change_evidence",
|
||
"blocked_actions": [
|
||
"change_public_route",
|
||
"change_admin_route",
|
||
"change_api_route",
|
||
"change_cors_origin",
|
||
"modify_next_public_env",
|
||
"expose_internal_ip",
|
||
"expose_repo_slug",
|
||
"expose_owner_namespace",
|
||
"expose_secret_value",
|
||
"bypass_auth",
|
||
"change_callback_url",
|
||
"change_webhook_secret",
|
||
"modify_middleware_auth",
|
||
"disable_csrf",
|
||
"disable_rate_limit",
|
||
"change_cookie_policy",
|
||
"change_security_headers",
|
||
"publish_internal_transcript",
|
||
"publish_internal_status_code",
|
||
"deploy_frontend",
|
||
"deploy_api",
|
||
"rewrite_nginx_route",
|
||
"change_public_url",
|
||
"change_openapi_contract",
|
||
"mutate_database",
|
||
"run_migration",
|
||
"send_webhook",
|
||
"active_scan",
|
||
"enable_action_button",
|
||
"production_deploy",
|
||
"force_push",
|
||
"switch_github_primary"
|
||
],
|
||
"callback_url_change_authorized": false,
|
||
"change_evidence_accepted": false,
|
||
"change_evidence_candidate_id": "public_runtime_config_change_evidence:cross_product_runtime_route_scope",
|
||
"change_evidence_fields": [
|
||
"change_evidence_candidate_id",
|
||
"source_refs",
|
||
"control_tier",
|
||
"proposed_runtime_config_change_ref",
|
||
"affected_route_refs",
|
||
"public_url_or_domain_ref",
|
||
"admin_auth_boundary_ref",
|
||
"api_contract_readback_ref",
|
||
"cors_origin_diff_ref",
|
||
"frontend_env_diff_ref",
|
||
"i18n_redaction_review_ref",
|
||
"webhook_callback_owner_ref",
|
||
"desktop_mobile_smoke_ref",
|
||
"api_health_readback_ref",
|
||
"sensitive_string_scan_ref",
|
||
"console_error_scan_ref",
|
||
"blast_radius",
|
||
"maintenance_window",
|
||
"rollback_owner",
|
||
"rollback_plan_ref",
|
||
"postcheck_evidence_ref",
|
||
"redacted_evidence_refs",
|
||
"reviewer_outcome",
|
||
"not_approval"
|
||
],
|
||
"change_evidence_quarantined": false,
|
||
"change_evidence_received": false,
|
||
"change_evidence_rejected": false,
|
||
"console_error_scan_ref": null,
|
||
"control_tier": "C1",
|
||
"cookie_policy_change_authorized": false,
|
||
"cors_change_authorized": false,
|
||
"cors_origin_diff_accepted": false,
|
||
"cors_origin_diff_ref": null,
|
||
"csrf_disable_authorized": false,
|
||
"database_migration_authorized": false,
|
||
"desktop_mobile_smoke_accepted": false,
|
||
"desktop_mobile_smoke_authorized": false,
|
||
"desktop_mobile_smoke_ref": null,
|
||
"force_push_authorized": false,
|
||
"frontend_env_change_authorized": false,
|
||
"frontend_env_diff_accepted": false,
|
||
"frontend_env_diff_ref": null,
|
||
"github_primary_switch_authorized": false,
|
||
"i18n_public_text_internal_identity_allowed": false,
|
||
"i18n_redaction_review_accepted": false,
|
||
"i18n_redaction_review_ref": null,
|
||
"internal_ip_exposure_allowed": false,
|
||
"internal_status_code_exposure_allowed": false,
|
||
"internal_transcript_exposure_allowed": false,
|
||
"maintenance_window": "pending_change_evidence",
|
||
"middleware_auth_change_authorized": false,
|
||
"not_approval": true,
|
||
"outcome_lanes": [
|
||
"waiting_change_evidence",
|
||
"quarantine_sensitive_payload",
|
||
"reject_unredacted_or_runtime_claim",
|
||
"request_supplement",
|
||
"ready_for_reviewer_acceptance",
|
||
"ready_for_runtime_approval_package",
|
||
"waiting_maintenance_window",
|
||
"waiting_runtime_gate"
|
||
],
|
||
"owner_namespace_exposure_allowed": false,
|
||
"partial_token_collection_allowed": false,
|
||
"postcheck_evidence_accepted": false,
|
||
"postcheck_evidence_ref": null,
|
||
"production_deploy_authorized": false,
|
||
"proposed_runtime_config_change_ref": null,
|
||
"public_route_change_authorized": false,
|
||
"public_url_or_domain_ref": null,
|
||
"rate_limit_disable_authorized": false,
|
||
"raw_payload_storage_allowed": false,
|
||
"redacted_evidence_refs": [],
|
||
"repo_namespace_exposure_allowed": false,
|
||
"required_evidence_fields": [
|
||
"proposed_runtime_config_change_ref",
|
||
"affected_route_refs",
|
||
"public_url_or_domain_ref",
|
||
"admin_auth_boundary_ref",
|
||
"api_contract_readback_ref",
|
||
"cors_origin_diff_ref",
|
||
"frontend_env_diff_ref",
|
||
"i18n_redaction_review_ref",
|
||
"webhook_callback_owner_ref",
|
||
"desktop_mobile_smoke_ref",
|
||
"api_health_readback_ref",
|
||
"sensitive_string_scan_ref",
|
||
"console_error_scan_ref",
|
||
"blast_radius",
|
||
"maintenance_window",
|
||
"rollback_owner",
|
||
"rollback_plan_ref",
|
||
"postcheck_evidence_ref",
|
||
"redacted_evidence_refs",
|
||
"reviewer_outcome",
|
||
"not_approval"
|
||
],
|
||
"requires_runtime_approval_package": true,
|
||
"reviewer_checks": [
|
||
"change_ref_present",
|
||
"affected_route_refs_present",
|
||
"public_url_not_internal_ip",
|
||
"admin_auth_boundary_called_out",
|
||
"api_contract_readback_present",
|
||
"cors_origin_diff_ref_only",
|
||
"frontend_env_diff_ref_present",
|
||
"i18n_redaction_review_present",
|
||
"webhook_callback_owner_present",
|
||
"desktop_mobile_smoke_present",
|
||
"api_health_readback_present",
|
||
"sensitive_string_scan_present",
|
||
"console_error_scan_present",
|
||
"no_secret_value_or_cookie",
|
||
"security_header_or_cookie_impact_called_out",
|
||
"blast_radius_present",
|
||
"maintenance_window_present",
|
||
"rollback_owner_present",
|
||
"postcheck_evidence_present",
|
||
"no_runtime_action_claim",
|
||
"cross_project_sync_noted"
|
||
],
|
||
"reviewer_outcome": "waiting_change_evidence",
|
||
"risk": "MEDIUM",
|
||
"rollback_owner": "pending_change_evidence",
|
||
"rollback_plan_ref": null,
|
||
"route_scope_accepted": false,
|
||
"route_smoke_authorized": false,
|
||
"runtime_approval_package_ready": false,
|
||
"runtime_config_change_authorized": false,
|
||
"runtime_execution_authorized": false,
|
||
"runtime_gate": false,
|
||
"secret_hash_collection_allowed": false,
|
||
"secret_value_collection_allowed": false,
|
||
"security_header_change_authorized": false,
|
||
"sensitive_string_scan_accepted": false,
|
||
"sensitive_string_scan_ref": null,
|
||
"source_ref_existing_count": 4,
|
||
"source_refs": [
|
||
"docs/security/IWOOOS-CONFIG-CONTROL-INVENTORY.md",
|
||
"docs/security/VIBEWORK-IWOOOS-ONBOARDING-HANDOFF.md",
|
||
"docs/security/AGENT-BOUNTY-IWOOOS-ONBOARDING-HANDOFF.md",
|
||
"docs/security/AGENT-BOUNTY-OWNER-REQUEST-DRAFT.md"
|
||
],
|
||
"status": "waiting_change_evidence",
|
||
"title": "Cross-product runtime route scope",
|
||
"webhook_callback_owner_accepted": false,
|
||
"webhook_callback_owner_ref": null,
|
||
"webhook_receiver_change_authorized": false,
|
||
"webhook_secret_change_authorized": false,
|
||
"write_capable": true
|
||
}
|
||
],
|
||
"change_evidence_fields": [
|
||
"change_evidence_candidate_id",
|
||
"source_refs",
|
||
"control_tier",
|
||
"proposed_runtime_config_change_ref",
|
||
"affected_route_refs",
|
||
"public_url_or_domain_ref",
|
||
"admin_auth_boundary_ref",
|
||
"api_contract_readback_ref",
|
||
"cors_origin_diff_ref",
|
||
"frontend_env_diff_ref",
|
||
"i18n_redaction_review_ref",
|
||
"webhook_callback_owner_ref",
|
||
"desktop_mobile_smoke_ref",
|
||
"api_health_readback_ref",
|
||
"sensitive_string_scan_ref",
|
||
"console_error_scan_ref",
|
||
"blast_radius",
|
||
"maintenance_window",
|
||
"rollback_owner",
|
||
"rollback_plan_ref",
|
||
"postcheck_evidence_ref",
|
||
"redacted_evidence_refs",
|
||
"reviewer_outcome",
|
||
"not_approval"
|
||
],
|
||
"execution_boundaries": {
|
||
"action_buttons_allowed": false,
|
||
"admin_route_change_authorized": false,
|
||
"api_contract_change_authorized": false,
|
||
"api_route_change_authorized": false,
|
||
"callback_url_change_authorized": false,
|
||
"cookie_policy_change_authorized": false,
|
||
"cors_change_authorized": false,
|
||
"csrf_disable_authorized": false,
|
||
"database_migration_authorized": false,
|
||
"desktop_mobile_smoke_authorized": false,
|
||
"force_push_authorized": false,
|
||
"frontend_env_change_authorized": false,
|
||
"github_primary_switch_authorized": false,
|
||
"i18n_public_text_internal_identity_allowed": false,
|
||
"internal_ip_exposure_allowed": false,
|
||
"internal_status_code_exposure_allowed": false,
|
||
"internal_transcript_exposure_allowed": false,
|
||
"middleware_auth_change_authorized": false,
|
||
"not_authorization": true,
|
||
"owner_namespace_exposure_allowed": false,
|
||
"partial_token_collection_allowed": false,
|
||
"production_deploy_authorized": false,
|
||
"public_route_change_authorized": false,
|
||
"rate_limit_disable_authorized": false,
|
||
"raw_payload_storage_allowed": false,
|
||
"repo_namespace_exposure_allowed": false,
|
||
"route_smoke_authorized": false,
|
||
"runtime_config_change_authorized": false,
|
||
"runtime_execution_authorized": false,
|
||
"secret_hash_collection_allowed": false,
|
||
"secret_value_collection_allowed": false,
|
||
"security_header_change_authorized": false,
|
||
"webhook_receiver_change_authorized": false,
|
||
"webhook_secret_change_authorized": false
|
||
},
|
||
"generated_at": "2026-06-15T04:20:00+08:00",
|
||
"git_commit": "77a76d1a",
|
||
"mode": "metadata_only_no_secret_no_route_change_no_deploy",
|
||
"operator_interpretation": [
|
||
"此帳本只描述 public/admin/API/frontend runtime config 變更證據如何收件與拒收,不是 route、CORS、env、auth 或 webhook 變更批准。",
|
||
"前台、public API、HTML、bundle 與 messages 不得顯示 raw owner namespace、repo slug、內部狀態碼、內部對話或 secret value。",
|
||
"desktop/mobile smoke、API health、CD success、UI 可見與 AwoooP approval 都不能被解讀成 runtime gate 已開。",
|
||
"未來若要修改 public/admin/API route、CORS、NEXT_PUBLIC env、middleware auth、callback 或 webhook,仍需獨立 owner response、維護窗口、rollback owner 與 runtime approval package。"
|
||
],
|
||
"outcome_lanes": [
|
||
{
|
||
"lane_id": "waiting_change_evidence",
|
||
"meaning": "尚未收到 runtime config 變更證據;所有 accepted / runtime count 維持 0。"
|
||
},
|
||
{
|
||
"lane_id": "quarantine_sensitive_payload",
|
||
"meaning": "收到 cookie、token、secret value、raw internal payload 或未脫敏截圖時只能隔離。"
|
||
},
|
||
{
|
||
"lane_id": "reject_unredacted_or_runtime_claim",
|
||
"meaning": "出現 raw identity、internal transcript、internal state code 或把 evidence 誤當批准時直接拒收。"
|
||
},
|
||
{
|
||
"lane_id": "request_supplement",
|
||
"meaning": "缺 route scope、auth boundary、CORS diff、desktop/mobile smoke、rollback 或 post-check 時要求補件。"
|
||
},
|
||
{
|
||
"lane_id": "ready_for_reviewer_acceptance",
|
||
"meaning": "metadata 合格後只能進 reviewer acceptance,不得自動改 route / CORS / env。"
|
||
},
|
||
{
|
||
"lane_id": "ready_for_runtime_approval_package",
|
||
"meaning": "reviewer 接受後也只能形成 runtime approval package,不自動打開 gate。"
|
||
},
|
||
{
|
||
"lane_id": "waiting_maintenance_window",
|
||
"meaning": "若未來要改 public/admin/API runtime config,仍需獨立維護窗口。"
|
||
},
|
||
{
|
||
"lane_id": "waiting_runtime_gate",
|
||
"meaning": "change evidence accepted 後 runtime gate 仍等待獨立人工批准。"
|
||
}
|
||
],
|
||
"required_evidence_fields": [
|
||
"proposed_runtime_config_change_ref",
|
||
"affected_route_refs",
|
||
"public_url_or_domain_ref",
|
||
"admin_auth_boundary_ref",
|
||
"api_contract_readback_ref",
|
||
"cors_origin_diff_ref",
|
||
"frontend_env_diff_ref",
|
||
"i18n_redaction_review_ref",
|
||
"webhook_callback_owner_ref",
|
||
"desktop_mobile_smoke_ref",
|
||
"api_health_readback_ref",
|
||
"sensitive_string_scan_ref",
|
||
"console_error_scan_ref",
|
||
"blast_radius",
|
||
"maintenance_window",
|
||
"rollback_owner",
|
||
"rollback_plan_ref",
|
||
"postcheck_evidence_ref",
|
||
"redacted_evidence_refs",
|
||
"reviewer_outcome",
|
||
"not_approval"
|
||
],
|
||
"reviewer_checks": [
|
||
{
|
||
"check_id": "change_ref_present",
|
||
"instruction": "必須有 proposed runtime config change ref,不能只寫口頭同意。"
|
||
},
|
||
{
|
||
"check_id": "affected_route_refs_present",
|
||
"instruction": "必須列出 public / admin / API / callback / webhook / frontend route 影響範圍。"
|
||
},
|
||
{
|
||
"check_id": "public_url_not_internal_ip",
|
||
"instruction": "NEXT_PUBLIC 與公開 URL 只能使用 public domain,不得暴露內網 IP。"
|
||
},
|
||
{
|
||
"check_id": "admin_auth_boundary_called_out",
|
||
"instruction": "涉及後台、operator console 或審批路由時必須標出 auth boundary 與 owner。"
|
||
},
|
||
{
|
||
"check_id": "api_contract_readback_present",
|
||
"instruction": "API 變更需有 readback ref,且 public payload 不得暴露 raw owner namespace、repo slug 或內部狀態碼。"
|
||
},
|
||
{
|
||
"check_id": "cors_origin_diff_ref_only",
|
||
"instruction": "CORS 只能收 origin diff / owner ref,不得直接改白名單或使用萬用來源。"
|
||
},
|
||
{
|
||
"check_id": "frontend_env_diff_ref_present",
|
||
"instruction": "涉及 frontend env / build-time public config 時必須附 diff ref 與 bundle sensitive scan ref。"
|
||
},
|
||
{
|
||
"check_id": "i18n_redaction_review_present",
|
||
"instruction": "前台文案需確認全繁中、無內部對話、無抱怨語句、無 raw identity。"
|
||
},
|
||
{
|
||
"check_id": "webhook_callback_owner_present",
|
||
"instruction": "callback / webhook / Sentry tunnel / Telegram route 需有 owner 與回復方式。"
|
||
},
|
||
{
|
||
"check_id": "desktop_mobile_smoke_present",
|
||
"instruction": "涉及前台或後台 route 時必須有 desktop / mobile smoke ref 與 horizontal overflow 結果。"
|
||
},
|
||
{
|
||
"check_id": "api_health_readback_present",
|
||
"instruction": "API / backend runtime config 需有 health 或 contract readback ref。"
|
||
},
|
||
{
|
||
"check_id": "sensitive_string_scan_present",
|
||
"instruction": "必須附 sensitive string scan ref,至少檢查 raw namespace、internal state code、internal transcript、secret value。"
|
||
},
|
||
{
|
||
"check_id": "console_error_scan_present",
|
||
"instruction": "前端 smoke 需標出 console/page error 結果或說明不適用。"
|
||
},
|
||
{
|
||
"check_id": "no_secret_value_or_cookie",
|
||
"instruction": "不得保存 cookie、token、DSN value、secret value、hash、partial token 或 raw payload。"
|
||
},
|
||
{
|
||
"check_id": "security_header_or_cookie_impact_called_out",
|
||
"instruction": "若影響 headers、cookie、CSRF、rate limit 或 middleware,必須標出安全影響。"
|
||
},
|
||
{
|
||
"check_id": "blast_radius_present",
|
||
"instruction": "必須列出產品、route、API、admin/auth、public domain、callback、webhook 與使用者影響。"
|
||
},
|
||
{
|
||
"check_id": "maintenance_window_present",
|
||
"instruction": "任何 future runtime config 變更都必須另有維護窗口或明確 not-applicable 理由。"
|
||
},
|
||
{
|
||
"check_id": "rollback_owner_present",
|
||
"instruction": "必須有 rollback owner 與回復方式;不能只寫『可回復』。"
|
||
},
|
||
{
|
||
"check_id": "postcheck_evidence_present",
|
||
"instruction": "需有 post-check evidence ref,例如 API readback、browser smoke、bundle scan 或 alert silence review。"
|
||
},
|
||
{
|
||
"check_id": "no_runtime_action_claim",
|
||
"instruction": "不能把本帳本、UI 可見、CD success、AwoooP approval 或 smoke pass 當資安批准。"
|
||
},
|
||
{
|
||
"check_id": "cross_project_sync_noted",
|
||
"instruction": "若影響 AwoooP、IwoooS、agent-bounty、StockPlatform、公開網站或監控,需有跨專案同步 ref。"
|
||
}
|
||
],
|
||
"schema_version": "public_runtime_config_change_evidence_acceptance_v1",
|
||
"source_paths": [
|
||
"docs/HARD_RULES.md",
|
||
"docs/security/IWOOOS-CONFIG-CONTROL-INVENTORY.md",
|
||
"apps/api/src/config.py",
|
||
"apps/api/src/core/awooop_operator_auth.py",
|
||
"apps/api/src/core/config.py",
|
||
"apps/api/src/core/csrf.py",
|
||
"apps/api/src/core/deep_linking.py",
|
||
"apps/api/src/models/webhook.py",
|
||
"apps/api/src/routers/proposals.py",
|
||
"apps/web/messages/en.json",
|
||
"apps/web/messages/zh-TW.json",
|
||
"apps/web/src/app/[locale]",
|
||
"apps/web/src/app/[locale]/awooop",
|
||
"apps/web/src/app/api/health/route.ts",
|
||
"apps/web/src/app/api/sentry-tunnel/route.ts",
|
||
"apps/web/src/lib/api-client.ts",
|
||
"apps/web/src/lib/config.ts",
|
||
"apps/web/src/middleware.ts",
|
||
"docs/security/AGENT-BOUNTY-IWOOOS-ONBOARDING-HANDOFF.md",
|
||
"docs/security/AGENT-BOUNTY-OWNER-REQUEST-DRAFT.md",
|
||
"docs/security/IWOOOS-CONFIG-CONTROL-INVENTORY.md",
|
||
"docs/security/VIBEWORK-IWOOOS-ONBOARDING-HANDOFF.md"
|
||
],
|
||
"status": "change_evidence_acceptance_ledger_ready_no_runtime_action",
|
||
"summary": {
|
||
"action_button_count": 0,
|
||
"admin_auth_boundary_accepted_count": 0,
|
||
"api_contract_readback_accepted_count": 0,
|
||
"blocked_action_count": 32,
|
||
"c0_change_evidence_candidate_count": 5,
|
||
"c1_change_evidence_candidate_count": 1,
|
||
"change_evidence_accepted_count": 0,
|
||
"change_evidence_candidate_count": 6,
|
||
"change_evidence_received_count": 0,
|
||
"cors_origin_diff_accepted_count": 0,
|
||
"desktop_mobile_smoke_accepted_count": 0,
|
||
"existing_source_ref_count": 20,
|
||
"frontend_env_diff_accepted_count": 0,
|
||
"i18n_redaction_review_accepted_count": 0,
|
||
"outcome_lane_count": 8,
|
||
"postcheck_evidence_accepted_count": 0,
|
||
"public_admin_api_runtime_config_coverage_percent_after_acceptance": 64,
|
||
"public_admin_api_runtime_config_coverage_percent_before_acceptance": 62,
|
||
"required_evidence_field_count": 21,
|
||
"reviewer_check_count": 21,
|
||
"route_scope_accepted_count": 0,
|
||
"runtime_approval_package_ready_count": 0,
|
||
"runtime_gate_count": 0,
|
||
"sensitive_string_scan_accepted_count": 0,
|
||
"source_ref_count": 20,
|
||
"webhook_callback_owner_accepted_count": 0,
|
||
"write_capable_candidate_count": 6
|
||
}
|
||
}
|