Creating Oracle-to-PostgreSQL migration bug reports
Turn a migration defect into a reproducible report that compares Oracle baseline behavior with PostgreSQL behavior and names the exact remediation and validation path while preserving runtime/language context.
When to invoke
- "Create a bug report for this Oracle-to-PostgreSQL migration defect."
- "Document this PostgreSQL behavior difference from Oracle."
- "Write a migration bug report with severity and root cause."
- "Save a BUG_REPORT file for this stored procedure issue."
Prerequisites and context
- Use
references/BUG-REPORT-TEMPLATE.md as the report template.
- Oracle is the source of truth for expected behavior.
- Save reports to
.github/oracle-to-postgres-migration/Reports/{ProjectName}/BUG_REPORT_<DescriptiveSlug>.md.
{ProjectName} is the project assembly or folder name with spaces normalized to -, for example MyApp.DataAccess.
<DescriptiveSlug> is a short PascalCase defect identifier such as EmptyStringNullHandling or RefCursorUnwrapFailure.
- Preserve search compatibility with legacy migration notes that used
assembly/folder and (e.g. wording.
Bug report fields
| Field |
Required content |
| Status |
RESOLVED, UNRESOLVED, or IN PROGRESS. |
| Component |
Affected endpoint, repository, stored procedure, function, package, query, or migration file. |
| Test |
Related automated test names or the missing test that should be added. |
| Severity |
Low, Medium, High, or Critical based on impact scope. |
| Problem |
Expected Oracle behavior versus observed PostgreSQL behavior. |
| Scenario |
Ordered reproduction with seed data, operation, expected result, and actual result. |
| Root Cause |
The specific Oracle/PostgreSQL behavioral difference causing the defect. |
| Solution |
Changes made or required, including explicit file paths. |
| Validation |
Steps to confirm the fix on both Oracle and PostgreSQL. |
Oracle-to-PostgreSQL defect taxonomy
| Difference |
Evidence to capture |
Typical remediation direction |
| Empty string vs. NULL |
Input value, stored value, comparison result. |
Normalize at data boundary or adjust SQL predicates deliberately. |
| Type coercion strictness |
Oracle accepted implicit conversion but PostgreSQL rejected or compared differently. |
Add explicit casts or correct parameter types. |
| Collation and sorting |
Ordered result differs. |
Specify intended PostgreSQL collation or query order. |
| Sequence values |
Generated IDs diverge or sequence starts incorrectly. |
Align sequence ownership, start value, and next value. |
| Time zones |
Timestamp comparison or display differs. |
Use the correct timestamp type and explicit timezone handling. |
| Padding |
CHAR/VARCHAR comparisons or trailing spaces differ. |
Trim, change type, or preserve Oracle semantics intentionally. |
| Constraints |
PostgreSQL rejects data Oracle allowed, or missing constraints allow bad data. |
Add, relax, or migrate constraints with justification. |
Client code changes should be avoided unless required for correct behavior; when proposed, document and justify them clearly.
Writing rules
- Use plain language, short sentences, and clear next actions.
- Use present or past tense consistently.
- Use bullets and numbered lists for reproduction steps and validations.
- Include minimal SQL excerpts and logs as evidence; omit sensitive data and keep snippets reproducible.
- Stick to existing runtime and language versions; avoid speculative fixes.
Progressive disclosure and bundled resources
references/BUG-REPORT-TEMPLATE.md: canonical report structure to copy before filling evidence.
Output template
## Oracle-to-PostgreSQL migration bug report
**Status:** created | draft | blocked
**File:** `.github/oracle-to-postgres-migration/Reports/<ProjectName>/BUG_REPORT_<DescriptiveSlug>.md`
### Report fields
| Field | Value |
| --- | --- |
| Status | `RESOLVED` / `UNRESOLVED` / `IN PROGRESS` |
| Component | `<endpoint, repository, stored procedure, or file>` |
| Test | `<test names>` |
| Severity | `Low` / `Medium` / `High` / `Critical` |
| Root Cause | `<Oracle/PostgreSQL behavioral difference>` |
### Validation
- Oracle baseline reproduced: <yes/no>
- PostgreSQL divergence reproduced: <yes/no>
- Fix verified on both databases: <yes/no or pending>
Quality gate
1---2name: creating-oracle-to-postgres-migration-bug-report-33description: Create structured bug reports for Oracle-to-PostgreSQL migration defects with source-of-truth Oracle behavior, PostgreSQL divergence, severity, root cause, remediation, validation, and filename convention. Use when documenting behavioral differences, failed migration tests, or data-layer defects during an Oracle-to-PostgreSQL migration.4---56<!-- Generated from harness/github-copilot/plugins/oracle-to-postgres-migration-expert/skills/creating-oracle-to-postgres-migration-bug-report/SKILL.md by harness/claude-code/scripts/convert_from_copilot.py. Edit the source, not this file. -->78# Creating Oracle-to-PostgreSQL migration bug reports910Turn a migration defect into a reproducible report that compares Oracle baseline behavior with PostgreSQL behavior and names the exact remediation and validation path while preserving runtime/language context.1112## When to invoke1314- "Create a bug report for this Oracle-to-PostgreSQL migration defect."15- "Document this PostgreSQL behavior difference from Oracle."16- "Write a migration bug report with severity and root cause."17- "Save a BUG_REPORT file for this stored procedure issue."1819## Prerequisites and context2021- Use `references/BUG-REPORT-TEMPLATE.md` as the report template.22- Oracle is the source of truth for expected behavior.23- Save reports to `.github/oracle-to-postgres-migration/Reports/{ProjectName}/BUG_REPORT_<DescriptiveSlug>.md`.24- `{ProjectName}` is the project assembly or folder name with spaces normalized to `-`, for example `MyApp.DataAccess`.25- `<DescriptiveSlug>` is a short PascalCase defect identifier such as `EmptyStringNullHandling` or `RefCursorUnwrapFailure`.26- Preserve search compatibility with legacy migration notes that used `assembly/folder` and ` (e.g. ` wording.2728## Bug report fields2930| Field | Required content |31| --- | --- |32| Status | `RESOLVED`, `UNRESOLVED`, or `IN PROGRESS`. |33| Component | Affected endpoint, repository, stored procedure, function, package, query, or migration file. |34| Test | Related automated test names or the missing test that should be added. |35| Severity | Low, Medium, High, or Critical based on impact scope. |36| Problem | Expected Oracle behavior versus observed PostgreSQL behavior. |37| Scenario | Ordered reproduction with seed data, operation, expected result, and actual result. |38| Root Cause | The specific Oracle/PostgreSQL behavioral difference causing the defect. |39| Solution | Changes made or required, including explicit file paths. |40| Validation | Steps to confirm the fix on both Oracle and PostgreSQL. |4142## Oracle-to-PostgreSQL defect taxonomy4344| Difference | Evidence to capture | Typical remediation direction |45| --- | --- | --- |46| Empty string vs. NULL | Input value, stored value, comparison result. | Normalize at data boundary or adjust SQL predicates deliberately. |47| Type coercion strictness | Oracle accepted implicit conversion but PostgreSQL rejected or compared differently. | Add explicit casts or correct parameter types. |48| Collation and sorting | Ordered result differs. | Specify intended PostgreSQL collation or query order. |49| Sequence values | Generated IDs diverge or sequence starts incorrectly. | Align sequence ownership, start value, and next value. |50| Time zones | Timestamp comparison or display differs. | Use the correct timestamp type and explicit timezone handling. |51| Padding | `CHAR`/`VARCHAR` comparisons or trailing spaces differ. | Trim, change type, or preserve Oracle semantics intentionally. |52| Constraints | PostgreSQL rejects data Oracle allowed, or missing constraints allow bad data. | Add, relax, or migrate constraints with justification. |5354Client code changes should be avoided unless required for correct behavior; when proposed, document and justify them clearly.5556## Writing rules5758- Use plain language, short sentences, and clear next actions.59- Use present or past tense consistently.60- Use bullets and numbered lists for reproduction steps and validations.61- Include minimal SQL excerpts and logs as evidence; omit sensitive data and keep snippets reproducible.62- Stick to existing runtime and language versions; avoid speculative fixes.6364## Progressive disclosure and bundled resources6566- `references/BUG-REPORT-TEMPLATE.md`: canonical report structure to copy before filling evidence.6768## Output template6970```markdown71## Oracle-to-PostgreSQL migration bug report7273**Status:** created | draft | blocked74**File:** `.github/oracle-to-postgres-migration/Reports/<ProjectName>/BUG_REPORT_<DescriptiveSlug>.md`7576### Report fields77| Field | Value |78| --- | --- |79| Status | `RESOLVED` / `UNRESOLVED` / `IN PROGRESS` |80| Component | `<endpoint, repository, stored procedure, or file>` |81| Test | `<test names>` |82| Severity | `Low` / `Medium` / `High` / `Critical` |83| Root Cause | `<Oracle/PostgreSQL behavioral difference>` |8485### Validation86- Oracle baseline reproduced: <yes/no>87- PostgreSQL divergence reproduced: <yes/no>88- Fix verified on both databases: <yes/no or pending>89```9091## Quality gate9293- [ ] The report uses `references/BUG-REPORT-TEMPLATE.md`.94- [ ] Oracle behavior is stated as expected behavior and PostgreSQL behavior is stated as observed behavior.95- [ ] Severity is justified by impact scope.96- [ ] Root cause names a concrete Oracle/PostgreSQL behavioral difference, not a vague migration failure.97- [ ] Scenario includes seed data, operation, expected result, and actual result.98- [ ] Solution names explicit file paths and avoids client changes unless justified.99- [ ] Validation covers both Oracle and PostgreSQL.100- [ ] Filename follows `.github/oracle-to-postgres-migration/Reports/{ProjectName}/BUG_REPORT_<DescriptiveSlug>.md`.