# Project plan — wcu_wp

Evidence date: 2026-09-29.

Source repository: `git@bitbucket.org:overdrive/wcu_wp.git`.

Inspected revision: `ed9b5b6` (2024-12-18, "Add initialize on git ftp") on `main`. That commit is `origin/HEAD`. There are no other remote branches.

This plan describes what the repository contains. It does not decide what the product should become.

## Product

`wcu_wp` is a WordPress 6.7.1 site packaged for a sports organisation. The only product-specific theme is named **Rookie Child Theme for WRU**. It sits on the Rookie theme (ThemeBoy), which is built for the SportsPress plugin. SportsPress Pro 2.7.25 is vendored in the repository, together with Ninja Forms, Smart Slider 3, and NS Cloner - Site Copier.

Provenance: **Implemented** in the theme header (`wp-content/themes/rookie-child/style.css`) and the plugin headers under `wp-content/plugins/`.

The WordPress core in this repository is the South African English package: `wp-includes/version.php` sets `$wp_local_package = 'en_ZA'`. Admin and plugin language files under `wp-content/languages/` are `en_ZA`.

What **WCU** (repository name) and **WRU** (theme name) expand to is **Unknown / Requires Confirmation**. No page copy, club name, domain, or about text is stored in git. Posts, pages, teams, players, and media live in the database and in `wp-content/uploads/`, which is gitignored.

The footer credit in the child theme links to `http://overdrive.co.za/` and reads "Designed by Silcon Overdrive" (spelled that way in the source). Provenance: **Implemented** in `wp-content/themes/rookie-child/functions.php`.

Authors on the eight commits, all dated 2024-12-18:

| Author | Email | Commits |
|---|---|---|
| Jaco Brits | `jaco@overdrive.co.za` | Initial commit; `sonar-project.properties` |
| Wessels | `wessels@overdrive.co.za` | Gitignore, WordPress tree including the child theme, pipeline, git-ftp changes |

## Branch reality

| Branch | Tip | Date | What it is |
|---|---|---|---|
| `main` (only branch; `origin/HEAD`) | `ed9b5b6` | 2024-12-18 | Full WordPress tree, four plugins, four themes, Bitbucket pipeline |

History, oldest first:

1. `8d08db4` — Jaco Brits — Initial commit.
2. `0ef8229` — Wessels — Update gitignore file to include WP specific files to exclude.
3. `37afb64` — Wessels — Initial WP Source Code Commit including Child Theme (5,653 files).
4. `398b574` — Wessels — Add Pipeline configuration file.
5. `1ac190c` — Wessels — Initialise git ftp for first run.
6. `8b3e997` — Jaco Brits — sonar-project.properties created online with Bitbucket.
7. `1ea603d` — Wessels — Add `--resume` flag to git ftp.
8. `ed9b5b6` — Wessels — Add initialize on git ftp.

No commits after 2024-12-18. Provenance: **Implemented** (`git log`).

`bitbucket-pipelines.yml` defines a `qa` branch pipeline. `origin/qa` does not exist. Whether a QA site is deployed some other way is **Unknown / Requires Confirmation**.

The task-creation scan listed `sonarqube_scan.bat` at the repository root. That file is not in `ed9b5b6`. Provenance: **Unknown** — it may have been an untracked file on the scan host.

## Objectives (inferred from the stack, not from a written plan)

No project plan, product README, or requirements document exists in the repository. `readme.html` is the stock WordPress readme. `wp-content/themes/wru-custom/README.md` is the stock Underscores starter readme. The following objectives are **Inferred** from the theme name, the vendored plugins, and the pipeline:

- Publish a public sports website (fixtures, teams, players, staff, news) using SportsPress.
- Present it with the Rookie child theme branded for WRU (colours, fonts, footer credit).
- Allow editors to build forms (Ninja Forms) and sliders (Smart Slider 3).
- Support more than one site in a WordPress network (NS Cloner, a child-theme check for blog ID 2, and a SportsPress multisite module).
- Deploy the tree by FTP from Bitbucket Pipelines and scan it with SonarQube.

Which of those are actually turned on in production is **Unknown / Requires Confirmation**, because activation is stored in the database, and `wp-config.php` is not in git.

