# PRD — PipelineFTP

Evidence date: 2026-10-06.

Source: `git@bitbucket.org:overdrive/pipelineftp.git`, `master` at `7afe299` (2019-06-02).

There is no prior PRD in the source repository or in Silicon Ark. Requirements below are recovered from `README.md`, `bitbucket-pipelines.yml`, and git history. Provenance is labelled.

The repository name suggests file transfer. No transfer behaviour is specified or implemented. Requirements are limited to what the two files actually do.

## Product purpose

**Documented.** `README.md` consists of the heading `PipelineFTP` and no further prose.

**Implemented.** `bitbucket-pipelines.yml` defines one Bitbucket Pipelines step. The step uses image `atlassian/default-image:2` and runs `echo "Everything is awesome!"`. The file comments describe this as "a sample build configuration for Other."

**Unknown / Requires Confirmation:** what problem PipelineFTP was meant to solve, and whether any FTP behaviour was ever specified outside this repository.

## Users and roles

| Actor | Evidence | Status |
|---|---|---|
| Person who pushes to the Bitbucket repository | A `default` pipeline exists, so a push that selects that pipeline runs the echo | **Inferred** from `pipelines.default`. No person, team, or role is named |
| FTP user, operator, or administrator | Not mentioned | **Not implemented** |
| Application role | No auth, no UI, no API | **Not implemented** |

## Systems the product talks to

1. Bitbucket Pipelines, as the host of `bitbucket-pipelines.yml`.
2. The container image `atlassian/default-image:2`, named as the step image. The YAML comments say a custom Docker Hub image can be used as the build environment. This file uses the Atlassian sample image rather than a project image.

No database, mail system, FTP server, queue, or third-party API is referenced.

SonarQube is not referenced in either committed file. See the discrepancy in project-plan.md.

## Major workflows

### WF-1 — Default pipeline on push

**Trigger:** a Bitbucket event that selects `pipelines.default`. This file defines no `branches`, `pull-requests`, `tags`, or `custom` pipelines, so `default` is the only selector present.

**Actor:** whoever causes that pipeline to run. Unnamed.

**Inputs:** none. The script does not read variables, files, or arguments.

**Behaviour:** one step starts `atlassian/default-image:2` and runs `echo "Everything is awesome!"`.

**Output:** that string in the pipeline log. No artifact, cache, deployment, or test report is declared.

**Validation:** none in the YAML.

**Error conditions:** not described. A failed image pull or a failed shell would be Bitbucket's generic step failure. The repository does not define retries, notifications, or a failure script.

**Provenance:** **Implemented** (the YAML). That `default` is what Bitbucket runs when no more specific pipeline matches is **Inferred** from the key name and from the file being the stock sample. The repository does not restate Bitbucket's trigger rules.

### WF-2 — Read the repository name

**Trigger:** someone opens `README.md`.

**Behaviour:** the file shows the heading PipelineFTP.

**Provenance:** **Documented**.

No other workflow is present. There is no upload, download, schedule, login, or review flow.

## Functional requirements

### FR-001 — Repository title

The README identifies the project as PipelineFTP and does not describe features, users, or setup.

- Provenance: **Documented** (`README.md`, added in `273ff01`).
- Implementation: **Implemented**.
- Confidence: High.

### FR-002 — Sample default pipeline

The default pipeline runs a single step whose script prints the fixed string `Everything is awesome!`.

- Who: the pipeline runner.
- Trigger: selection of `pipelines.default`.
- Inputs: none.
- Expected behaviour: echo that string inside `atlassian/default-image:2`.
- Outputs: the log line.
- Validation: none.
- Error conditions: not specified in the repository.
- Provenance: **Implemented** (`bitbucket-pipelines.yml`, added in `7afe299`). The surrounding comments mark the file as a sample.
- Confidence: High.

### FR-003 — No transfer behaviour

The repository does not define hosts, credentials, paths, protocols, retries, or file-selection rules for FTP or any other transfer.

- Provenance: absence from both commits. This is a statement about the tree, not a confirmed decision to exclude FTP forever.
- Implementation: nothing to implement.
- Confidence: High that it is absent. **Unknown / Requires Confirmation** whether it was supposed to exist.

## Integrations

| System | Purpose | Trigger | Direction | Auth | Response | Failure |
|---|---|---|---|---|---|---|
| Bitbucket Pipelines | Run the sample step | `pipelines.default` | Pipeline config is read by Bitbucket; the step writes a log line | **Unknown** — no token or variable is declared in the YAML | Log text `Everything is awesome!` | Not specified |
| Docker image `atlassian/default-image:2` | Step environment | Step start | Pull image, run the script | Not declared | Not declared | Not specified |

## Constraints

- No tests are defined, and the pipeline does not run a test command.
- No quality gate, coverage setting, or Sonar invocation is in the committed pipeline.
- No secrets, `.env` example, or credential name appears in either file.
- No environment-specific configuration (dev, test, production) is present.
- The repository has not been updated since 2019-06-02.

## Assumptions that are not requirements

- The name PipelineFTP does not, by itself, establish an FTP product requirement. It is only a name.
- The task-creation file list is not treated as a requirement. Those extra filenames are not in git.

## Requires confirmation

The same five items as in `project-plan.md`: intended product, missing sonar files, whether the repo should remain, whether the sample pipeline should still run, and who the users are.
