# Project plan — Webformulys

Evidence date: 2026-09-28.

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

Inspected revision: `main` at `b94306f` (2024-04-03, Abdurahmaan Ismail, "Initial Bitbucket Pipelines configuration"). The scan-host path `~/projects/sonar_scan/repos/Webformulys` was not on this machine. The tree below was read from that git revision. Pipeline variable names are recorded; their values are not in git and are not reproduced.

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

## Product

There is no README, product requirements document, or application source in the repository. The only name in git is the repository itself: **Webformulys** (`webformulys.git`).

The committed behaviour is a Bitbucket Pipelines file. Its comments call it a Node.js build template. Its script installs npm dependencies, runs `npm run build`, and then FTP-pushes to a path whose last segment is `pestelite.overdriveqa.co.za`.

Provenance: **Implemented** in `bitbucket-pipelines.yml`. No written statement of product purpose was found.

**Unknown / Requires Confirmation:** what Webformulys is, who it is for, and whether the Pestelite QA path is the intended deploy target or a copied pipeline.

## Branch reality

| Line | Tip | Date | What it is |
|---|---|---|---|
| `main` (default; `origin/HEAD`) | `b94306f` | 2024-04-03 | Only branch. Two commits, 2024-01-23 to 2024-04-03 |

No other local or remote branches were present at inspection. No tags.

History:

- `71d3c3f` — 2024-01-23 — Lloyd (`lloyd@overdrive.co.za`) — "Initial commit". Adds `.gitignore` only. The file is Bitbucket's stock example ignore list. Its header says the list should be customized. It was not customized.
- `b94306f` — 2024-04-03 — Abdurahmaan Ismail (`maanie@overdrive.co.za`) — "Initial Bitbucket Pipelines configuration". Adds `bitbucket-pipelines.yml`.

Nothing has been committed since 2024-04-03.

**Discrepancy:** the pipeline is declared under `pipelines.branches.master`. The only branch is `main`. A push to `main` does not match that pipeline. Provenance: **Implemented** YAML versus the branch that exists.

**Discrepancy:** the task-creation scan listed `sonar-project.properties` and `sonarqube_scan.bat` at the repository root. Neither file is in either commit. Provenance: **Unknown** — they may have been untracked files on the scan host.

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

- On the `master` branch, install Node dependencies and run `npm run build`.
- Keep the `build/**` output as a pipeline artifact.
- FTP-push the checkout to `public_html/pestelite.overdriveqa.co.za` on the host named by `FTP_HOST_QA`, using `FTP_USERNAME_QA` and `FTP_PASSWORD_QA`.

The file comments also say the template validates Node.js code and runs tests and linting on the default branch. The script does not run a test command or a linter, and it is not bound to the default branch.

There is no `package.json`, so the install and build commands have nothing to run against.

## Scope

### In scope of `main`

- `.gitignore` — Bitbucket's default example ignore patterns (Node, Java, Python, Maven, JetBrains, test reports, OS junk, application binaries, large media).
- `bitbucket-pipelines.yml` — Node 16 image, two steps, `master` only.

### Out of scope / not in this repository

- Application source, `package.json`, lockfile, tests, lint config, README, and database.
- The values of `FTP_USERNAME_QA`, `FTP_PASSWORD_QA`, and `FTP_HOST_QA`.
- The site at `pestelite.overdriveqa.co.za`, and any product that site belongs to.
- `sonar-project.properties` and `sonarqube_scan.bat` named by the task-creation scan.
- A written backlog, owner, or milestone plan.

## System architecture

There is no application process in this repository. The only designed flow is the pipeline, and it does not trigger on the branch that exists.

```text
push to master          (no such branch exists; default is main)
        |
        v
image node:16
        |
        +-- step 1: npm install && npm run build
        |           artifact: build/**
        |
        +-- step 2: git ftp push
                    ftp://$FTP_HOST_QA/public_html/pestelite.overdriveqa.co.za
```

A push to `main` produces no pipeline run from this file.

## Major components

| Component | Where | What it does |
|---|---|---|
| Ignore list | `.gitignore` | Stock Bitbucket template. Not customized. |
| Pipeline | `bitbucket-pipelines.yml` | Declares a Node 16 build and an FTP push, on `master` only. |

## Milestones visible in git

| Date | Commit | What landed |
|---|---|---|
| 2024-01-23 | `71d3c3f` | Repository created. Ignore file only. |
| 2024-04-03 | `b94306f` | Pipeline file added. Tip of `main`. |

No release, tag, or later milestone is in git.

## Known dependencies

Declared by the pipeline, and absent from the tree:

- Docker image `node:16`.
- A `package.json` with a `build` script, so that `npm install` and `npm run build` can succeed.
- The `git ftp` subcommand in that image. The YAML does not install it.
- Bitbucket pipeline variables `FTP_USERNAME_QA`, `FTP_PASSWORD_QA`, `FTP_HOST_QA`.

Whether those variables are set in Bitbucket is **Unknown / Requires Confirmation**.

## Implementation plan

No implementation plan is written in the repository. The two commits are the whole plan that git records: create the repo, then add a pipeline file.

## Current project status

Scaffold only. `main` at `b94306f` contains two files and no application. The pipeline as written does not run on `main`, and it cannot build because there is no Node project.

## Open items that block a single description of the product

- What Webformulys is supposed to be, and where its source lives if not in this repository.
- Whether deploy to `pestelite.overdriveqa.co.za` is intentional.
- Whether the pipeline should be bound to `main`.
- Whether `sonar-project.properties` and `sonarqube_scan.bat` exist only on the scan host.
- Whether the FTP variables exist in Bitbucket.
