Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Wp Deploy

BSecurity

Deploy the skyyrose-flagship-2 WordPress theme ("SkyyRose Flagship 2") to staging (scripts/deploy-staging.sh) or skyyrose.co (scripts/deploy-production.sh) through the gated engine (scripts/deploy-theme.sh, never run directly). Use when a theme change is built, verified, and ready to ship, or when previewing a deploy with --dry-run. Do NOT use for editing theme code, running verify during development, MU-plugin deploys (scripts/deploy-mu-plugin.sh), WooCommerce data writes, the V1 theme wordp...

3 stars
0 votes
0 copies
1 views
Added 9/20/2026
developmentgophpbashgitapi

Works with

cliapi

Security Analysis

B75/100
criticalAccesses sensitive system or user directories

Scanned 9/20/2026

Install to Claude Code

$npx -y skills add SkyyRoseCo/DevSkyy --skill wp-deploy --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Wp Deploy?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Wp Deploy
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/skyyroseco-wp-deploy/badge)](https://www.skillsdirectory.com/skills/skyyroseco-wp-deploy)

More formats (shields.io, HTML) on the badges page.

Download with Pro
Files
SKILL.md
---
name: wp-deploy
description: Deploy the skyyrose-flagship-2 WordPress theme ("SkyyRose Flagship 2") to staging (scripts/deploy-staging.sh) or skyyrose.co (scripts/deploy-production.sh) through the gated engine (scripts/deploy-theme.sh, never run directly). Use when a theme change is built, verified, and ready to ship, or when previewing a deploy with --dry-run. Do NOT use for editing theme code, running verify during development, MU-plugin deploys (scripts/deploy-mu-plugin.sh), WooCommerce data writes, the V1 theme wordpress-theme/skyyrose-flagship (not a deploy target), or the Vercel dashboard — those have their own paths.
disable-model-invocation: true
---

# WordPress Theme Deploy

Deploy `wordpress-theme/skyyrose-flagship-2/` ("SkyyRose Flagship 2", text domain
`skyyrose-flagship-2`, `SKYYROSE2_VERSION`) to staging or the live SkyyRose site. The V1 theme
`wordpress-theme/skyyrose-flagship/` ("SkyyRose", `skyyrose`, `SKYYROSE_VERSION`) is NOT a deploy
target — `[live 2026-09-18]` skyyrose.co already serves the Flagship 2 lineage (v2.3.1, inside folder
`skyyrose-flagship`) and staging `staging-7e48-skyyrose.wpcomstaging.com` serves folder
`skyyrose-flagship-2` v2.4.4; deploying V1 would roll production back. Two wrappers, one engine:

- `bash scripts/deploy-staging.sh [--dry-run]` — env `.env.wordpress.staging`, staging host.
- `bash scripts/deploy-production.sh [--dry-run]` — env `.env.wordpress`, skyyrose.co; refuses until
  `.env.wordpress` `WP_THEME_PATH` points at the `-2` folder.
- `scripts/deploy-theme.sh` is the engine and refuses direct runs. Its preflight `check_theme_identity`
  refuses when the live theme's Name/Text Domain differs from the source. The engine does not yet
  support deploying `skyyrose-flagship-2` (PR #918's V2 deploy changes are a follow-up).
- Cutover = deploy + `wp theme activate skyyrose-flagship-2`, each its own STOP-AND-SHOW; after cutover
  production runs folder `skyyrose-flagship-2`.

The theme deploy is an
**atomic hot-swap**: production ends up with exactly what the source tree contains — anything the
source lacks gets DELETED live (bug-252: v1.10.3 shipped without its tracked signature emblem →
live 404).

## When to use

- A theme change is complete: built, lint-clean, `npm run verify` green (run in `wordpress-theme/skyyrose-flagship-2`; `verify:theme` is the V1 gate), and the founder wants it live.
- You need a deploy preview (`--dry-run`) to see the exact file manifest before asking for approval.
- Post-deploy verification of a deploy that just ran.

**When NOT to use:**

- Mid-development checks — run `npm run verify` / `npm run check:assets` in the theme folder directly, no deploy involved.
- MU-plugins — `STOPSHOW_ACK=1 bash scripts/deploy-mu-plugin.sh` is a separate, separately-gated path.
- WooCommerce REST writes, WP Media uploads, cache purges — production-touching but not theme deploys.
- Any worktree with a sparse checkout — a sparse tree is NEVER a valid deploy source (see Inputs).

## Inputs

Every item must exist before proceeding. **Absent input = STOP — never proceed with a substitute.**

1. **`.env.wordpress` (production) / `.env.wordpress.staging` (staging) at the repo root** — SFTP
   credentials (key `~/.ssh/skyyrose-deploy`, host `sftp.wp.com`); the wrapper picks the file. Observed
   2026-07-28: these files are ABSENT in worktrees `[repro]` — deploys run from the main checkout
   `/Users/theceo/DevSkyy`, not from worktrees. Absent → stop and switch to the main checkout; do not
   reconstruct credentials. `WP_THEME_PATH` in the chosen env file must end in `skyyrose-flagship-2`.
   `SSH_USER` must equal `<first label of the PUBLIC_URL host>.wordpress.com` (`SFTP_USER`, if set, must
   equal `SSH_USER`), and the engine's preflight requires `SFTP_HOST`/`SFTP_USER`/`SFTP_PASS` — the local
   `.env.wordpress.staging` lacks them `[repro 2026-09-19]`; template: `.env.wordpress.staging.example`.
2. **A COMPLETE source tree.** `preflight_completeness()` (`scripts/deploy-theme.sh`) verifies the
   version triple agrees and every **git-tracked** file exists on disk `[repo]`; `check_theme_identity`
   refuses a source whose Name/Text Domain differs from the live theme.
3. **Fresh `.min` build** — production serves `.min`; a source-only edit ships nothing.
   `cd wordpress-theme/skyyrose-flagship-2 && npm run build` before any deploy that touched CSS/JS;
   `npm run check:assets` must pass (byte-identical `.min`).
4. **Version triple bumped** when CSS/JS changed — `SKYYROSE2_VERSION` in `functions.php:10`,
   `style.css` `Version:`, `readme.txt` `Stable tag:`. It prefixes every asset `?ver=`; skipping it
   serves stale assets to returning visitors.
5. **Explicit founder approval.** This is STOP-AND-SHOW. The PreToolUse hook
   `.claude/hooks/paid-api-stopgate.sh` blocks the command — observed 2026-07-28, it blocks even
   `--dry-run` `[repro]` — until the manifest is shown, the founder answers `y`, and the call is
   re-issued with `STOPSHOW_ACK=1`.

## Procedure

1. Build minified assets: `cd wordpress-theme/skyyrose-flagship-2 && npm run build`.
2. Run the local gate: `npm run verify` + `npm run check:assets` — green (see Verification).
3. Diff what will ship: `git diff --name-only HEAD~5 -- wordpress-theme/skyyrose-flagship-2/` and
   sanity-check the version triple agrees across `functions.php` / `style.css` / `readme.txt`.
4. Preview: `bash scripts/deploy-staging.sh --dry-run` (a STOP-AND-SHOW surface itself — show
   manifest, get `y`, re-issue with `STOPSHOW_ACK=1`). Staging first, always.
5. Print the STOP-AND-SHOW manifest (target host, theme folder, file count, version before→after) and
   wait for `y` — one manifest, one `y`, one call; staging approval never carries to production.
6. Deploy — **BLOCKED until PR #918 lands: both wrappers refuse a `skyyrose-flagship-2` source, `--dry-run` included** (steps 4–6 are the contract, not a runnable path today). One-shot flags `--allow-new-theme-folder` (first deploy into a folder the site lacks) and `--allow-theme-identity-change` (replace a live theme whose Name/Text Domain differ) replace exporting `ALLOW_NEW_THEME_FOLDER` / `ALLOW_THEME_IDENTITY_CHANGE` — the wrappers refuse those if inherited. Then: `STOPSHOW_ACK=1 bash scripts/deploy-staging.sh`, verify staging, then
   `bash scripts/deploy-production.sh --dry-run` → new manifest → `y` →
   `STOPSHOW_ACK=1 bash scripts/deploy-production.sh`. Cutover activation
   (`wp theme activate skyyrose-flagship-2`) is a separate STOP-AND-SHOW.
7. Post-deploy verification (below), then Playwright eyes-on mobile + desktop.
8. **Fix everything in one batch, test all pages, deploy ONCE** — no drip-deploys.

## Verification

Every check can return "no". A gate that dies mid-run is not a gate that passed — if
`npm run verify` or the deploy script errors out, its silence is an artifact, re-run it (bug-230).
Browser/vision checks (CWV, responsive, a11y, product-fidelity) are not part of the CLI gate — the
deploying agent closes them with Playwright/vision after the deploy.

```bash
cd wordpress-theme/skyyrose-flagship-2 && npm run build && npm run verify && npm run check:assets
```
**PASS:** exit 0 on each — `verify` = php -l sweep + `jq` on `data/*.json` + font-provenance hashes;
`check:assets` = every shipped `.min` byte-identical to a fresh build. `[test]`

```bash
HOST=https://staging-7e48-skyyrose.wpcomstaging.com   # or https://skyyrose.co after the production step
curl -s -o /dev/null -w 'code=%{http_code} size=%{size_download}B\n' "$HOST/?cb=$(date +%s)"
```
**PASS:** `code=200` and size ≥ 50000B, no PHP-error markers in body. `[live]` Cache-bust is
mandatory — Batcache serves stale. NEVER WebFetch live HTML (strips `<script>`).

```bash
curl -s "$HOST/wp-content/themes/skyyrose-flagship-2/style.css?cb=$(date +%s)" | grep -m1 -E '^(Theme Name|Version|Text Domain):'
```
**PASS:** `Theme Name: SkyyRose Flagship 2`, `Text Domain: skyyrose-flagship-2`, and `Version:` equals
the `SKYYROSE2_VERSION` you just shipped. Observed 2026-09-18 `[live]`: staging folder
`skyyrose-flagship-2` → 2.4.4; production still serves the lineage from folder `skyyrose-flagship`
(2.3.1) until cutover, so before cutover probe that folder name on skyyrose.co instead. A mismatch =
the swap did not land or the edge cache is stale.

Prove the gate can fail (rule 3): once per new environment, delete one tracked theme file in a
scratch copy and run `preflight_completeness()` against it — it must go red — then restore.

## Worked example

Real invocation from this worktree, 2026-07-28:

```bash
cd /Users/theceo/DevSkyy/.claude/worktrees/glimmering-crafting-shannon/wordpress-theme
npm run verify:list
```

Observed output (excerpt) `[repro]`:

```
  php-syntax        CLI      php -l on every delivered .php — zero parse errors
  phpstan           CLI      static analysis at the configured level
  min-sync          CLI      every source css/js has a .min sibling, none stale
  cwv               BROWSER  Lighthouse LCP/CLS/TBT — runs only with --url + lighthouse CLI
  product-fidelity  VISION   garment ↔ SKU pixel match — caller/agent reads pixels vs catalog
```

Then attempting the deploy preview from this same worktree (2026-07-28, before the wrappers existed —
today the engine refuses this direct call; use `bash scripts/deploy-staging.sh --dry-run`):

```bash
bash scripts/deploy-theme.sh --dry-run
```

Observed: **blocked before execution** by `.claude/hooks/paid-api-stopgate.sh` —
`"BLOCKED — STOP-AND-SHOW required per DevSkyy CLAUDE.md … Category: WordPress deploy to
skyyrose.co (production)"` `[repro]`. That is the contract working: no deploy command runs, even
dry, without a shown manifest, a founder `y`, and `STOPSHOW_ACK=1` on the re-issued call. (This
worktree also lacks `.env.wordpress`, so the deploy itself must run from `/Users/theceo/DevSkyy`.)

## Failure modes

- **Missing rider deleted live (bug-252).** The hot-swap deletes anything the source lacks.
  `preflight_completeness()` covers git-tracked files only; untracked riders (currently the 3
  `*-v2-avatar.webp` scene files, `.gitignore:290`) pass silently. `git add -f` a rider to put it
  under the gate.
- **Fail-open override (bug-230 pattern).** `PREFLIGHT_SKIP_COMPLETENESS=1` skips the completeness
  gate with only a loud log line. Never set it to make a red gate green — an emergency override on
  an unverified tree is how riders die.
- **Version-triple drift.** Stale `?ver=` keeps the WP.com edge serving old CSS/JS after a
  successful deploy — the site "deployed fine" but returning visitors see the old design. Bump all
  three files together.
- **Scope-jump reporting (bug-287).** A clean repo tree is `[repo]` evidence only — never report
  "deployed and live" without the post-deploy `curl` + Playwright probes (`[live]`).
- **Large scene assets timing out mid-transfer** — upload separately; a partial transfer plus
  hot-swap is worse than no deploy.
- **Wrong theme.** The repo's V1 folder carries different theme headers than production;
  `check_theme_identity` refuses it. Never work around that refusal — a V1 deploy is a rollback of
  the live Flagship 2 lineage, not a fix.
- **Rollback:** `git checkout <last-good-sha> -- wordpress-theme/skyyrose-flagship-2/`, rebuild, and
  redeploy through the same wrapper (the rollback deploy is STOP-AND-SHOW too).

Attribution

SkyyRoseCoSkyyRoseCo
View sourceMore from SkyyRoseCo →
SSkills DirectorySkills Directory

Your tool, in front of Claude Code builders.

3 founder slots · $299/mo · GSC-verified traffic · sponsors can never buy grades.

See placements

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Your tool, in front of Claude Code builders.

3 founder slots · $299/mo · GSC-verified traffic · sponsors can never buy grades.

See placements

Related Skills

Browser Extension Developer

Use this skill when developing or maintaining browser extension code in the `browser/` directory, including Chrome/Firefox/Edge compatibility, content scripts, background scripts, or i18n updates.

284722 votes

Seo Optimizer

SEO optimization with keyword analysis, readability assessment, technical validation, content quality. Use for search rankings, blog posts, content audits, or encountering keyword density, readability scores, meta tags, schema markup errors.

2192 votes

Google Official Seo Guide

Official Google SEO guide covering search optimization, best practices, Search Console, crawling, indexing, and improving website search visibility based on official Google documentation

1862 votes

Tanstack Start

Build a full-stack TanStack Start app on Cloudflare Workers from scratch — SSR, file-based routing, server functions, D1+Drizzle, better-auth, Tailwind v4+shadcn/ui. Use whenever the user mentions TanStack Start, asks to scaffold a full-stack Cloudflare app with SSR, wants an SSR dashboard, or asks for a React 19 + Cloudflare Workers app with file-based routing and server functions — even if they don't name TanStack Start specifically. No template repo — Claude generates every file fresh per ...

9881 votes

Pentest

PTES-aligned adversarial security audit for backend, frontend, and mobile applications. Produces a CVSS-scored Hacker Report with verified PoCs and phased remediation.

5491 votes
View all in development →