Creating an Oracle-to-PostgreSQL master migration plan
Analyze a .NET solution, classify every project for Oracle to PostgreSQL migration, and produce a persistent master plan that downstream migration agents and skills can parse.
When to invoke
- "Create the Oracle to Postgres master migration plan."
- "Inventory this .NET solution for Oracle dependencies."
- "Classify which projects need PostgreSQL migration."
- "Write
.github/oracle-to-postgres-migration/Reports/MasterMigrationPlan.md."
Prerequisites and context
Work from the repository root. Find a .sln or .slnx solution file in the workspace root; if multiple exist, ask the user which solution to plan. The output path is fixed: .github/oracle-to-postgres-migration/Reports/MasterMigrationPlan.md.
Procedure
- Discover projects in the selected solution.
- Classify each project from file evidence.
- Present the classified list and let the user adjust classifications or migration order before finalizing.
- Write the plan file to
.github/oracle-to-postgres-migration/Reports/MasterMigrationPlan.md.
Track progress explicitly:
Progress:
- [ ] Step 1: Discover projects in the solution
- [ ] Step 2: Classify each project
- [ ] Step 3: Confirm with user
- [ ] Step 4: Write the plan file
Discovery and classification
For each .csproj, record name, relative path, and likely project type such as class library, web API, console, or test. Scan every non-test project for Oracle evidence.
| Evidence source |
Indicators |
| NuGet references |
Oracle.ManagedDataAccess, Oracle.EntityFrameworkCore in .csproj or packages.config. |
| Configuration |
Oracle connection strings in appsettings.json, web.config, or app.config. |
| Code usage |
OracleConnection, OracleCommand, OracleDataReader. |
| DDL references |
DDL cross-references under .github/oracle-to-postgres-migration/DDL/Oracle/ when present. |
| Existing migrated duplicate |
A -postgres or .Postgres project duplicate that appears processed. |
| Test project signals |
Test SDK references, test naming, or test-only project type. |
Assign exactly one classification:
| Classification |
Meaning |
Typical evidence |
MIGRATE |
Has Oracle interactions requiring conversion. |
Oracle NuGet packages, connection strings, OracleConnection, OracleCommand, OracleDataReader, or DDL cross-reference. |
SKIP |
No Oracle indicators. |
UI-only, shared utility, or unrelated project. |
ALREADY_MIGRATED |
A PostgreSQL duplicate exists and appears processed. |
-postgres or .Postgres paired project. |
TEST_PROJECT |
Test project handled by the testing workflow. |
Test project naming or framework references. |
Order migration so shared/foundational libraries move before dependents.
Plan file contract
Save this exact structure to .github/oracle-to-postgres-migration/Reports/MasterMigrationPlan.md because downstream consumers depend on the headings and tables.
# Master Migration Plan
**Solution:** {solution file name}
**Solution Root:** {REPOSITORY_ROOT}
**Created:** {timestamp}
**Last Updated:** {timestamp}
## DDL Artifacts
**Location:** {path to DDL artifacts, e.g., `.github/oracle-to-postgres-migration/DDL/`}
**External tool used:** {Yes / No} — {If Yes, name the tool (e.g., `ora2pg`) and note that Phase 4 (Schema & DDL Migration) can be skipped; PostgreSQL DDL artifacts already exist.}
## Solution Summary
| Metric | Count |
|--------|-------|
| Total projects in solution | {n} |
| Projects requiring migration | {n} |
| Projects already migrated | {n} |
| Projects skipped (no Oracle usage) | {n} |
| Test projects (handled separately) | {n} |
## Project Inventory
| # | Project Name | Path | Classification | Notes |
|---|---|---|---|---|
| 1 | {name} | {relative path} | MIGRATE | {notes} |
| 2 | {name} | {relative path} | SKIP | No Oracle dependencies |
## Migration Order
1. **{ProjectName}** — {rationale, e.g., "Core data access library; other projects depend on it."}
2. **{ProjectName}** — {rationale}
Gotchas
- Do not classify from project names alone: require file evidence for
MIGRATE, SKIP, ALREADY_MIGRATED, or TEST_PROJECT.
- Do not bury DDL status: if
.github/oracle-to-postgres-migration/DDL/ exists or an external tool such as ora2pg produced PostgreSQL artifacts, record whether Phase 4 can be skipped.
- Do not migrate dependents first: shared data access libraries should precede web APIs, console apps, and consumers.
Output template
## Oracle-to-PostgreSQL master migration plan
**Status:** drafted | written | needs confirmation | blocked
**Solution:** `<solution.sln or solution.slnx>`
**Plan file:** `.github/oracle-to-postgres-migration/Reports/MasterMigrationPlan.md`
### Classification summary
| Classification | Count | Projects |
| --- | ---: | --- |
| `MIGRATE` | <n> | <names> |
| `SKIP` | <n> | <names> |
| `ALREADY_MIGRATED` | <n> | <names> |
| `TEST_PROJECT` | <n> | <names> |
### Migration order
1. <ProjectName> — <rationale>
### Confirmation needed
- <classification or ordering question, or none>
Quality gate
1---2name: creating-oracle-to-postgres-master-migration-plan-23description: Discover .NET solution projects, classify Oracle-to-PostgreSQL migration eligibility, detect Oracle dependencies, and write .github/oracle-to-postgres-migration/Reports/MasterMigrationPlan.md. Use when starting a multi-project Oracle-to-PostgreSQL migration, inventorying .NET projects, or assessing Oracle dependency scope.4---56# Creating an Oracle-to-PostgreSQL master migration plan78Analyze a .NET solution, classify every project for Oracle to PostgreSQL migration, and produce a persistent master plan that downstream migration agents and skills can parse.910## When to invoke1112- "Create the Oracle to Postgres master migration plan."13- "Inventory this .NET solution for Oracle dependencies."14- "Classify which projects need PostgreSQL migration."15- "Write `.github/oracle-to-postgres-migration/Reports/MasterMigrationPlan.md`."1617## Prerequisites and context1819Work from the repository root. Find a `.sln` or `.slnx` solution file in the workspace root; if multiple exist, ask the user which solution to plan. The output path is fixed: `.github/oracle-to-postgres-migration/Reports/MasterMigrationPlan.md`.2021## Procedure22231. Discover projects in the selected solution.242. Classify each project from file evidence.253. Present the classified list and let the user adjust classifications or migration order before finalizing.264. Write the plan file to `.github/oracle-to-postgres-migration/Reports/MasterMigrationPlan.md`.2728Track progress explicitly:2930```text31Progress:32- [ ] Step 1: Discover projects in the solution33- [ ] Step 2: Classify each project34- [ ] Step 3: Confirm with user35- [ ] Step 4: Write the plan file36```3738## Discovery and classification3940For each `.csproj`, record name, relative path, and likely project type such as class library, web API, console, or test. Scan every non-test project for Oracle evidence.4142| Evidence source | Indicators |43| --- | --- |44| NuGet references | `Oracle.ManagedDataAccess`, `Oracle.EntityFrameworkCore` in `.csproj` or `packages.config`. |45| Configuration | Oracle connection strings in `appsettings.json`, `web.config`, or `app.config`. |46| Code usage | `OracleConnection`, `OracleCommand`, `OracleDataReader`. |47| DDL references | DDL cross-references under `.github/oracle-to-postgres-migration/DDL/Oracle/` when present. |48| Existing migrated duplicate | A `-postgres` or `.Postgres` project duplicate that appears processed. |49| Test project signals | Test SDK references, test naming, or test-only project type. |5051Assign exactly one classification:5253| Classification | Meaning | Typical evidence |54| --- | --- | --- |55| `MIGRATE` | Has Oracle interactions requiring conversion. | Oracle NuGet packages, connection strings, `OracleConnection`, `OracleCommand`, `OracleDataReader`, or DDL cross-reference. |56| `SKIP` | No Oracle indicators. | UI-only, shared utility, or unrelated project. |57| `ALREADY_MIGRATED` | A PostgreSQL duplicate exists and appears processed. | `-postgres` or `.Postgres` paired project. |58| `TEST_PROJECT` | Test project handled by the testing workflow. | Test project naming or framework references. |5960Order migration so shared/foundational libraries move before dependents.6162## Plan file contract6364Save this exact structure to `.github/oracle-to-postgres-migration/Reports/MasterMigrationPlan.md` because downstream consumers depend on the headings and tables.6566````markdown67# Master Migration Plan6869**Solution:** {solution file name}70**Solution Root:** {REPOSITORY_ROOT}71**Created:** {timestamp}72**Last Updated:** {timestamp}7374## DDL Artifacts7576**Location:** {path to DDL artifacts, e.g., `.github/oracle-to-postgres-migration/DDL/`}77**External tool used:** {Yes / No} — {If Yes, name the tool (e.g., `ora2pg`) and note that Phase 4 (Schema & DDL Migration) can be skipped; PostgreSQL DDL artifacts already exist.}7879## Solution Summary8081| Metric | Count |82|--------|-------|83| Total projects in solution | {n} |84| Projects requiring migration | {n} |85| Projects already migrated | {n} |86| Projects skipped (no Oracle usage) | {n} |87| Test projects (handled separately) | {n} |8889## Project Inventory9091| # | Project Name | Path | Classification | Notes |92|---|---|---|---|---|93| 1 | {name} | {relative path} | MIGRATE | {notes} |94| 2 | {name} | {relative path} | SKIP | No Oracle dependencies |9596## Migration Order97981. **{ProjectName}** — {rationale, e.g., "Core data access library; other projects depend on it."}992. **{ProjectName}** — {rationale}100````101102## Gotchas103104- **Do not classify from project names alone**: require file evidence for `MIGRATE`, `SKIP`, `ALREADY_MIGRATED`, or `TEST_PROJECT`.105- **Do not bury DDL status**: if `.github/oracle-to-postgres-migration/DDL/` exists or an external tool such as `ora2pg` produced PostgreSQL artifacts, record whether Phase 4 can be skipped.106- **Do not migrate dependents first**: shared data access libraries should precede web APIs, console apps, and consumers.107108## Output template109110```markdown111## Oracle-to-PostgreSQL master migration plan112113**Status:** drafted | written | needs confirmation | blocked114**Solution:** `<solution.sln or solution.slnx>`115**Plan file:** `.github/oracle-to-postgres-migration/Reports/MasterMigrationPlan.md`116117### Classification summary118| Classification | Count | Projects |119| --- | ---: | --- |120| `MIGRATE` | <n> | <names> |121| `SKIP` | <n> | <names> |122| `ALREADY_MIGRATED` | <n> | <names> |123| `TEST_PROJECT` | <n> | <names> |124125### Migration order1261. <ProjectName> — <rationale>127128### Confirmation needed129- <classification or ordering question, or none>130```131132## Quality gate133134- [ ] A single `.sln` or `.slnx` solution was selected or the user was asked to choose.135- [ ] Every `.csproj` reference in the solution appears in the Project Inventory.136- [ ] Each project has exactly one classification: `MIGRATE`, `SKIP`, `ALREADY_MIGRATED`, or `TEST_PROJECT`.137- [ ] Oracle evidence includes NuGet, config, code, DDL references, migrated duplicates, or test indicators.138- [ ] Shared libraries precede dependent projects in Migration Order.139- [ ] The plan was written to `.github/oracle-to-postgres-migration/Reports/MasterMigrationPlan.md` using the required structure.