ai-review-config.json
Rama trunk · réplica de lectura del repositorio original.
{
"personas": {
"general": {
"enabled": false
},
"qa": {
"enabled": false
},
"security": {
"file": ".ai/review/personas/security.md",
"engine": "codex",
"model": "gpt-6-astra",
"triggers": [
"**/*.php",
"**/*.js",
"**/*.jsx",
"**/*.ts",
"**/*.tsx",
"**/*.mjs",
"**/*.cjs",
"**/*.html",
"**/.github/workflows/**",
"**/.github/actions/**",
"**/composer.json",
"**/package.json"
]
},
"regression": {
"file": ".ai/review/personas/regression.md",
"engine": "claude",
"model": "claude-opus-4-8",
"triggers": [
"**/*.php"
],
"severity_threshold": "medium"
},
"performance": {
"file": ".ai/review/personas/performance.md",
"engine": "claude",
"model": "claude-opus-4-8",
"triggers": [
"**/*.php"
],
"severity_threshold": "medium",
"gate": {
"signals": [
"$wpdb",
"wp_query",
"get_posts(",
"_prime_",
"get_option(",
"wp_prime_option_caches",
"wc_get_product(",
"wc_get_products(",
"wc_get_order(",
"wc_get_orders(",
"get_post(",
" join ",
"meta_query",
"tax_query",
"group by",
"order by",
"select ",
"transient",
"wp_cache_",
"lookup",
"prime_image_caches",
"update_meta_cache",
"update_post_caches",
"get_children",
"'fields'",
"get_available_variations",
"wp_count_posts",
"glob(",
"scandir",
"file_exists",
"->debug(",
"woocommerce_init",
"plugins_loaded",
"::instance(",
"get_emails",
"wc()->mailer",
"term_relationships",
"meta_key",
"union",
"get_results",
"wp_remote_",
"wp_safe_remote",
"_in_seconds",
"helper_api"
],
"always_paths": [],
"signal_types": [
"php",
"phtml",
"inc",
"md",
"markdown",
"txt",
"rst",
"adoc",
"json",
"yml",
"yaml",
"xml",
"toml",
"ini",
"csv",
"css",
"scss",
"less",
"sass",
"styl",
"svg",
"png",
"jpg",
"jpeg",
"gif",
"ico",
"webp",
"woff",
"woff2",
"ttf",
"eot",
"map",
"lock",
"po",
"mo",
"pot",
"snap",
"js",
"jsx",
"ts",
"tsx",
"mjs",
"cjs"
]
}
},
"frontend": {
"file": ".ai/review/personas/frontend.md",
"engine": "claude",
"model": "claude-opus-4-8",
"triggers": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.jsx",
"**/*.scss",
"**/*.css",
"**/block.json"
],
"severity_threshold": "medium"
}
},
"exclude": [
"plugins/*/changelog/*",
"plugins/woocommerce/client/blocks/changelog/*",
"packages/js/*/changelog/*",
"packages/php/*/changelog/*"
],
"guidelines": [
{
"name": "hook-payload-contract",
"file": ".ai/review/guidelines/hook-payload-contract.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php",
"plugins/woocommerce/templates/**/*.php",
"plugins/woocommerce/uninstall.php",
"plugins/woocommerce/woocommerce.php"
],
"signals": [
"apply_filters",
"do_action",
"apply_filters_ref_array",
"do_action_ref_array",
"apply_filters_deprecated"
],
"personas": [
"regression"
]
},
{
"name": "hook-firing-scope",
"file": ".ai/review/guidelines/hook-firing-scope.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php",
"plugins/woocommerce/templates/**/*.php",
"plugins/woocommerce/uninstall.php",
"plugins/woocommerce/woocommerce.php"
],
"signals": [
"do_action",
"add_action",
"add_filter",
"remove_action",
"remove_filter",
"is_admin",
"did_action",
"doing_action",
"clean_post_cache",
"wp_set_object_terms",
"data_store->",
"get_data_store",
"->delete_items",
"WC_Data_Store::load",
"has_filter",
"has_action"
],
"personas": [
"regression"
]
},
{
"name": "hook-callback-reentrancy",
"file": ".ai/review/guidelines/hook-callback-reentrancy.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php",
"plugins/woocommerce/templates/**/*.php",
"plugins/woocommerce/woocommerce.php"
],
"signals": [
"add_filter",
"add_action"
],
"personas": [
"regression"
]
},
{
"name": "php-loose-type-juggling",
"file": ".ai/review/guidelines/php-loose-type-juggling.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php",
"plugins/woocommerce/templates/**/*.php",
"plugins/woocommerce/uninstall.php",
"plugins/woocommerce/woocommerce.php"
],
"signals": [
"strict_types",
": string",
": int",
"?string",
"get_post_stati",
"wp_count_posts",
"array_keys",
"wp_cache_get",
"is_numeric",
"(float)",
"floatval",
"intval",
"absint",
"wc_get_price_decimals",
"price_decimals",
"wc_format_decimal",
"per_page",
"array_sum"
],
"personas": [
"regression"
]
},
{
"name": "public-php-api-bc",
"file": ".ai/review/guidelines/public-php-api-bc.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php"
],
"signals": [
"interface ",
"abstract ",
"implements ",
"extends ",
"public function",
"protected function",
"public static function",
"function wc_",
"function woocommerce_",
"wc_deprecated_function",
"_deprecated_",
"final "
],
"personas": [
"regression"
]
},
{
"name": "upgrade-time-class-load",
"file": ".ai/review/guidelines/upgrade-time-class-load.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php",
"plugins/woocommerce/templates/**/*.php",
"plugins/woocommerce/uninstall.php",
"plugins/woocommerce/woocommerce.php",
"plugins/woocommerce/src/Autoloader.php"
],
"signals": [
"Enums\\",
"enum ",
"use Automattic\\WooCommerce",
"class_exists",
"require_once",
"include_once",
"register_routes",
"rest_api_init",
"admin_print_footer_scripts",
"Autoloader"
],
"personas": [
"regression"
]
},
{
"name": "action-scheduler-lifecycle",
"file": ".ai/review/guidelines/action-scheduler-lifecycle.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php",
"plugins/woocommerce/templates/**/*.php",
"plugins/woocommerce/uninstall.php",
"plugins/woocommerce/woocommerce.php"
],
"signals": [
"as_schedule_",
"as_enqueue_async_action",
"as_has_scheduled_action",
"as_next_scheduled_action",
"as_unschedule",
"as_get_scheduled_actions",
"action_scheduler_",
"ActionScheduler",
"wp_schedule_event",
"wp_schedule_single_event",
"wp_clear_scheduled_hook",
"wp_next_scheduled",
"register_recurring_actions"
],
"personas": [
"regression"
]
},
{
"name": "request-input-validation",
"file": ".ai/review/guidelines/request-input-validation.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php",
"plugins/woocommerce/templates/**/*.php",
"plugins/woocommerce/uninstall.php",
"plugins/woocommerce/woocommerce.php"
],
"signals": [
"$_GET",
"$_POST",
"$_REQUEST",
"$_COOKIE",
"get_query_var",
"get_param(",
"wc_clean",
"urldecode",
"validate_callback",
"rest_validate",
"preg_match",
"is_numeric",
"ctype_digit",
"filter_var",
"wc_format_postcode",
"is_postcode",
"postcode",
"validate_",
"$_get",
"$_post"
],
"personas": [
"regression"
]
},
{
"name": "missing-object-deref",
"file": ".ai/review/guidelines/missing-object-deref.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php",
"plugins/woocommerce/templates/**/*.php",
"plugins/woocommerce/uninstall.php",
"plugins/woocommerce/woocommerce.php"
],
"signals": [
"wc_get_product(",
"wc_get_order(",
"wc_get_product_object",
"get_post(",
"get_term(",
"get_term_by",
"get_parent_id",
"->get_product(",
"get_queried_object",
"WC_Email",
"get_emails",
"template_html",
"woocommerce_email_classes",
"get_variation_attributes",
"get_attribute_taxonomies",
"get_country_locale",
"get_address_fields",
"return array();",
"return [];",
"?? null"
],
"personas": [
"regression"
]
},
{
"name": "meta-option-value-semantics",
"file": ".ai/review/guidelines/meta-option-value-semantics.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php",
"plugins/woocommerce/templates/**/*.php",
"plugins/woocommerce/uninstall.php",
"plugins/woocommerce/woocommerce.php"
],
"signals": [
"get_post_meta",
"update_post_meta",
"delete_post_meta",
"add_post_meta",
"get_meta(",
"update_meta_data",
"delete_meta_data",
"get_option(",
"update_option(",
"delete_option",
"get_transient",
"set_transient",
"maybe_unserialize",
"_thumbnail_id",
"get_user_meta",
"update_user_meta"
],
"personas": [
"regression"
]
},
{
"name": "hpos-sync-on-read",
"file": ".ai/review/guidelines/hpos-sync-on-read.md",
"path": [
"plugins/woocommerce/src/Internal/DataStores/Orders/**/*.php",
"plugins/woocommerce/includes/data-stores/class-wc-order-data-store-cpt.php",
"plugins/woocommerce/includes/data-stores/abstract-wc-order-data-store-cpt.php",
"plugins/woocommerce/includes/class-wc-post-data.php",
"plugins/woocommerce/src/Internal/Utilities/COTMigrationUtil.php",
"plugins/woocommerce/src/Database/Migrations/**/*.php"
],
"personas": [
"regression"
]
},
{
"name": "order-storage-access",
"file": ".ai/review/guidelines/order-storage-access.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php",
"plugins/woocommerce/templates/**/*.php"
],
"signals": [
"wp_count_posts",
"get_posts(",
"WP_Query",
"get_post(",
"get_post_status",
"get_post_meta",
"update_post_meta",
"delete_post_meta",
"$wpdb->posts",
"$wpdb->postmeta",
"shop_order",
"post_status",
"post_parent",
"'post_date",
"'post_modified",
"'post_type'",
"'orders."
],
"personas": [
"regression"
]
},
{
"name": "payment-callbacks",
"file": ".ai/review/guidelines/payment-callbacks.md",
"path": [
"plugins/woocommerce/includes/gateways/**/*.php",
"plugins/woocommerce/src/Gateways/**/*.php",
"plugins/woocommerce/includes/rest-api/Controllers/Version3/class-wc-rest-paypal-*.php"
],
"personas": [
"security",
"regression"
]
},
{
"name": "migration-upgrade-state",
"file": ".ai/review/guidelines/migration-upgrade-state.md",
"path": [
"plugins/woocommerce/includes/class-wc-install.php",
"plugins/woocommerce/includes/wc-update-functions.php",
"plugins/woocommerce/src/Database/**/*.php",
"plugins/woocommerce/src/Internal/Admin/Schedulers/**/*.php",
"plugins/woocommerce/src/Internal/DataStores/**/*.php",
"plugins/woocommerce/uninstall.php",
"plugins/woocommerce/includes/class-wc-background-updater.php"
],
"signals": [
"wc_update_",
"db_updates",
"dbDelta",
"get_schema",
"PRIMARY KEY",
"ALTER TABLE",
"CREATE TABLE",
"DROP ",
"update_db_version",
"woocommerce_db_version",
"migrat",
"KEY ",
"UNIQUE",
"primary key",
"alter table",
"create table",
"drop ",
"key ",
"unique"
],
"personas": [
"regression"
]
},
{
"name": "proxy-predicate-inference",
"file": ".ai/review/guidelines/proxy-predicate-inference.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php"
],
"signals": [
"needs_shipping",
"get_shipping_methods",
"has_shipping_address",
"get_shipping_address",
"get_billing_address",
"ship_to_different_address",
"get_customer_id",
"created_via",
"is_guest",
"get_items( 'shipping'",
"get_billing_",
"get_shipping_",
"has_status",
"is_virtual",
"get_formatted_shipping"
],
"personas": [
"regression"
]
},
{
"name": "wc-query-shop-front-page",
"file": ".ai/review/guidelines/wc-query-shop-front-page.md",
"path": [
"plugins/woocommerce/includes/class-wc-query.php",
"plugins/woocommerce/includes/class-wc-template-loader.php",
"plugins/woocommerce/includes/class-wc-post-types.php",
"plugins/woocommerce/includes/wc-page-functions.php",
"plugins/woocommerce/src/Blocks/Templates/**/*.php",
"plugins/woocommerce/src/Internal/ComingSoon/**/*.php"
],
"personas": [
"regression"
]
},
{
"name": "request-lifecycle-state",
"file": ".ai/review/guidelines/request-lifecycle-state.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php",
"plugins/woocommerce/templates/**/*.php",
"plugins/woocommerce/uninstall.php",
"plugins/woocommerce/woocommerce.php"
],
"signals": [
"woocommerce_init",
"plugins_loaded",
"woocommerce_loaded",
"after_setup_theme",
"'init'",
"did_action",
"::instance(",
"wp_loaded",
"load_plugin_textdomain",
"remove_filter",
"$GLOBALS",
"finally",
"switch_to_",
"restore_",
"wp_reset_postdata",
"render_block",
"$globals"
],
"personas": [
"regression"
]
},
{
"name": "template-and-js-default",
"file": ".ai/review/guidelines/template-and-js-default.md",
"path": [
"plugins/woocommerce/templates/**/*.php",
"plugins/woocommerce/includes/wc-template-functions.php",
"plugins/woocommerce/includes/wc-template-hooks.php",
"plugins/woocommerce/src/Blocks/BlockTypes/**/*.php"
],
"signals": [
"@version",
"disabled",
"display:none",
"display: none",
"hidden",
"wp_script_is",
"do_action",
"apply_filters",
"wc_get_template",
"aria-disabled",
"remove_action"
],
"personas": [
"regression"
]
},
{
"name": "rest-response-contract",
"file": ".ai/review/guidelines/rest-response-contract.md",
"path": [
"plugins/woocommerce/src/StoreApi/**/*.php",
"plugins/woocommerce/includes/rest-api/**/*.php",
"plugins/woocommerce/src/Admin/API/**/*.php",
"plugins/woocommerce/src/Internal/RestApi/**/*.php",
"plugins/woocommerce/includes/class-wc-rest-*.php",
"plugins/woocommerce/includes/wc-rest-functions.php"
],
"signals": [
"get_item_schema",
"prepare_item_for_response",
"get_schema",
"'properties'",
"'type'",
"'context'",
"html_entity_decode",
"wp_specialchars_decode",
"prepare_html_response",
"rest_ensure_response",
"IDENTIFIER",
"get_extended_data",
"->data[",
"wc_rest_prepare_date_response",
"'items'",
"identifier"
],
"personas": [
"regression"
]
},
{
"name": "session-cart-persistence",
"file": ".ai/review/guidelines/session-cart-persistence.md",
"path": [
"plugins/woocommerce/includes/class-wc-session-handler.php",
"plugins/woocommerce/includes/abstracts/abstract-wc-session.php",
"plugins/woocommerce/includes/class-wc-cart-session.php",
"plugins/woocommerce/includes/class-wc-cart.php",
"plugins/woocommerce/includes/class-wc-customer.php",
"plugins/woocommerce/includes/data-stores/class-wc-customer-data-store-session.php",
"plugins/woocommerce/src/StoreApi/**/*.php",
"plugins/woocommerce/includes/wc-user-functions.php",
"plugins/woocommerce/includes/class-wc-form-handler.php",
"plugins/woocommerce/src/Blocks/**/Cart*.php"
],
"signals": [
"session",
"cart_token",
"Cart-Token",
"persistent_cart",
"_woocommerce_persistent_cart",
"wp_logout",
"wp_login",
"set_customer_session_cookie",
"init_session_cookie",
"get_session_data",
"load_cart",
"get_cart_from_session",
"wc_load_cart",
"CartTokenUtils",
"customer_id",
"set_current_user"
],
"personas": [
"regression"
]
},
{
"name": "check-then-write-race",
"file": ".ai/review/guidelines/check-then-write-race.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php"
],
"signals": [
"ReserveStock",
"reserve_stock",
"wc_reserve_stock",
"hold_stock",
"wc_reduce_stock",
"increase_usage_count",
"usage_count",
"GET_LOCK",
"FOR UPDATE",
"START TRANSACTION",
"INSERT",
"add_post_meta",
"add_meta_data",
"$wpdb->insert",
"wc_update_product_stock",
"update_stock",
"release_held",
"get_lock",
"for update",
"start transaction"
],
"personas": [
"regression"
]
},
{
"name": "order-totals-recalc",
"file": ".ai/review/guidelines/order-totals-recalc.md",
"path": [
"plugins/woocommerce/includes/abstracts/abstract-wc-order.php",
"plugins/woocommerce/includes/class-wc-order*.php",
"plugins/woocommerce/includes/class-wc-cart*.php",
"plugins/woocommerce/includes/class-wc-discounts.php",
"plugins/woocommerce/includes/class-wc-tax.php",
"plugins/woocommerce/includes/class-wc-coupon.php",
"plugins/woocommerce/includes/wc-coupon-functions.php",
"plugins/woocommerce/includes/wc-order-functions.php",
"plugins/woocommerce/includes/admin/meta-boxes/**/*.php",
"plugins/woocommerce/includes/class-wc-ajax.php",
"plugins/woocommerce/src/StoreApi/Utilities/*.php"
],
"signals": [
"calculate_",
"recalculate_coupons",
"set_total",
"get_total",
"wc_round_tax_total",
"is_vat_exempt",
"prices_include_tax",
"number_precision",
"get_subtotal",
"apply_coupon",
"discount",
"adjust_non_base_location_prices",
"round(",
"get_fees",
"fee",
"tax_class",
"get_taxes"
],
"personas": [
"regression"
]
},
{
"name": "shipping-rate-pipeline",
"file": ".ai/review/guidelines/shipping-rate-pipeline.md",
"path": [
"plugins/woocommerce/includes/class-wc-shipping*.php",
"plugins/woocommerce/includes/shipping/**/*.php",
"plugins/woocommerce/includes/abstracts/abstract-wc-shipping-method.php",
"plugins/woocommerce/includes/class-wc-cart.php",
"plugins/woocommerce/includes/class-wc-cart-totals.php",
"plugins/woocommerce/includes/class-wc-checkout.php",
"plugins/woocommerce/src/Blocks/Shipping/**/*.php",
"plugins/woocommerce/src/StoreApi/**/*.php",
"plugins/woocommerce/includes/wc-cart-functions.php"
],
"signals": [
"woocommerce_package_rates",
"add_rate",
"WC_Shipping_Rate",
"needs_shipping",
"calculate_shipping",
"get_packages",
"price_decimals",
"local_pickup",
"free_shipping",
"woocommerce_shipping_method_add_rate_args",
"shipping_rates",
"chosen_shipping_methods",
"show_shipping",
"get_rates",
"package",
"shipping_method",
"rates"
],
"personas": [
"regression"
]
},
{
"name": "sql-clause-filter-contract",
"file": ".ai/review/guidelines/sql-clause-filter-contract.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php"
],
"signals": [
"posts_clauses",
"posts_join",
"posts_where",
"posts_orderby",
"woocommerce_admin_report_columns",
"pre_get_posts",
"append_product_sorting_table_join",
"woocommerce_get_catalog_ordering_args",
"ORDER BY",
"GROUP BY",
"report_columns",
"'join'",
"'where'",
"wc_product_meta_lookup",
"query_vars",
"order by",
"group by"
],
"personas": [
"regression"
]
},
{
"name": "cache-invalidation-and-poisoning",
"file": ".ai/review/guidelines/cache-invalidation-and-poisoning.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php",
"plugins/woocommerce/templates/**/*.php",
"plugins/woocommerce/uninstall.php",
"plugins/woocommerce/woocommerce.php"
],
"signals": [
"wp_cache_get",
"wp_cache_set",
"wp_cache_delete",
"wp_cache_flush",
"get_transient",
"set_transient",
"delete_transient",
"WC_Cache_Helper",
"get_cache_prefix",
"invalidate_cache_group",
"CacheNameSpaceTrait",
"ObjectCache",
"cache_key",
"clean_post_cache",
"incr_cache_prefix",
"wp_cache_add"
],
"personas": [
"regression"
]
},
{
"name": "perf-refactor-semantic-drift",
"file": ".ai/review/guidelines/perf-refactor-semantic-drift.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php"
],
"signals": [
"_prime_post_caches",
"prime_",
"wp_prime_option_caches",
"update_meta_cache",
"'fields'",
"wc_product_meta_lookup",
"lookup_table",
"LIMIT 1",
"get_children",
"get_transient",
"set_transient",
"array_slice",
"no_found_rows",
"wp_cache_get",
"limit 1"
],
"personas": [
"regression"
]
},
{
"name": "fix-and-test-verification",
"file": ".ai/review/guidelines/fix-and-test-verification.md",
"personas": [
"regression"
]
},
{
"name": "perf-sql-query-shape",
"file": ".ai/review/guidelines/perf-sql-query-shape.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php"
],
"signals": [
"$wpdb->",
"JOIN",
"term_relationships",
"term_taxonomy_id",
"wc_product_meta_lookup",
"wc_product_attributes_lookup",
"meta_key",
"meta_value",
"GROUP BY",
"SELECT MIN",
"SELECT MAX",
"UNION",
"->posts",
"->postmeta",
"woocommerce_attribute_lookup_enabled",
"product_lookup_table_is_generating",
"get_results",
"get_col",
"join",
"group by"
],
"personas": [
"performance"
]
},
{
"name": "perf-cache-option-priming",
"file": ".ai/review/guidelines/perf-cache-option-priming.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php",
"plugins/woocommerce/templates/**/*.php",
"plugins/woocommerce/uninstall.php",
"plugins/woocommerce/woocommerce.php"
],
"signals": [
"_prime_post_caches",
"prime_image_caches",
"prime_",
"update_post_caches",
"update_meta_cache",
"wp_prime_option_caches",
"wp_using_ext_object_cache",
"get_option(",
"wc_get_product(",
"wc_get_order(",
"get_post(",
"get_posts(",
"wc_get_products",
"get_children",
"'fields'",
"update_post_meta_cache",
"get_image_id",
"wp_get_attachment"
],
"personas": [
"performance"
]
},
{
"name": "perf-hot-path-eager-work",
"file": ".ai/review/guidelines/perf-hot-path-eager-work.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php",
"plugins/woocommerce/templates/**/*.php",
"plugins/woocommerce/uninstall.php",
"plugins/woocommerce/woocommerce.php"
],
"signals": [
"woocommerce_init",
"'init'",
"plugins_loaded",
"wp_loaded",
"::instance(",
"get_emails",
"WC()->mailer",
"glob(",
"file_exists",
"scandir",
"->debug(",
"get_available_variations",
"get_children",
"wp_count_posts",
"WP_Query",
"wc_get_products",
"get_posts("
],
"personas": [
"performance"
]
},
{
"name": "perf-blocking-remote-call",
"file": ".ai/review/guidelines/perf-blocking-remote-call.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php"
],
"signals": [
"wp_remote_",
"wp_safe_remote_",
"WC_Helper_API",
"set_transient",
"set_site_transient",
"HOUR_IN_SECONDS",
"DAY_IN_SECONDS",
"WEEK_IN_SECONDS",
"MONTH_IN_SECONDS",
"'blocking'",
"'timeout'",
"admin_menu",
"admin_notices"
],
"personas": [
"performance"
]
},
{
"name": "script-handle-loading-contract",
"file": ".ai/review/guidelines/script-handle-loading-contract.md",
"path": [
"plugins/woocommerce/src/Blocks/AssetsController.php",
"plugins/woocommerce/src/Blocks/Assets/**/*.php",
"plugins/woocommerce/src/Blocks/BlockTypes/**/*.php",
"plugins/woocommerce/includes/class-wc-frontend-scripts.php",
"plugins/woocommerce/includes/admin/class-wc-admin-assets.php",
"plugins/woocommerce/src/Admin/**/*.php",
"plugins/woocommerce/src/Internal/**/*.php",
"plugins/woocommerce/includes/**/*.php"
],
"signals": [
"wp_register_script",
"wp_enqueue_script",
"wp_register_style",
"wp_enqueue_style",
"register_script",
"register_style",
"'strategy'",
"'defer'",
"in_footer",
"wp_script_is",
"wp_style_is",
"wp_add_inline_script",
"wp_is_block_theme",
"current_theme_supports",
"wc_current_theme_is_fse_theme",
"dependencies",
"wp_deregister_script",
"wp_dequeue_"
],
"personas": [
"frontend",
"regression"
]
},
{
"name": "classic-jquery-contract",
"file": ".ai/review/guidelines/classic-jquery-contract.md",
"path": [
"plugins/woocommerce/client/legacy/js/**/*.js"
],
"signals": [
"$.ajax(",
"$.post(",
"$.get(",
"$.param",
"serialize",
"document.body",
"trigger(",
"triggerHandler",
".on(",
"data:",
"wc_checkout_params",
"wc_cart_params",
"encodeURIComponent",
"processData",
"update_checkout",
"updated_wc_div",
"added_to_cart"
],
"personas": [
"frontend"
]
},
{
"name": "js-public-api-contract",
"file": ".ai/review/guidelines/js-public-api-contract.md",
"path": [
"packages/js/**/*.js",
"packages/js/**/*.jsx",
"packages/js/**/*.ts",
"packages/js/**/*.tsx",
"plugins/woocommerce/client/blocks/packages/**/*.ts",
"plugins/woocommerce/client/blocks/packages/**/*.tsx",
"plugins/woocommerce/client/blocks/assets/js/settings/**/*.ts",
"plugins/woocommerce/client/admin/client/**/*.tsx",
"plugins/woocommerce/src/Blocks/Assets/AssetDataRegistry.php",
"plugins/woocommerce/src/Internal/Admin/Settings.php"
],
"signals": [
") =>",
"export ",
"export default",
"createElement",
"Fragment",
"registerStore",
"createReduxStore",
"register(",
"PropTypes",
"getSetting",
"getAdminSetting",
"wcSettings",
"getSettingWithCoercion",
"window.wc",
"->add(",
"defaultProps",
"deprecated("
],
"personas": [
"frontend",
"regression"
]
},
{
"name": "checkout-extensibility-payload",
"file": ".ai/review/guidelines/checkout-extensibility-payload.md",
"path": [
"plugins/woocommerce/client/blocks/assets/js/**/*.js",
"plugins/woocommerce/client/blocks/assets/js/**/*.jsx",
"plugins/woocommerce/client/blocks/assets/js/**/*.ts",
"plugins/woocommerce/client/blocks/assets/js/**/*.tsx",
"plugins/woocommerce/client/blocks/packages/public-api/blocks-checkout/**/*.js",
"plugins/woocommerce/client/blocks/packages/public-api/blocks-checkout/**/*.jsx",
"plugins/woocommerce/client/blocks/packages/public-api/blocks-checkout/**/*.ts",
"plugins/woocommerce/client/blocks/packages/public-api/blocks-checkout/**/*.tsx",
"plugins/woocommerce/src/Blocks/Domain/Services/CheckoutFields*.php",
"plugins/woocommerce/src/Blocks/Payments/**/*.php"
],
"signals": [
"registerCheckoutFilters",
"applyCheckoutFilter",
"registerPaymentMethod",
"registerExpressPaymentMethod",
"typeof",
"extensions",
"additional_fields",
"additionalFields",
"isVisible",
"hidden",
"required",
"canMakePayment",
"validation",
"__experimental",
"registerCheckoutBlock",
"CheckoutFields"
],
"personas": [
"frontend",
"regression"
]
},
{
"name": "css-layout-regression",
"file": ".ai/review/guidelines/css-layout-regression.md",
"path": [
"plugins/woocommerce/client/**/*.scss",
"plugins/woocommerce/client/**/*.css",
"packages/js/**/*.scss",
"plugins/woocommerce/client/legacy/css/**/*.scss",
"plugins/woocommerce/client/legacy/css/**/*.scss"
],
"personas": [
"frontend"
]
},
{
"name": "js-request-failure-handling",
"file": ".ai/review/guidelines/js-request-failure-handling.md",
"path": [
"plugins/woocommerce/client/**/*.js",
"plugins/woocommerce/client/**/*.jsx",
"plugins/woocommerce/client/**/*.ts",
"plugins/woocommerce/client/**/*.tsx",
"packages/js/**/*.js",
"packages/js/**/*.jsx",
"packages/js/**/*.ts",
"packages/js/**/*.tsx"
],
"signals": [
"apiFetch",
"fetch(",
".then(",
".catch(",
"await ",
"localStorage",
"sessionStorage",
"triggerFetch",
"AbortController",
"sendBeacon",
"navigator.",
"store(",
"getContext",
"async ",
"Promise"
],
"personas": [
"frontend"
]
},
{
"name": "react-render-and-keyboard",
"file": ".ai/review/guidelines/react-render-and-keyboard.md",
"path": [
"plugins/woocommerce/client/**/*.jsx",
"plugins/woocommerce/client/**/*.tsx",
"packages/js/**/*.jsx",
"packages/js/**/*.tsx"
],
"signals": [
"key=",
"key:",
"useEffect",
"useMemo",
"useCallback",
"useSelect",
"createSlotFill",
"onKeyDown",
"onKeyPress",
"keydown",
"'Enter'",
"preventDefault",
"tabIndex",
"role=",
"focus(",
"aria-"
],
"personas": [
"frontend"
]
},
{
"name": "i18n-string-identity",
"file": ".ai/review/guidelines/i18n-string-identity.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php",
"plugins/woocommerce/templates/**/*.php",
"plugins/woocommerce/uninstall.php",
"plugins/woocommerce/woocommerce.php",
"plugins/woocommerce/client/**/*.js",
"plugins/woocommerce/client/**/*.jsx",
"plugins/woocommerce/client/**/*.ts",
"plugins/woocommerce/client/**/*.tsx",
"packages/js/**/*.js",
"packages/js/**/*.jsx",
"packages/js/**/*.ts",
"packages/js/**/*.tsx",
"plugins/woocommerce/patterns/**/*.php"
],
"signals": [
"_x(",
"_n(",
"_nx(",
"_n_noop",
"translators:",
"wp_set_script_translations",
"load_plugin_textdomain",
"load_textdomain",
"msgid",
"createInterpolateElement",
"__(",
"esc_html__("
],
"personas": [
"frontend",
"regression"
]
},
{
"name": "sec-sql-prepare-and-identifiers",
"file": ".ai/review/guidelines/sec-sql-prepare-and-identifiers.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php"
],
"signals": [
"$wpdb->",
"prepare(",
"esc_sql",
"ORDER BY",
"orderby",
"order_by",
" IN (",
"get_var",
"get_col",
"->query(",
"%i",
"sanitize_sql_orderby",
"date_type",
"$_GET",
"$_REQUEST",
"get_param(",
"order by",
" in (",
"$_get",
"$_request"
],
"personas": [
"security"
]
},
{
"name": "sec-rest-and-ajax-permissions",
"file": ".ai/review/guidelines/sec-rest-and-ajax-permissions.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php"
],
"signals": [
"permission_callback",
"current_user_can",
"user_can",
"permissions_check",
"__return_true",
"register_rest_route",
"wc_rest_check_",
"manage_woocommerce",
"edit_shop_orders",
"wp_ajax_",
"wp_ajax_nopriv_",
"check_ajax_referer",
"wp_verify_nonce",
"check_admin_referer",
"map_meta_cap",
"is_user_logged_in"
],
"personas": [
"security"
]
},
{
"name": "sec-order-cart-ownership",
"file": ".ai/review/guidelines/sec-order-cart-ownership.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php",
"plugins/woocommerce/templates/**/*.php"
],
"signals": [
"order_key",
"get_order_key",
"key_is_valid",
"hash_equals",
"get_customer_id",
"get_current_user_id",
"cart_token",
"Cart-Token",
"billing_email",
"post_password",
"post_password_required",
"view_order",
"pay_for_order",
"get_error_message",
"is_customer",
"guest",
"Order_Pay",
"wc_customer_bought_product"
],
"personas": [
"security"
]
},
{
"name": "sec-sanitize-and-escape",
"file": ".ai/review/guidelines/sec-sanitize-and-escape.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php",
"plugins/woocommerce/templates/**/*.php",
"plugins/woocommerce/uninstall.php",
"plugins/woocommerce/woocommerce.php",
"plugins/woocommerce/client/**/*.js",
"plugins/woocommerce/client/**/*.jsx",
"plugins/woocommerce/client/**/*.ts",
"plugins/woocommerce/client/**/*.tsx"
],
"signals": [
"esc_html",
"esc_attr",
"esc_url",
"esc_js",
"wp_kses",
"dangerouslySetInnerHTML",
"decodeEntities",
"innerHTML",
"RawHTML",
"sanitize_",
"wc_clean",
"wp_unslash",
"sanitize_callback",
"wc_sanitize_",
"wp_strip_all_tags",
"html_entity_decode",
"wptexturize",
"esc_textarea"
],
"personas": [
"security"
]
},
{
"name": "sec-auth-tokens-and-cookies",
"file": ".ai/review/guidelines/sec-auth-tokens-and-cookies.md",
"path": [
"plugins/woocommerce/includes/**/*.php",
"plugins/woocommerce/src/**/*.php"
],
"signals": [
"hash_equals",
"hash_hmac",
"wp_hash",
"consumer_key",
"consumer_secret",
"setcookie",
"wc_setcookie",
"nonce",
"wc-auth",
"Authorization",
"determine_current_user",
"rest_authentication_errors",
"wp_set_current_user",
"api_key",
"password",
"session_cookie",
"COOKIE",
"cookie"
],
"personas": [
"security"
]
}
]
}