Skip to content

Add mainframe-exit migration plan for IPMS workload - #254

Open
devin-ai-integration[bot] wants to merge 1 commit into
mainfrom
devin/1784851127-migration-plan
Open

devin-ai-integration[bot] wants to merge 1 commit into
mainfrom
devin/1784851127-migration-plan

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Jul 24, 2026

Copy link
Copy Markdown

Summary

Adds MIGRATION_PLAN.md — a planning/architecture report recommending how to migrate the Investment Portfolio Management System off IBM i / z/OS. No code changes; single new markdown doc.

What it answers (the core sequencing question — "service-level vs data conversion first?"):

  • Rejects both wholesale "data-first big-bang" and "service/logic-first with a legacy data bridge" as banking-unsafe (data gravity, cross-platform ACID/2PC, blast radius, rollback).
  • Recommends a domain-by-domain Strangler Fig with a precise intra-domain order: data foundation first (ACL + reconciliation harness, then CDC/dual-write while the mainframe stays system-of-record), service migration second, and write-authority cutover last (reads cut over before writes, per domain).

Grounded in the actual repo inventory (counts verified from the tree/grep): 11 batch, 8 online/CICS, 8 portfolio, 6 common, 3 utility, 2 test programs; 20 copybooks; 15 JCL; DB2 (EXEC SQL×14) + CICS (EXEC CICS×8) + COMP-3×7 + VSAM ASSIGN×25. Flags real hotspots: VSAM↔DB2 dual persistence with mismatched keys, COMP-3 money precision, the checkpoint/restart spine, and the empty POSUPDT.cbl stub.

Contents: component inventory + dependency map, 6-R weighted scoring matrix, three-way sequencing decision matrix, 6-phase roadmap with entry/exit gates, data + service migration strategies, banking risk/governance controls, and ASCII diagrams (dependency map, disposition map, roadmap, target architecture) per the "visualize concepts" preference. Framework is written to be reusable for other mainframe-exit workloads.

A rendered PDF copy is attached to the requester in the session.

Link to Devin session: https://app.devin.ai/sessions/d4ca52d75f354735b6fef097a5856644
Requested by: @rayfan-cog


Devin Review

Status Commit
⚪ Not started

Run Devin Review

Open in Devin Review (Staging)

Co-Authored-By: Ray Fan <rayaun.fan@cognition.ai>
@devin-ai-integration

Copy link
Copy Markdown
Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment, CI, and merge conflict monitoring

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 3 potential issues.

Open in Devin Review

Comment thread MIGRATION_PLAN.md
| **Test** | 2 | `TSTGEN00` (data gen), `TSTVAL00` (validation) |
| **Copybooks (shared record layouts)** | 20 | `common/` (PORTFLIO, POSREC, TRNREC, HISTREC, PORTVAL, AUDITLOG, RTNCODE, ERRHAND, RETHND, COMMON), `batch/`, `db2/` (SQLCA, DBTBLS, DBPROC), `online/` (INQCOM, DB2REQ) |
| **JCL** | 15 | batch reports, portfolio CRUD, utility, test orchestration |
| **DB2 schema (SQL)** | 5 | `PORTFOLIO_MASTER`, `INVESTMENT_POSITIONS`, `TRANSACTION_HISTORY`, `POSHIST`, `RTNCODES`, `ERRLOG` |

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔍 DB2 schema row: count of 5 does not match the 6 objects listed

The inventory row claims 5 DB2 schema artifacts but enumerates six names (PORTFOLIO_MASTER, INVESTMENT_POSITIONS, TRANSACTION_HISTORY, POSHIST, RTNCODES, ERRLOG). The repo has exactly 5 SQL files (src/database/db2/RTNCODES.sql, PORTPLAN.sql, POSHIST.sql, db2-definitions.sql, ERRLOG.sql), so the count is per-file while the list is per-table — the two columns are measuring different things and read as an inconsistency. Also PORTPLAN.sql is not represented in the list at all.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment thread MIGRATION_PLAN.md
| **BMS map** | 1 | `INQSET.bms` (3270 screens) |
| **CICS CSD** | 1 | `PORTDFN.csd` |

**Technology surface (grep-verified):** `EXEC SQL` (DB2) in **14** programs; `EXEC CICS` (online) in **8**; `COMP-3` packed-decimal in **7** files; VSAM file `ASSIGN` in **25** programs.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔍 Grep-verified counts hold only when template files are excluded

I re-ran the stated greps: across src/programs the numbers match (EXEC SQL in 14, EXEC CICS in 8, VSAM ASSIGN in 25). Including src/templates/ they become 15 and 26 respectively. The COMP-3 in 7 files claim is the least reproducible: 8 files repo-wide contain COMP-3, and only 3 under programs+copybook. Worth stating the scope of the grep in the document so a reader can reproduce the inventory.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment thread MIGRATION_PLAN.md
Comment on lines +136 to +147
│ REFACTOR REFACTOR
│ PORTTRAN, POSUPDT PORTMSTR, PORTVALD
│ (money movement, (master + validation)
│ cost basis)
Business value │───────────────────────────────────────────────
│ REPLATFORM RETAIN → later refactor
│ RPT*, HISTLD00, INQ* online, SECMGR
│ UTL* (batch/reports) (encapsulate behind API)
│ RETIRE
│ POSUPDT.cbl (empty stub), TSTGEN/TSTVAL,
│ PORTTEST, duplicate VSAM-vs-DB2 once unified

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Info: POSUPDT is simultaneously slated for Refactor and Retire

The disposition map places POSUPDT under REFACTOR (money movement/cost basis) and POSUPDT.cbl (empty stub) under RETIRE, and §6.2 item 3 again lists POSUPDT as Refactor while item 4 calls for reverse-engineering the stub. src/programs/batch/POSUPDT.cbl is indeed 0 lines. The intent is presumably 'retire the empty artifact, refactor the behavior once reverse-engineered', but as written the two boxes contradict each other for a steering-committee audience.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants