# Project plan — serverless-net-core

Evidence date: 2026-10-04.

Source repository: `git@bitbucket.org:overdrive/serverless-net-core.git` (`https://bitbucket.org/overdrive/serverless-net-core.git`).

Inspected revision: `master` at `ca18f8f` (2021-06-01, Jaco Brits, "Update .net with Unity settings"). The scan-host path `~/projects/sonar_scan/repos/serverless-net-core` was not on this machine. The tree below was read from that git revision.

`Handler.cs` contains a MySQL connection string, including a password. The password is omitted from this Silicon Ark set. Host, database name, and database user are named where they identify the integration.

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

There is no product requirements document in the source repository and no prior Silicon Ark set for this directory. `README.md` is a starter guide titled `serverlessDotNetStarter`. A short "Silicon sequence" at the bottom of that file records a later deploy recipe. It is not a product brief.

Silicon Ark already has Unity-named directories (`unity-lambda-api`, `unityNodejsApi`, and others). This repository does not name them. The last commit message says "Unity settings", the database name in `Handler.cs` is `qaunity`, and `aws-lambda-tools.default.json` uses AWS profile `unity`. Whether this repository belongs to the same product is **Unknown / Requires Confirmation**.

The Serverless service name is `ozow-lambda-test`. The README deploy line uses AWS profile `ozow`. No Ozow API client, payment call, or Ozow document exists in the tree. What "ozow" refers to here is **Unknown / Requires Confirmation**.

## Product

**Documented** in `README.md`: a starter for deploying a C# / .NET Core 3.1 solution to AWS Lambda and API Gateway, and for debugging it in Visual Studio Code.

**Implemented** on `master` at `ca18f8f`: two HTTP functions in one assembly.

- `GET /hello` opens MySQL and returns one scalar from `sysUser` as a JSON object key.
- `GET /getquerystring` returns the query-string map when the key `foo` can be read.

No written statement of product owner, audience, or goal beyond that starter text and the Silicon sequence was found.

## Branch reality

| Line | Tip | Date | What it is |
|---|---|---|---|
| `master` (default; `origin/HEAD`) | `ca18f8f` | 2021-06-01 | Only branch. 5 commits from 2021-02-15 to 2021-06-01 |

No other local or remote branches were present at inspection. Nothing in git is dated after 2021-06-01. Whether any stack is still deployed is **Unknown / Requires Confirmation**.

| Commit | Date | Author | Subject |
|---|---|---|---|
| `2176f03` | 2021-02-15 | Jaco Brits | Initial commit (`.gitignore` only) |
| `402beb4` | 2021-02-16 | Jaco Brits | Initial commit (starter tree) |
| `8f9e962` | 2021-02-16 | Jaco Brits | All changes update readme |
| `f5b7278` | 2021-02-16 | Jaco Brits | Update DB call |
| `ca18f8f` | 2021-06-01 | Jaco Brits | Update .net with Unity settings |

Every commit is by Jaco Brits (`jaco@overdrive.co.za`).

## Objectives

No objectives file exists. The behaviour the commits introduced:

1. `2176f03` — Visual Studio-style `.gitignore` only.
2. `402beb4` — Serverless Framework starter: `Handler.cs` with `HelloWorld` (returns `hello` / `world`) and `GetQuerystring`, `serverless.yml` service `ozow-lambda-test`, build scripts, VS Code launch config, README, Renovate config, and a screenshot under `resources/images/`.
3. `8f9e962` — README retargeted from the upstream starter `github.com/pharindoko/serverlessDotNetStarter` to this Bitbucket repository. The "Silicon sequence" deploy steps were added in this commit.
4. `f5b7278` — `MySql.Data` 8.0.23 added. `HelloWorld` stops returning the hello/world pair and queries MySQL. README step 0 becomes `dotnet add package MySql.Data`.
5. `ca18f8f` — `aws-lambda-tools.default.json` profile changes from `default` to `unity` and region from `eu-central-1` to `eu-west-1`. `Properties/launchSettings.json` is added for the mock Lambda test tool on port 5050. The hello/world dictionary line in `HelloWorld` is commented out. The MySQL call is unchanged.

## Scope

### In scope of `master` at `ca18f8f`

- `serverless.yml` service `ozow-lambda-test`: provider `aws`, runtime `dotnetcore3.1`, `package.individually: true`.
- Two functions, `hello` and `getquerystring`, both packaged from `bin/release/netcoreapp3.1/hello.zip`.
- `Handler.cs` in namespace `AwsDotnetCsharp`.
- Project file `AwsDotnetCsharp.csproj` targeting `netcoreapp3.1`.
- Build scripts `build.cmd` and `build.sh`, tool installer `setup.sh`.
- Local debug files: `.vscode/launch.json`, `.vscode/tasks.json`, `Properties/launchSettings.json`.
- `aws-lambda-tools.default.json` for the .NET Lambda CLI / Visual Studio wizard.
- `renovate.json` extending `config:base`.
- `README.md` and `resources/images/lambda_test_tool.png`.

### Out of scope / not in this repository