## Scope

### In scope of the repository

- WordPress 6.7.1 core (`wp-admin`, `wp-includes`, root bootstrap PHP files).
- Themes: `rookie` 1.5.4, `rookie-child` 1.0, `wru-custom` 1.0.0 (Underscores scaffold), `twentytwentyfive` (bundled with this WordPress release).
- Plugins: SportsPress Pro 2.7.25 (core plus Pro modules), Ninja Forms 3.8.23, Smart Slider 3 3.5.1.25, NS Cloner - Site Copier 4.4.7.5.
- `en_ZA` language files for core, Ninja Forms, Smart Slider 3, and Twenty Twenty-Five.
- Bitbucket Pipelines file that FTP-deploys and runs SonarQube.
- `sonar-project.properties` (project key only).
- `.gitignore` excluding `wp-config.php`, `.htaccess`, `web.config`, uploads, SQL dumps, and archives.

### Out of scope / not in this repository

- `wp-config.php`. Database name, user, host, salts, and any `MULTISITE` constants are **Unknown**.
- Uploaded media (`wp-content/uploads/` is gitignored and absent from the tree).
- Database content: pages, posts, SportsPress teams, players, events, leagues, Ninja Forms definitions, menus, widgets, active theme, active plugins.
- The public hostname. The only URL in the custom theme code is `http://overdrive.co.za/` in the footer credit.
- WooCommerce and BuddyPress plugins. The child theme CSS styles both. Neither plugin directory is in the repository.
- A separate free `sportspress` plugin directory. SportsPress core is loaded from inside SportsPress Pro (`includes/sportspress`). Pro deactivates `sportspress/sportspress.php` if that separate plugin is active.
- Automated tests, Docker, a root `composer.json`, and a root `package.json`.
- Hosting panel, DNS, and the FTP server itself. The pipeline reads host and credentials from Bitbucket variables.

## System architecture

One deployable tree. WordPress renders the public site and the admin. There is no separate API service, worker, or mobile app in this repository.

```text
Browser
  → WordPress 6.7.1 (PHP, MySQL)
      → Active theme (not stored in git; child theme is the only customised theme)
      → Plugins, if activated in the database
          → SportsPress Pro (events, teams, players, staff, and Pro modules)
          → Ninja Forms
          → Smart Slider 3
          → NS Cloner (multisite site copy)
      → MySQL (not in git)
      → wp-content/uploads (not in git)

Bitbucket Pipelines (branch main, and branch qa if it is ever pushed)
  → git-ftp push to an FTP host
  → SonarQube scan (sonarsource/sonarqube-scan:2.0.1)
```

SportsPress content types and the theme templates that display them are vendor behaviour. This repository does not add a custom post type of its own.

## Major components

| Component | Role in this repo | Provenance |
|---|---|---|
| WordPress 6.7.1 (`en_ZA` package) | CMS, users, media, cron, XML-RPC | Implemented. `$wp_version` and `$wp_local_package` in `wp-includes/version.php` |
| Rookie 1.5.4 | Parent sports theme. Requires SportsPress via TGMPA | Implemented. Vendor theme |
| Rookie child ("for WRU") | Colours, fonts, footer credit, header background, extra CSS, blog-ID 2 stylesheet hook | Implemented. Only project-authored theme code |
| WRU Custom | Underscores starter renamed to WRU Custom. Description field is still "Description" | Implemented scaffold. No project behaviour beyond the rename |
| Twenty Twenty-Five | Default theme shipped with WordPress 6.7 | Implemented. Stock |
| SportsPress Pro 2.7.25 | Club and league data model and Pro modules | Implemented vendor plugin. Which modules are enabled is Unknown |
| Ninja Forms 3.8.23 | Form builder | Implemented vendor plugin. Form definitions are Unknown |
| Smart Slider 3 3.5.1.25 | Slider | Implemented vendor plugin. Sliders are Unknown |
| NS Cloner 4.4.7.5 | Copy a site inside a multisite network | Implemented vendor plugin. Useful only if the install is multisite |
| Bitbucket Pipelines + git-ftp | Deploy `main` (and `qa` if that branch exists) | Implemented in `bitbucket-pipelines.yml` |
| SonarQube | Static scan after the FTP step | Implemented. Host and token are pipeline variables |

