diff --git a/instructions/wordpress.instructions.md b/instructions/wordpress.instructions.md
index 2c08bbd48..5ab7d447f 100644
--- a/instructions/wordpress.instructions.md
+++ b/instructions/wordpress.instructions.md
@@ -38,8 +38,8 @@ defined('ABSPATH') || exit;
### Linting setup suggestions
```xml
-
+
WordPress Coding Standards for this project.
./
@@ -53,8 +53,9 @@ defined('ABSPATH') || exit;
```
+`composer.json` (snippet):
+
```json
-// composer.json (snippet)
{
"require-dev": {
"dealerdirect/phpcodesniffer-composer-installer": "^1.0",
@@ -68,8 +69,9 @@ defined('ABSPATH') || exit;
}
```
+`package.json` (snippet):
+
```json
-// package.json (snippet)
{
"devDependencies": {
"@wordpress/eslint-plugin": "^x.y.z"
@@ -93,8 +95,8 @@ defined('ABSPATH') || exit;
## 4) Internationalization (i18n)
- Wrap user‑visible strings with translation functions using your text domain:
- `__( 'Text', 'awesome-feature' )`, `_x()`, `esc_html__()`.
-- Load translations with `load_plugin_textdomain()` or `load_theme_textdomain()`.
-- Keep a `.pot` in `/languages` and ensure consistent domain usage.
+- For WordPress.org plugins, rely on WordPress automatic translation loading since WordPress 4.6. If older WordPress support requires `load_plugin_textdomain()`, call it on `init`.
+- Keep a `.pot` in `/languages` and ensure consistent domain usage. Do not ship development or compiled translation artifacts such as `.po`, `.mo`, `.l10n.php`, or compiled `.json` files unless a specific WordPress.org requirement calls for them.
## 5) Performance
- Defer heavy logic to specific hooks; avoid expensive work on `init`/`wp_loaded` unless necessary.
@@ -175,7 +177,50 @@ require $_tests_dir . '/includes/bootstrap.php';
- Keep `README.md` up to date: install, usage, capabilities, hooks/filters, and test instructions.
- Use clear, imperative commit messages; reference issues/tickets and summarize impact.
-## 12) What Copilot Must Ensure (Checklist)
+
+
+## 12) WordPress.org Directory Review
+
+- Prefix every global symbol and persistent identifier with a distinctive plugin prefix of at least four characters: functions, classes, interfaces, traits, constants, namespaces, options, transients, metadata, hooks, shortcodes, cron events, script/style handles, and localized JavaScript object names. Do not use `wp_`, `_`, `__`, or generic prefixes such as `ai`, `seo`, `wc`, or `woo`. Do not use `function_exists()` or `class_exists()` guards to hide naming collisions; reserve them for genuinely shared libraries. Migrate renamed option keys so existing installations retain their settings.
+- Define the main plugin file, directory, and URL from `__FILE__` in prefixed constants; keep the version in the plugin header and expose it through a prefixed constant if needed. Do not use `WP_PLUGIN_DIR`, `WP_CONTENT_DIR`, `WP_CONTENT_URL`, `WPMU_PLUGIN_DIR`, or hard-coded paths to locate plugin files. Resolve upload storage at runtime with `wp_upload_dir()`.
+- Store data in the database or media library where appropriate. If filesystem storage is necessary, write only under a plugin-specific directory within the runtime uploads directory, protect non-public files, sanitize user-provided basenames with `sanitize_file_name( basename( $path ) )`, and use `WP_Filesystem`. Never write to the plugin, theme, core, or another plugin's directory, or to an arbitrary user-supplied path.
+- Ship only production files in the distribution archive. Exclude development tooling, `node_modules`, tests, demos, caches, CI metadata, release scripts, and compiled translations with `.distignore` or the 10up ignore list. Build with `wp dist-archive` from a clean, preferably `--no-dev`, dependency tree and inspect the resulting ZIP rather than the working tree.
+- Keep bundled third-party libraries on current stable releases and verify the versions included in the shipped archive. Do not ship obfuscated or minified-only code when readable source is required for review.
+- Do not bundle a self-update checker or contact an external update endpoint in a WordPress.org-hosted plugin. Remove `Update URI` values that point outside WordPress.org and rely on the directory updater.
+- Every `register_setting()` call must specify a `sanitize_callback`. Use a dedicated callback for arrays and nested values; scalar sanitizers are not sufficient for structured options.
+- In `readme.txt`, make `Contributors:` a case-sensitive, comma-separated list of real WordPress.org usernames and include the account that owns the plugin slug.
+- Do not use raw `