- The MySQL server, schema, and migrations. The only SQL is `SELECT * FROM `sysUser`` inside `Handler.cs`.
- A CloudFormation `resources` section. The block in `serverless.yml` is commented out. `resources/` holds a screenshot, not a template.
- An authorizer, API key, VPC, environment variables, or IAM role statements. Example blocks in `serverless.yml` are commented out.
- A pipeline, Dockerfile, solution file (`.sln`), or test project.
- `sonar-project.properties` and `sonarqube_scan.bat`. The onboarding issue listed those names from a 2026-09-28 directory scan. They are not in git at `ca18f8f`. Whether they existed only as untracked files on the scan host is **Unknown / Requires Confirmation**.
- The caller of the HTTP API. Not named in this tree.
- Ozow or Unity application code. Only the names above appear.

## System shape

```text
HTTP caller (no authorizer in serverless.yml)
    |
    v
API Gateway   service ozow-lambda-test
runtime dotnetcore3.1
stage and region are not set in serverless.yml
    |
    +-- GET /hello
    |     Handler.HelloWorld
    |     MySQL connection string compiled into Handler.cs
    |     SELECT * FROM sysUser  -> ExecuteScalar -> one JSON key
    |
    +-- GET /getquerystring
          Handler.GetQuerystring
          reads queryStringParameters; does not call MySQL
```

Both functions are methods on `AwsDotnetCsharp.Handler` inside the same zip.

## Major components

| Piece | Where | Role at `ca18f8f` |
|---|---|---|
| HTTP API | `serverless.yml` | Declares `hello` and `getquerystring`, runtime, and the shared zip path |
| Request handlers | `Handler.cs` | `HelloWorld`, `GetQuerystring`, private `CreateResponse` and `LogMessage` |
| Project | `AwsDotnetCsharp.csproj` | `netcoreapp3.1` Lambda project and NuGet references |
| Package step | `build.cmd`, `build.sh` | `dotnet lambda package` writes `hello.zip` |
| Deploy recipe | `README.md` "Silicon sequence" | Build, then `serverless deploy --aws-profile ozow` |
| .NET Lambda defaults | `aws-lambda-tools.default.json` | Profile `unity`, region `eu-west-1`, template `serverless.yml` |
| Local test tool | `setup.sh`, `Properties/launchSettings.json`, `.vscode/launch.json` | Amazon Lambda Test Tool 3.1 |
| Dependency updates | `renovate.json` | Extends Renovate `config:base` only |

## Milestones

The five commits above are the only milestones in git. There is no roadmap file. Work stopped on 2021-06-01.

## Dependencies known from the tree

Direct package references in `AwsDotnetCsharp.csproj`:

- `Amazon.Lambda.Core` 1.2.0
- `Amazon.Lambda.Serialization.Json` 1.8.0
- `Amazon.Lambda.AspNetCoreServer` 5.3.0
- `MySql.Data` 8.0.23 (added in `f5b7278`)
- `Newtonsoft.Json` 12.0.3

`Handler.cs` imports `Amazon.Lambda.APIGatewayEvents`. That package is not a direct `PackageReference`. Whether it arrives transitively from `Amazon.Lambda.AspNetCoreServer` was not verified by a build in this inspection.

Tools named by the README and `setup.sh`, not by the project file:

- Node.js and the Serverless Framework CLI (`sls`)
- .NET Core 3.1 SDK
- `Amazon.Lambda.Tools` (README lists 4.0.0 as the expected global tool)
- `Amazon.Lambda.TestTool-3.1` (`setup.sh` pins 0.9.5; the README's expected list says 0.10.0)

There is no `package.json`. No Serverless plugin is declared.

AWS services named by the template and the handler: API Gateway, Lambda, and an RDS MySQL host in `eu-west-1`. No queue, cache, object store, or monitoring vendor is configured.

## Current status

The repository is a Serverless .NET starter whose `HelloWorld` method was pointed at a Unity-named MySQL database. Git has not moved since 2021-06-01.

- Deployed shape, if `serverless deploy` was run after `build.cmd` or `build.sh`, is the two routes in `serverless.yml`.
- `HelloWorld` no longer returns the hello/world pair the README still describes for the local test tool.
- Stage, region, and AWS profile are not set in `serverless.yml`. The README sample output and the Silicon sequence URL use `us-east-1`. The .NET Lambda tools file uses profile `unity` and region `eu-west-1`. The README deploy command uses profile `ozow`. These three deploy paths do not name the same account settings.
- The database password is compiled into `Handler.cs` and is therefore in git history from `f5b7278` onward.

**Unknown / Requires Confirmation**

- Whether a stack named `ozow-lambda-test` was deployed, in which region and account, and whether it is still running.
- Whether the API Gateway host in the README (`4row8qyxh1.execute-api.us-east-1.amazonaws.com`) was this service and whether that URL still responds.
- Whether the RDS instance named by the connection string still exists, is reachable from Lambda without a VPC, and whether the committed password is still valid. It should be treated as exposed.
- What `sysUser` contains, and which column `ExecuteScalar` returns.
- Whether AWS profiles `ozow` and `unity` are the same account.
- Whether this repository is part of the Unity product documented elsewhere in Silicon Ark, or an Ozow experiment, or an abandoned starter.
- Who owns it now. The only author in git is Jaco Brits.