## Milestones visible in git

There is no milestone plan in the repository. The only delivery sequence is the single day of commits above: empty repo, gitignore, WordPress import including the child theme, pipeline, Sonar project key, git-ftp flags.

Current project status: **frozen snapshot**. Last change 2024-12-18. No open feature branch. No documented backlog inside the repo or in Silicon Ark before this document set.

## Implementation plan (as evidenced, not as a proposal)

What the repository already does:

1. Keep WordPress core, themes, and plugins in git, except config, uploads, and SQL dumps.
2. On push to `main`, a pipeline installs `zip`, `git`, and `git-ftp`, runs `git ftp init`, then `git ftp push --resume` to `$FTP_HOST`.
3. A second step runs the SonarQube scan pipe.
4. The same two steps are defined for branch `qa`, with QA FTP variables. The `git ftp init` line for QA is commented out. The branch does not exist.

There is no build step that compiles the child theme. Child CSS is plain CSS. The Underscores npm/composer scripts in `wru-custom` are not invoked by the pipeline.

## Known dependencies

Runtime, from WordPress and plugin headers:

- PHP `7.2.24` or newer (`$required_php_version`). Smart Slider 3 refuses to load below PHP 7.0. Ninja Forms services code checks PHP 5.6. The server's actual PHP version is **Unknown**.
- MySQL `5.5.5` or newer (`$required_mysql_version`). Actual server version is **Unknown**.
- WordPress 6.7.1 as vendored. SportsPress Pro header says "Tested up to: 6.1". Its `readme.txt` says "Tested up to: 6.7". Rookie says "Tested up to: 5.7". Whether those combinations are accepted in production is **Unknown / Requires Confirmation**.

Deploy-time variables named in `bitbucket-pipelines.yml` (values are not in git):

- `FTP_USERNAME`, `FTP_PASSWORD`, `FTP_HOST`
- `FTP_USERNAME_QA`, `FTP_PASSWORD_QA`, `FTP_HOST_QA`
- `SONAR_HOST_URL`, `SONAR_TOKEN`

Rookie registers SportsPress as a required plugin (`rookie_register_required_plugins` in `wp-content/themes/rookie/functions.php`). SportsPress Pro satisfies that callable (`SportsPress::instance`) and deactivates a standalone SportsPress plugin if one is also active.

## Discrepancies

| Topic | What the evidence says |
|---|---|
| Names | Repository is `wcu_wp`. Custom theme text domain and title say WRU. Expansion of either acronym is not in the repo. |
| Multisite | Child theme calls `get_current_blog_id() == 2`. NS Cloner and a SportsPress multisite module are vendored. `wp-signup.php` is stock core and is not evidence. `wp-config.php` is absent, so `MULTISITE` is **Unknown**. |
| Missing stylesheet | Blog ID 2 enqueues `css/subsite-2.css`. That file is not in the theme. |
| QA pipeline vs branches | Pipeline expects branch `qa`. Remote has only `main`. |
| Step name vs behaviour | Both pipelines are named "Build and Test production". The script FTP-deploys and does not run tests. The QA step uses the same display name. |
| Sonar helper script | Discovery listing included `sonarqube_scan.bat`. It is not in git. |
| Theme scaffold vs child theme | `wru-custom` is a renamed Underscores starter (tested up to WordPress 5.4, placeholder description). The styled WRU theme is `rookie-child`. Which theme is active is stored in the database. |
| Plugin header vs readme | SportsPress Pro PHP header "Tested up to: 6.1"; `readme.txt` "Tested up to: 6.7". |
| Footer spelling | Credit string is "Silcon Overdrive", not "Silicon". |

## Human confirmation still required

- Official names for WCU and WRU, and the public URL of the site.
- Whether production is a single site or a multisite network, and what blog ID 2 is.
- Which theme and which plugins are active.
- Which SportsPress Pro modules are enabled.
- Whether WooCommerce or BuddyPress is installed on the server (styled in CSS, not vendored).
- FTP targets for production and QA, and whether `git ftp init` on every `main` deploy is intentional.
- Whether `sonarqube_scan.bat` should exist.
