@llm4ts/shell 0.17.0 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Cli.d.ts +4 -0
- package/dist/Cli.d.ts.map +1 -1
- package/dist/Cli.js +69 -8
- package/dist/Cli.js.map +1 -1
- package/dist/FlowCatalog.d.ts +10 -4
- package/dist/FlowCatalog.d.ts.map +1 -1
- package/dist/FlowCatalog.js +25 -14
- package/dist/FlowCatalog.js.map +1 -1
- package/flows/epic-stories.js +1 -8
- package/flows/hello.js +15 -0
- package/flows/implement.js +1 -8
- package/flows/issue-pr.js +1 -8
- package/flows/judge-suite.js +1 -4
- package/flows/lib/epic-stories.js +3 -4
- package/flows/local.js +2 -5
- package/flows/modernize-bench.js +3 -12
- package/flows/modernize-extract.js +38 -20
- package/flows/modernize-implement.js +4 -15
- package/flows/modernize-pack-check.js +1 -8
- package/flows/modernize-review.js +4 -13
- package/flows/modernize-seed.js +3 -11
- package/flows/modernize-survey.js +0 -0
- package/flows/modernize-verify.js +5 -13
- package/flows/sdd.js +2 -12
- package/kits/j2ee-nextjs/README.md +29 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/RUNBOOK.md +232 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/PAGES.md +67 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/pom.xml +49 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/dto/AcctOvwDTO.java +58 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/dto/BenfDTO.java +49 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/dto/TrfDTO.java +70 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbAcctListService.java +53 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbBenfListService.java +58 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbBenfMaintService.java +58 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbException.java +21 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbGateway.java +44 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbTrfExecService.java +53 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbTrfValidateService.java +45 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/web/AccountOverviewServlet.java +90 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/web/BeneficiaryServlet.java +195 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/web/TransferDraft.java +62 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/web/TransferServlet.java +223 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/WEB-INF/web.xml +59 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/accountOverview.jsp +65 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/beneficiaryEdit.jsp +70 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/beneficiaryList.jsp +43 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/css/bank.css +132 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/dashboard.jsp +28 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/footer.jsp +8 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/header.jsp +22 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/help.jsp +32 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/js/jquery-1.12.4.min.js +1 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/js/validate.js +79 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/login.jsp +29 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/messages.jsp +34 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/nav.jsp +14 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/oldTransfer.jsp +34 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/profile.jsp +26 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/promoQ3.jsp +23 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/settings.jsp +34 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/testHarness.jsp +39 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/transferConfirm.jsp +35 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/transferStep1.jsp +73 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/transferStep2.jsp +40 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/CONTRIBUTING.md +76 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/README.md +46 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/contracts/cards.openapi.yaml +57 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/contracts/profile.openapi.yaml +73 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/eslint.config.mjs +24 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/next-env.d.ts +5 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/next.config.mjs +10 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/package.json +29 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/pnpm-lock.yaml +2895 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/cards/page.tsx +62 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/layout.tsx +41 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/page.tsx +26 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/profile/page.tsx +134 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/signed-in-badge.tsx +9 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/auth/AuthProvider.tsx +36 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Button.tsx +27 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Card.tsx +18 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/DataTable.tsx +57 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Field.tsx +34 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Form.tsx +70 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/PageLayout.tsx +39 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Stepper.tsx +29 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/index.ts +19 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/cards/mock.ts +47 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/cards/port.ts +31 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/profile/mock.ts +45 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/profile/port.ts +24 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/registry.ts +20 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/theme/components.css +269 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/theme/tokens.css +38 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/tests/cards.page.test.tsx +81 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/tests/profile.page.test.tsx +87 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/tsconfig.json +54 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/vitest.config.ts +17 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/preflight.mjs +53 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/reset-demo.mjs +40 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/seed-legacy-j2ee.mjs +71 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/seed-nextjs.mjs +111 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/smoke-legacy-j2ee.mjs +144 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/smoke-nextjs.mjs +118 -0
- package/{flows → kits/j2ee-nextjs/flows}/convert-all.js +1 -7
- package/{flows → kits/j2ee-nextjs/flows}/convert-page.js +2 -6
- package/{flows → kits/j2ee-nextjs/flows}/lib/convert.js +6 -16
- package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/pack.md +2 -1
- package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/spec.md +5 -1
- package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/pack.md +1 -1
- package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/pack.md +1 -1
- package/kits/mainframe-java/README.md +31 -0
- package/{flows → kits/mainframe-java}/packs/ace-integration/pack.md +1 -1
- package/{flows → kits/mainframe-java}/packs/ace-kafka/pack.md +1 -1
- package/{flows → kits/mainframe-java}/packs/cobol-kafka/pack.md +1 -1
- package/{flows → kits/mainframe-java}/packs/cobol-springboot/pack.md +1 -1
- package/package.json +6 -6
- package/src/Cli.ts +92 -9
- package/src/FlowCatalog.ts +29 -13
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-001-jstl-table.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-002-jquery-validation.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-003-session-stepper.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-004-esb-port.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-005-include-shell.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/analysis.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/bdd.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/implement.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/plan.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/review.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/survey-refine.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/survey-triage.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/reviewers/acl-purity.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/reviewers/house-style.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/lessons.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/analysis.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/bdd.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/implement.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/plan.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/review.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/spec.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/survey-refine.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/survey-triage.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/reviewers/bff-boundary.md +0 -0
- /package/{flows/packs/ace-integration → kits/j2ee-nextjs/packs/jsp-bff-nextjs}/reviewers/traceability.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/lessons.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/analysis.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/bdd.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/implement.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/plan.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/review.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/spec.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/survey-refine.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/survey-triage.md +0 -0
- /package/{flows/packs/ace-kafka → kits/j2ee-nextjs/packs/jsp-nextjs}/reviewers/traceability.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/reviewers/ux-fidelity.md +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/README.md +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/app/layout.js +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/app/page.js +0 -0
- /package/{flows/fixtures/scaffolds/kafka-streams-service/src/test/resources/features → kits/j2ee-nextjs/scaffolds/nextjs-spa/docs/specs}/.gitkeep +0 -0
- /package/{flows/fixtures/scaffolds/nextjs-spa/docs/specs → kits/j2ee-nextjs/scaffolds/nextjs-spa/features}/.gitkeep +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/next.config.js +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/package.json +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/tests/smoke.test.js +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/README.md +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/app/layout.js +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/app/page.js +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/next.config.js +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/package.json +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/tests/smoke.test.js +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/pom.xml +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/scripts/test.sh +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/src/main/java/com/meridian/bff/Application.java +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/src/main/resources/application.yaml +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/src/test/java/com/meridian/bff/ApplicationTests.java +0 -0
- /package/{flows/fixtures/scaffolds/nextjs-spa → kits/j2ee-nextjs/scaffolds/spring-bff/src/test/resources}/features/.gitkeep +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-integration/lessons.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/analysis.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/bdd.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/implement.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/plan.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/review.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/spec.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-integration/reviewers/routing-fidelity.md +0 -0
- /package/{flows/packs/cobol-kafka → kits/mainframe-java/packs/ace-integration}/reviewers/traceability.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/lessons.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/analysis.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/bdd.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/implement.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/plan.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/review.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/spec.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/vectors.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/reviewers/event-contracts.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/reviewers/routing-fidelity.md +0 -0
- /package/{flows/packs/cobol-springboot → kits/mainframe-java/packs/ace-kafka}/reviewers/traceability.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/lessons.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-001-record-to-event.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-002-job-step-topology.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-003-checkpoint-idempotence.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-004-eod-totals-window.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-005-reject-topic.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-006-keyed-state-store.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-007-outbox.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-008-partition-key.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-009-batch-window-cutoff.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-010-replay-backfill.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/analysis.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/bdd.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/implement.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/plan.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/review.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/spec.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/survey-refine.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/survey-triage.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/vectors.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/reviewers/cobol-fidelity.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/reviewers/pattern-conformance.md +0 -0
- /package/{flows/packs/jsp-bff-nextjs → kits/mainframe-java/packs/cobol-kafka}/reviewers/traceability.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/lessons.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/analysis.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/bdd.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/implement.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/plan.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/review.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/spec.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/survey-refine.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/survey-triage.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/vectors.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/reviewers/cobol-fidelity.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/reviewers/pattern-conformance.md +0 -0
- /package/{flows/packs/jsp-nextjs → kits/mainframe-java/packs/cobol-springboot}/reviewers/traceability.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-001-comp3-money.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-002-redefines.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-003-88-levels.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-004-perform-thru.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-005-file-status.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-006-sqlcode.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-007-validation-order.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-008-zoned-decimal.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-009-occurs-table.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-010-copybook-record.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-011-batch-counters.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-012-commit-frequency.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-013-abend.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-014-reject-file.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-015-accept-date.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-016-string-building.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-017-cursor-loop.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-018-yn-switches.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-019-shared-accumulators.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-020-tiered-fees.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-021-overdraft-floor.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-022-jcl-job-net.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-023-sort-step.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-024-fixed-width-records.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-025-audit-rows.md +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/README.md +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/pom.xml +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/scripts/replay.sh +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/src/main/java/com/meridian/scaffold/Application.java +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/src/test/java/com/meridian/scaffold/ApplicationTests.java +0 -0
- /package/{flows/fixtures/scaffolds/spring-bff → kits/mainframe-java/scaffolds/kafka-streams-service}/src/test/resources/features/.gitkeep +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/README.md +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/pom.xml +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/scripts/replay.sh +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/src/main/java/com/meridian/scaffold/Application.java +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/src/main/resources/application.yaml +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/src/test/java/com/meridian/scaffold/ApplicationTests.java +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/src/test/resources/features/.gitkeep +0 -0
|
@@ -22,25 +22,14 @@ import { join } from "node:path";
|
|
|
22
22
|
import * as Effect from "effect/Effect";
|
|
23
23
|
import { Dimension, Sample } from "@llm4ts/core/eval/Eval";
|
|
24
24
|
import { judge } from "@llm4ts/core/eval/Judge";
|
|
25
|
-
import { makeChat } from "@llm4ts/
|
|
25
|
+
import { FlowAborted, FlowLlmError, Info, ReviewResult, asReadOnly, coderFromEnv, implementTaskLoop, lintCommand, loadKitPatternCards, makeChat, makeNodeWorkspace, makePlanStore, mergeReviewResults, minimalReviewers, nodePlainFileStore, nodeProcessExecutor, openPack, resolveFlowInput, reviewAndFixLoop, reviewFingerprint, runFlowMain, runNode, stage } from "@llm4ts/runner";
|
|
26
26
|
import { capped, renderTruncation, truncations, withShrink } from "@llm4ts/flow/Context";
|
|
27
|
-
import {
|
|
28
|
-
import { FlowEvents, Info } from "@llm4ts/flow/FlowEvents";
|
|
27
|
+
import { FlowEvents } from "@llm4ts/flow/FlowEvents";
|
|
29
28
|
import { judgeAllPrograms } from "@llm4ts/flow/ProgramJudge";
|
|
30
29
|
import { Provenance, makeProvenanceStore } from "@llm4ts/flow/Provenance";
|
|
31
30
|
import { loadPatternCards, taggedPatternIds } from "@llm4ts/flow/Patterns";
|
|
32
|
-
import {
|
|
33
|
-
import { implementTaskLoop, stage } from "@llm4ts/flow/PlanExecution";
|
|
34
|
-
import { ReviewIssue, ReviewResult, lintCommand, mergeReviewResults, minimalReviewers, reviewAndFixLoop } from "@llm4ts/flow/Review";
|
|
31
|
+
import { ReviewIssue } from "@llm4ts/flow/Review";
|
|
35
32
|
import { checkWall, wallBreachMessage } from "@llm4ts/flow/Wall";
|
|
36
|
-
import { asReadOnly, coderFromEnv } from "@llm4ts/runner/Connectors";
|
|
37
|
-
import { reviewFingerprint } from "@llm4ts/runner/ReviewFingerprint";
|
|
38
|
-
import { resolveFlowInput } from "@llm4ts/runner/FlowArgs";
|
|
39
|
-
import { runFlowMain, runNode } from "@llm4ts/runner/FlowRunner";
|
|
40
|
-
import { nodePlainFileStore } from "@llm4ts/runner/NodePlainFileStore";
|
|
41
|
-
import { nodeProcessExecutor } from "@llm4ts/runner/NodeProcessExecutor";
|
|
42
|
-
import { makeNodeWorkspace } from "@llm4ts/runner/NodeWorkspace";
|
|
43
|
-
import { loadUniversalPatternCards, openPack } from "@llm4ts/runner/Packs";
|
|
44
33
|
const ModDir = "docs/modernization";
|
|
45
34
|
const judgeRounds = () => {
|
|
46
35
|
const raw = Number.parseInt(process.env.LLM4TS_JUDGE_ROUNDS ?? "", 10);
|
|
@@ -182,7 +171,7 @@ const program = Effect.gen(function* () {
|
|
|
182
171
|
const specText = yield* gatherSpecs(target, pack.specsDir);
|
|
183
172
|
const cards = [
|
|
184
173
|
...(yield* loadPatternCards(opened.workspace, `${opened.dir}/patterns`)),
|
|
185
|
-
...(yield*
|
|
174
|
+
...(yield* loadKitPatternCards(opened))
|
|
186
175
|
];
|
|
187
176
|
const cited = new Set(taggedPatternIds(specText));
|
|
188
177
|
const playbook = cards.filter((card) => cited.has(card.id));
|
|
@@ -21,16 +21,9 @@
|
|
|
21
21
|
import { existsSync } from "node:fs";
|
|
22
22
|
import { join } from "node:path";
|
|
23
23
|
import * as Effect from "effect/Effect";
|
|
24
|
-
import { FlowAborted } from "@llm4ts/
|
|
25
|
-
import { Info } from "@llm4ts/flow/FlowEvents";
|
|
26
|
-
import { stage } from "@llm4ts/flow/PlanExecution";
|
|
24
|
+
import { FlowAborted, Info, makeNodeWorkspace, mock, openPack, resolveFlowInput, runFlowMain, runNode, stage } from "@llm4ts/runner";
|
|
27
25
|
import { coverageUnits, matchingFiles } from "@llm4ts/flow/SpecChecks";
|
|
28
26
|
import { legacySourceWorkspaceLimits, workspaceLimitsFromEnv } from "@llm4ts/flow/Workspace";
|
|
29
|
-
import { mock } from "@llm4ts/runner/Connectors";
|
|
30
|
-
import { resolveFlowInput } from "@llm4ts/runner/FlowArgs";
|
|
31
|
-
import { runFlowMain, runNode } from "@llm4ts/runner/FlowRunner";
|
|
32
|
-
import { makeNodeWorkspace } from "@llm4ts/runner/NodeWorkspace";
|
|
33
|
-
import { openPack } from "@llm4ts/runner/Packs";
|
|
34
27
|
/** Prompt sidecars the modernization phases read, with the phase that reads each. */
|
|
35
28
|
const phasePrompts = [
|
|
36
29
|
["analysis", "extract"],
|
|
@@ -20,24 +20,15 @@ import * as Schema from "effect/Schema";
|
|
|
20
20
|
import { Dimension } from "@llm4ts/core/eval/Eval";
|
|
21
21
|
import { judge } from "@llm4ts/core/eval/Judge";
|
|
22
22
|
import { capped, renderTruncation, truncations, withShrink } from "@llm4ts/flow/Context";
|
|
23
|
-
import { FlowAborted } from "@llm4ts/
|
|
23
|
+
import { FlowAborted, Info, Plan, ReviewResult, asReadOnly, coderFromEnv, makeNodeWorkspace, makePlanStore, mergeReviewResults, nodePlainFileStore, openPack, resolveFlowInput, reviewFingerprint, runFlowMain, runNode, stage } from "@llm4ts/runner";
|
|
24
24
|
import { structuredAndPublish } from "@llm4ts/flow/Flow";
|
|
25
|
-
import { FlowEvents
|
|
25
|
+
import { FlowEvents } from "@llm4ts/flow/FlowEvents";
|
|
26
26
|
import { judgeAllPrograms } from "@llm4ts/flow/ProgramJudge";
|
|
27
27
|
import { Provenance, makeProvenanceStore } from "@llm4ts/flow/Provenance";
|
|
28
28
|
import { appendPackLesson } from "@llm4ts/flow/Pack";
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import { stage } from "@llm4ts/flow/PlanExecution";
|
|
32
|
-
import { allReviewers, mergeReviewResults, reviewJsonSchema, reviewPrompt, ReviewResult } from "@llm4ts/flow/Review";
|
|
29
|
+
import { Task } from "@llm4ts/flow/Plan";
|
|
30
|
+
import { allReviewers, reviewJsonSchema, reviewPrompt } from "@llm4ts/flow/Review";
|
|
33
31
|
import { checkWall, wallBreachMessage } from "@llm4ts/flow/Wall";
|
|
34
|
-
import { asReadOnly, coderFromEnv } from "@llm4ts/runner/Connectors";
|
|
35
|
-
import { resolveFlowInput } from "@llm4ts/runner/FlowArgs";
|
|
36
|
-
import { runFlowMain, runNode } from "@llm4ts/runner/FlowRunner";
|
|
37
|
-
import { nodePlainFileStore } from "@llm4ts/runner/NodePlainFileStore";
|
|
38
|
-
import { makeNodeWorkspace } from "@llm4ts/runner/NodeWorkspace";
|
|
39
|
-
import { openPack } from "@llm4ts/runner/Packs";
|
|
40
|
-
import { reviewFingerprint } from "@llm4ts/runner/ReviewFingerprint";
|
|
41
32
|
const ModDir = "docs/modernization";
|
|
42
33
|
class FixSpec extends Schema.Class("FixSpec")({
|
|
43
34
|
title: Schema.String,
|
package/flows/modernize-seed.js
CHANGED
|
@@ -21,20 +21,12 @@
|
|
|
21
21
|
import { join } from "node:path";
|
|
22
22
|
import * as Effect from "effect/Effect";
|
|
23
23
|
import * as Schema from "effect/Schema";
|
|
24
|
-
import {
|
|
25
|
-
import { Info } from "@llm4ts/
|
|
24
|
+
import { PersistenceError } from "@llm4ts/flow/FlowError";
|
|
25
|
+
import { FlowAborted, Info, coderFromEnv, makeNodeWorkspace, nodePlainFileStore, openPack, parsePlan, resolveFlowInput, runFlowMain, runNode, stage } from "@llm4ts/runner";
|
|
26
26
|
import { packageVersion } from "@llm4ts/flow/Package";
|
|
27
|
-
import { parsePlan } from "@llm4ts/flow/Plan";
|
|
28
|
-
import { stage } from "@llm4ts/flow/PlanExecution";
|
|
29
27
|
import { Provenance, makeProvenanceStore } from "@llm4ts/flow/Provenance";
|
|
30
28
|
import { matchingFiles } from "@llm4ts/flow/SpecChecks";
|
|
31
|
-
import { requireApproval } from "@llm4ts/
|
|
32
|
-
import { coderFromEnv } from "@llm4ts/runner/Connectors";
|
|
33
|
-
import { resolveFlowInput } from "@llm4ts/runner/FlowArgs";
|
|
34
|
-
import { runFlowMain, runNode } from "@llm4ts/runner/FlowRunner";
|
|
35
|
-
import { nodePlainFileStore } from "@llm4ts/runner/NodePlainFileStore";
|
|
36
|
-
import { makeNodeWorkspace } from "@llm4ts/runner/NodeWorkspace";
|
|
37
|
-
import { openPack } from "@llm4ts/runner/Packs";
|
|
29
|
+
import { requireApproval } from "@llm4ts/flow/Approval";
|
|
38
30
|
const ModDir = "docs/modernization";
|
|
39
31
|
const skipped = new Set([".git", "target", "node_modules", "dist"]);
|
|
40
32
|
const Seats = Schema.Record(Schema.String, Schema.String);
|
|
Binary file
|
|
@@ -23,23 +23,15 @@ import * as Schema from "effect/Schema";
|
|
|
23
23
|
import { CurrentEquivSchema, EquivVector, Observations, canonicaliseFieldMap, readEquivVectors, replayEquivVector, diffObservations, writeEquivVectors } from "@llm4ts/flow/Equiv";
|
|
24
24
|
import { capped, renderTruncation, truncations, withShrink } from "@llm4ts/flow/Context";
|
|
25
25
|
import { renderEquivReport, VectorVerdict } from "@llm4ts/flow/EquivReport";
|
|
26
|
-
import {
|
|
26
|
+
import { PlanParseError } from "@llm4ts/flow/FlowError";
|
|
27
27
|
import { structuredAndPublish } from "@llm4ts/flow/Flow";
|
|
28
|
-
import { FlowEvents
|
|
29
|
-
import { makePlanStore } from "@llm4ts/
|
|
30
|
-
import {
|
|
31
|
-
import { Plan, Task } from "@llm4ts/flow/Plan";
|
|
28
|
+
import { FlowEvents } from "@llm4ts/flow/FlowEvents";
|
|
29
|
+
import { FlowAborted, Info, Plan, asReadOnly, coderFromEnv, makeNodeWorkspace, makePlanStore, nodePlainFileStore, nodeProcessExecutor, openPack, resolveFlowInput, runFlowMain, runNode, stage } from "@llm4ts/runner";
|
|
30
|
+
import { Task } from "@llm4ts/flow/Plan";
|
|
32
31
|
import { Provenance, makeProvenanceStore } from "@llm4ts/flow/Provenance";
|
|
33
32
|
import { matchingFiles } from "@llm4ts/flow/SpecChecks";
|
|
34
33
|
import { checkWall, wallBreachMessage } from "@llm4ts/flow/Wall";
|
|
35
|
-
import { generateVectorsResumably } from "@llm4ts/
|
|
36
|
-
import { asReadOnly, coderFromEnv } from "@llm4ts/runner/Connectors";
|
|
37
|
-
import { resolveFlowInput } from "@llm4ts/runner/FlowArgs";
|
|
38
|
-
import { runFlowMain, runNode } from "@llm4ts/runner/FlowRunner";
|
|
39
|
-
import { nodePlainFileStore } from "@llm4ts/runner/NodePlainFileStore";
|
|
40
|
-
import { nodeProcessExecutor } from "@llm4ts/runner/NodeProcessExecutor";
|
|
41
|
-
import { makeNodeWorkspace } from "@llm4ts/runner/NodeWorkspace";
|
|
42
|
-
import { openPack } from "@llm4ts/runner/Packs";
|
|
34
|
+
import { generateVectorsResumably } from "@llm4ts/flow/Artifacts";
|
|
43
35
|
const ModDir = "docs/modernization";
|
|
44
36
|
/**
|
|
45
37
|
* The model-facing vector shape: flat maps only, so structured output stays
|
package/flows/sdd.js
CHANGED
|
@@ -1,18 +1,8 @@
|
|
|
1
1
|
// Spec-driven development: write a specification, encode it as red tests, implement to green.
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import * as Effect from "effect/Effect";
|
|
4
|
-
import { makeChat } from "@llm4ts/
|
|
5
|
-
import {
|
|
6
|
-
import { Plan, defaultPlanPath } from "@llm4ts/flow/Plan";
|
|
7
|
-
import { implementTaskLoop, stage } from "@llm4ts/flow/PlanExecution";
|
|
8
|
-
import { defaultPlanInstructions, planFrom, writeBrief } from "@llm4ts/flow/Planner";
|
|
9
|
-
import { makePlanStore } from "@llm4ts/flow/Persistence";
|
|
10
|
-
import { lintCommand, minimalReviewers, reviewAndFixLoop } from "@llm4ts/flow/Review";
|
|
11
|
-
import { asReadOnly, coderFromEnv, gemini, withModel } from "@llm4ts/runner/Connectors";
|
|
12
|
-
import { resolveFlowInput } from "@llm4ts/runner/FlowArgs";
|
|
13
|
-
import { runFlowMain, runNode } from "@llm4ts/runner/FlowRunner";
|
|
14
|
-
import { nodePlainFileStore } from "@llm4ts/runner/NodePlainFileStore";
|
|
15
|
-
import { nodeProcessExecutor } from "@llm4ts/runner/NodeProcessExecutor";
|
|
4
|
+
import { FlowAborted, Plan, asReadOnly, coderFromEnv, defaultPlanInstructions, defaultPlanPath, implementTaskLoop, lintCommand, makeChat, makePlanStore, minimalReviewers, nodePlainFileStore, nodeProcessExecutor, planFrom, resolveFlowInput, reviewAndFixLoop, runFlowMain, runNode, stage, withModel, writeBrief } from "@llm4ts/runner";
|
|
5
|
+
import { gemini } from "@llm4ts/runner/Connectors";
|
|
16
6
|
const proModel = process.env.LLM4TS_REASONING_MODEL ?? "gemini-3-pro-preview";
|
|
17
7
|
const flashModel = process.env.LLM4TS_CODER_MODEL ?? "gemini-2.5-flash";
|
|
18
8
|
const specInstructions = [
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Kit: j2ee-nextjs
|
|
2
|
+
|
|
3
|
+
JSP/servlet estates to Next.js, as a SPA over a mocked anti-corruption layer or behind a Spring BFF.
|
|
4
|
+
|
|
5
|
+
A kit bundles everything the engine's `modernize-*` flows need to know about
|
|
6
|
+
one legacy source and one target stack (ADR 0014). This one ships three
|
|
7
|
+
packs, the two scaffolds they seed an empty target from, the `convert-page`
|
|
8
|
+
and `convert-all` flows that drive the non-clean-room page conversion of
|
|
9
|
+
ADR 0012, and the demo-bank fixture (a legacy J2EE estate and its Next.js
|
|
10
|
+
target) the [workshop runbook](fixtures/demo-bank/RUNBOOK.md) rehearses on.
|
|
11
|
+
|
|
12
|
+
| Pack | Legacy → target | Scaffold | Replay |
|
|
13
|
+
| -------------------------------------------------- | -------------------------------- | ------------ | ------ |
|
|
14
|
+
| [`j2ee-nextjs-spa`](packs/j2ee-nextjs-spa/pack.md) | JSP/servlets → Next.js SPA + ACL | `nextjs-spa` | no |
|
|
15
|
+
| [`jsp-nextjs`](packs/jsp-nextjs/pack.md) | JSP/Java → Next.js SPA | `nextjs-spa` | no |
|
|
16
|
+
| [`jsp-bff-nextjs`](packs/jsp-bff-nextjs/pack.md) | JSP/Java → Spring BFF + Next.js | `spring-bff` | no |
|
|
17
|
+
|
|
18
|
+
| Flow | What it does |
|
|
19
|
+
| -------------- | ---------------------------------------------------------------------- |
|
|
20
|
+
| `convert-page` | Convert ONE extracted page into the Next.js target on its own branch |
|
|
21
|
+
| `convert-all` | Walk the survey inventory in wave order, one branch per page, a report |
|
|
22
|
+
|
|
23
|
+
```sh
|
|
24
|
+
llm4ts run modernize-pack-check --pack j2ee-nextjs-spa --repo /path/to/legacy-estate
|
|
25
|
+
LLM4TS_LEGACY_REPO=/path/to/legacy-estate llm4ts run convert-page --pack j2ee-nextjs-spa --repo /path/to/nextjs accountOverview
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The convert flows default to `j2ee-nextjs-spa`; `kits/test/packs.test.ts`
|
|
29
|
+
shows what the flows require of a manifest.
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
# DemoBank workshop runbook
|
|
2
|
+
|
|
3
|
+
Half/full-day live workshop: the whole J2EE → Next.js conversion pipeline runs
|
|
4
|
+
in front of the client, with discussion between phases. There are no recorded
|
|
5
|
+
fallbacks by design — every phase is checkpointed (plan files, per-page
|
|
6
|
+
extraction resume, judge/review caches, the conversion board), so the recovery
|
|
7
|
+
move for ANY failure is: rerun the same command and watch it resume. That
|
|
8
|
+
recovery is itself a selling point; demonstrate it deliberately if a failure
|
|
9
|
+
hands you the chance.
|
|
10
|
+
|
|
11
|
+
Say out loud, at least once per act: **all token and cost figures are
|
|
12
|
+
estimates** (character-count heuristics — the CLI seats report no usage).
|
|
13
|
+
|
|
14
|
+
## Act 0 — before the audience arrives
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
node kits/j2ee-nextjs/fixtures/demo-bank/preflight.mjs
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Preflight seeds both fixtures into a temp dir, runs their smoke checks, and
|
|
21
|
+
verifies git, pnpm, the `claude` CLI, and that the installed `llm4ts` ships
|
|
22
|
+
the `j2ee-nextjs` kit with its `j2ee-nextjs-spa` pack (`@llm4ts/shell`
|
|
23
|
+
0.18.0 or newer). Fix anything red before continuing. Then materialize the
|
|
24
|
+
demo estate (pick a short path you can type on stage):
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
node kits/j2ee-nextjs/fixtures/demo-bank/reset-demo.mjs ~/demo
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
This creates `~/demo/legacy-j2ee` and `~/demo/nextjs` as fresh git repos and
|
|
31
|
+
warms the target's node_modules from the pnpm store (documented offline
|
|
32
|
+
strategy: the lockfile is committed; run it once on hotel wifi, never on
|
|
33
|
+
stage). Finally: `cd ~/demo/nextjs && pnpm test` must be green.
|
|
34
|
+
|
|
35
|
+
Timing bounds for the day (set in the environment you run flows from):
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
export LLM4TS_PACK=j2ee-nextjs-spa
|
|
39
|
+
export LLM4TS_LEGACY_REPO=~/demo/legacy-j2ee
|
|
40
|
+
export LLM4TS_JUDGE_ROUNDS=1 # bound judge feedback to one round on stage
|
|
41
|
+
export LLM4TS_MAX_CLOSURE_FILES=8 # bound legacy evidence per page
|
|
42
|
+
export LLM4TS_EXTRACT_CONCURRENCY=3 # pages extracted and judged at once (measure in rehearsal)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
`LLM4TS_PACK` is the one that matters for Act 1: it is what makes the survey
|
|
46
|
+
reason in J2EE terms (web.xml mappings, includes, forwards, ajax targets)
|
|
47
|
+
instead of the default COBOL pack's. It is a bare pack name, resolved across
|
|
48
|
+
the kits `llm4ts kits` lists — the `j2ee-nextjs` kit ships it — and every
|
|
49
|
+
`llm4ts run` below accepts the same value as `--pack j2ee-nextjs-spa` if you
|
|
50
|
+
would rather have it visible in the command on stage. Prove the whole
|
|
51
|
+
selection before anyone is watching, with no model call and no cost:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
llm4ts kits
|
|
55
|
+
llm4ts run modernize-pack-check --pack j2ee-nextjs-spa --repo ~/demo/legacy-j2ee
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The check must end `check passed with 1 warning`: 34 source files, 18 JSP
|
|
59
|
+
programs, the servlet, form, ajax, include, and servlet-class rules each
|
|
60
|
+
capturing real units, and the one expected warning — the pack ships no
|
|
61
|
+
`vectors` prompt because it runs no replay phase. If it says `not found: no kit ships it`, the installed shell is
|
|
62
|
+
older than 0.18.0. Discovery needs nothing extra for the fixture or for a
|
|
63
|
+
typical client estate — only files the pack's `sources:` regex matches
|
|
64
|
+
count, and `.git`, `node_modules`, `target`, `build`, `dist` are never
|
|
65
|
+
entered. Keep these two in your back pocket for a real estate with an
|
|
66
|
+
unusual layout, never set them on stage without a reason:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
export LLM4TS_EXCLUDE_DIRS=.git,node_modules,target,generated # replaces the pruned list
|
|
70
|
+
export LLM4TS_MAX_DISCOVER_RESULTS=50000 # default 20000 for estates
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Act 1 — breadth: survey and extract (~duration: measure in rehearsal)
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
llm4ts run modernize-survey --repo ~/demo/legacy-j2ee
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Talk track while it runs: 18 pages inventoried, dead pages and fragments
|
|
80
|
+
triaged out, waves proposed. Three beats, in the order the artifacts land:
|
|
81
|
+
|
|
82
|
+
1. `docs/modernization/inventory.md` — the deterministic graph, no model
|
|
83
|
+
involved yet. Point at the `In` column: `header` and `footer` carry one
|
|
84
|
+
incoming edge per page that includes them, `web` (web.xml) fans out to
|
|
85
|
+
every servlet, and the genuinely dead pages are the ones flagged
|
|
86
|
+
`unreferenced — retire candidate?`. That column is what the model is
|
|
87
|
+
asked to trust.
|
|
88
|
+
2. `docs/modernization/graph-refine.md` — the edges the regexes could not
|
|
89
|
+
see (form actions and redirects to url-patterns, ajax targets), each with
|
|
90
|
+
the file and line that establishes it. No evidence, no edge.
|
|
91
|
+
3. `docs/modernization/wave-plan.md` — fragments travel with the first page
|
|
92
|
+
that includes them, the ESB wrappers come out `wrap` (the port story for
|
|
93
|
+
Act 2), and the waves are user journeys: read-only screens, then CRUD,
|
|
94
|
+
then the session-backed transfer stepper last.
|
|
95
|
+
|
|
96
|
+
Say once that the prompts behind beats 2 and 3 are the pack's
|
|
97
|
+
(`kits/j2ee-nextjs/packs/j2ee-nextjs-spa/prompts/survey-*.md`), not the
|
|
98
|
+
tool's, and that the pack travels in a **kit** with its scaffold and
|
|
99
|
+
review lenses: a client with a different stack copies the kit into
|
|
100
|
+
`.llm4ts/kits/<client>/`, edits markdown, and runs `modernize-pack-check`
|
|
101
|
+
until it passes — the pipeline is untouched. Review the plan WITH the
|
|
102
|
+
audience, flip `- [x] Approved` (the human gate is the point — banks like
|
|
103
|
+
this beat).
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
LLM4TS_WAVE=wave-1 llm4ts run modernize-extract --repo ~/demo/legacy-j2ee
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Act 2 opens with `accountOverview`, and the survey's plan puts that page in
|
|
110
|
+
**wave-2** (wave-1 is the navigation shell: login, header, footer, nav,
|
|
111
|
+
dashboard, profile, settings, messages, help), so extract wave-2 as well
|
|
112
|
+
before Act 2 — it is one page plus its servlet and DTO, minutes not tens of
|
|
113
|
+
minutes. Each wave gates only its own units; the pages of later waves are
|
|
114
|
+
listed as "not gating" — say so when the line scrolls past, and mention the
|
|
115
|
+
closing run without `LLM4TS_WAVE` that enforces coverage over the whole
|
|
116
|
+
estate once every wave is in.
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
LLM4TS_WAVE=wave-2 llm4ts run modernize-extract --repo ~/demo/legacy-j2ee
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Extraction runs three pages at once (`LLM4TS_EXTRACT_CONCURRENCY=3` from Act
|
|
123
|
+
0): the pages of a wave are independent, each lands in its own commit holding
|
|
124
|
+
only its four files, and the log interleaves — say so before it starts, then
|
|
125
|
+
point at `git log --oneline` filling up out of page order. Two lines to say
|
|
126
|
+
aloud: concurrency divides the wall clock, not the cost (the estimates in
|
|
127
|
+
Act 3 are identical at 1 or 3), and if a quota death hits mid-batch the pages
|
|
128
|
+
already in flight still finish and land — the rerun resumes only what is
|
|
129
|
+
missing. If the client's plan rate-limits at 3, drop to 1 and narrate the
|
|
130
|
+
same resume. Show one finished spec: the prose, then the `json pagespec`
|
|
131
|
+
block, then the judge gate verdicts under `docs/modernization/gate/`.
|
|
132
|
+
|
|
133
|
+
## Act 2 — depth: convert (order: accountOverview → beneficiaryList → transferStep1)
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
llm4ts run convert-all --repo ~/demo/nextjs
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Beats to show while pages convert:
|
|
140
|
+
|
|
141
|
+
1. `.llm4ts/convert/board.md` in the target — the whole estate planned from
|
|
142
|
+
minute one, pages moving planned → active → done.
|
|
143
|
+
2. `contracts/<page>.openapi.yaml` — generated before any model wrote code;
|
|
144
|
+
this file is the future B4F team's requirements document.
|
|
145
|
+
3. A finished branch: `git log convert/accountOverview`, the page diff, the
|
|
146
|
+
port/mock pair, the component tests.
|
|
147
|
+
4. `docs/conversion/<page>.md` — the per-page report with the estimated
|
|
148
|
+
tokens/cost line.
|
|
149
|
+
5. The dev server (`pnpm dev`) showing the converted page next to an original
|
|
150
|
+
JSP screenshot: same form, new house style, mock data flowing through the
|
|
151
|
+
port.
|
|
152
|
+
|
|
153
|
+
## Act 3 — money and governance
|
|
154
|
+
|
|
155
|
+
Open `docs/conversion/migration-report.md`: per-page estimates, the remaining
|
|
156
|
+
estate, and the projection — then scale the projection aloud to the client's
|
|
157
|
+
real page count. Close on governance: branches await human review (no
|
|
158
|
+
auto-merge), every page has a spec, a contract, a judge verdict, and a report.
|
|
159
|
+
The kit is the deliverable the client keeps: their packs, scaffold, lenses,
|
|
160
|
+
and the lessons the review phase appends, in one directory they own.
|
|
161
|
+
|
|
162
|
+
Optional ADO mirror (decide before the workshop, never set it up live):
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
export LLM4TS_ADO_ORG_URL=https://dev.azure.com/<org>
|
|
166
|
+
export LLM4TS_ADO_PROJECT=<project>
|
|
167
|
+
# Auth belongs to the az CLI itself: `az devops login` beforehand (or
|
|
168
|
+
# AZURE_DEVOPS_EXT_PAT in the shell) — llm4ts never sees the PAT.
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Recovery drills (rehearse each one)
|
|
172
|
+
|
|
173
|
+
| Failure | Move |
|
|
174
|
+
| --- | --- |
|
|
175
|
+
| Rate limit / quota death mid-extract | Rerun the same command; per-page resume skips finished specs. Narrate it. |
|
|
176
|
+
| Rate limit mid-convert | Rerun `convert-all`; the board skips done pages, the plan file resumes the interrupted one. |
|
|
177
|
+
| A page's tests refuse to go green | Let `convert-all` mark it failed and keep walking (default); return to it in discussion. `LLM4TS_FAIL_FAST=1` exists but stays OFF on stage. |
|
|
178
|
+
| Machine sleep / network blip | Same as rate limit: rerun. |
|
|
179
|
+
| Judge keeps rejecting | `LLM4TS_JUDGE_ROUNDS=1` already bounds it; the failure lands on the board with its reason — governance beat, not a crash. |
|
|
180
|
+
| `⟳ flaky … (fresh retry)` lines scrolling past — Gemini CLI's `Loop detected` / `A potential loop was detected`, an empty response, a malformed tool call | Nothing to do: the seat restarts the turn in a fresh process, up to 6 times, and the flow carries on. Say it out loud: the turn was lost, the quota and the prompt were not. Only if all 6 fail does the stage abort — rerun, it resumes. |
|
|
181
|
+
| `⟳ structured output (repair retry)` lines — `Failed to parse response as structured output` | Nothing to do: the model gets its own parse failure quoted back and is asked for the JSON alone, up to 2 more times. If the third reply still does not parse the stage aborts with the reason — rerun resumes; a schema the model can never satisfy is a pack bug, not a stage bug. |
|
|
182
|
+
| `pack 'j2ee-nextjs-spa' not found: no kit ships it` | The shell predates kits (0.18.0) or `LLM4TS_PACK` was overwritten with a path: `llm4ts kits` shows what it sees; `npm i -g @llm4ts/shell@latest`; re-export the bare name. Never happens after a green Act 0. |
|
|
183
|
+
| Survey aborts with `discovery stopped at N matching files` (a client's real estate, never the fixture) | The abort names the knobs: tighten the pack's `sources:`/`exclude:`, prune more with `LLM4TS_EXCLUDE_DIRS=.git,node_modules,generated`, or raise `LLM4TS_MAX_DISCOVER_RESULTS`. Rerun. |
|
|
184
|
+
| Everything is on fire | `node kits/j2ee-nextjs/fixtures/demo-bank/reset-demo.mjs ~/demo` and restart the act; Act 1 re-runs in minutes. |
|
|
185
|
+
|
|
186
|
+
## Rehearsal log (fill in — the durations above are placeholders until this is done twice)
|
|
187
|
+
|
|
188
|
+
| Rehearsal | Date | Act 1 | Act 2/page | Full walk | Notes |
|
|
189
|
+
| --- | --- | --- | --- | --- | --- |
|
|
190
|
+
| 1 | 2026-09-14/15 | survey 5m47s ($1.08 est.); extract wave-1 (9 pages, concurrency 3): 11m06s extraction + 1m40s gate + fix rounds ≈ 30–45 min; extract wave-2 (1 page): 2m27s extraction + gate/fix rounds ≈ 16 min | accountOverview 44m29s: acl 12m36s, page 18m33s, tests 12m25s, verify 11s, judge 44s — judge NOT cleared | ≈ 2h30 of flow time, plus reruns | first live walk; 4 findings below, 3 fixed in 0.18.1; the demo estate was a scratch copy, the coder seat `claude` |
|
|
191
|
+
| 2 | | | | | |
|
|
192
|
+
|
|
193
|
+
### Rehearsal 1 findings (2026-09-14/15)
|
|
194
|
+
|
|
195
|
+
1. **Act 2's first page is not in wave-1.** The survey puts `accountOverview`
|
|
196
|
+
in wave-2 (wave-1 is the navigation shell). Act 1 now extracts wave-2 as
|
|
197
|
+
well (see above). Runbook fixed.
|
|
198
|
+
2. **A wave-scoped extraction could never clear its gate.** Coverage ran
|
|
199
|
+
over the whole estate, so wave-1 failed on `/accountOverview` and
|
|
200
|
+
`doTransfer` (wave-2/4 units) and burned three fix rounds — ~17 min per
|
|
201
|
+
attempt — trying to cover them. Fixed in 0.18.1: a wave gates only its
|
|
202
|
+
own units and lists the rest as not gating; one closing run without
|
|
203
|
+
`LLM4TS_WAVE` enforces estate-wide coverage.
|
|
204
|
+
3. **A malformed `pagespec` block reached `convert-page`.** The old
|
|
205
|
+
estate-wide fix round had drafted `accountOverview.md` with `apiCalls`
|
|
206
|
+
as prose strings; the judge scored it, and `convert-page` was the first
|
|
207
|
+
to reject it (`invalid page spec block ... at ["apiCalls"][0]`). Fixed in
|
|
208
|
+
0.18.1: J2EE packs declare `spec-schema: pagespec`, the extraction gate
|
|
209
|
+
decodes every block by code before the judge, and the finding states the
|
|
210
|
+
exact shape the analyst must produce (the first fix round without that
|
|
211
|
+
hint failed twice; with it, one round).
|
|
212
|
+
4. **The page spec cannot express a list response.** `apiCalls[].response`
|
|
213
|
+
is a flat list of field mappings, so the deterministic OpenAPI contract
|
|
214
|
+
flattened `accts[].curBal` into a single `currentBalance` scalar and the
|
|
215
|
+
coder built a one-balance page; the judge scored spec-compliance 0
|
|
216
|
+
against the spec's per-account table. OPEN: `PageSpec` needs a DTO
|
|
217
|
+
reference with a list/single shape on the response (and `openApiFor`
|
|
218
|
+
an array schema) before Act 2 can pass on `accountOverview`. Until then,
|
|
219
|
+
rehearse Act 2 on a single-object page, or accept the judge failure as
|
|
220
|
+
the governance beat it is (the branch, contract, tests, and gates are all
|
|
221
|
+
there; only the judge verdict blocks).
|
|
222
|
+
|
|
223
|
+
Also observed, not fixed: Claude's structured replies for page specs
|
|
224
|
+
arrived with raw control characters inside JSON strings on three of nine
|
|
225
|
+
wave-1 pages, each costing one repair retry (self-healed); the extraction
|
|
226
|
+
judge's context is narrower than the analyst's closure, so it scored
|
|
227
|
+
`faithfulness` 1 for facts the analyst legitimately read from the servlet
|
|
228
|
+
and ESB sources; `convert-page` places `layout.tsx`, `registry.ts`, and
|
|
229
|
+
`components.css` edits outside the pack's `programFiles`, so the judge sees
|
|
230
|
+
them only as a summary and returns three "cannot verify" findings. Cost
|
|
231
|
+
figures were estimates throughout; the first wave-1 attempt alone reported
|
|
232
|
+
$12.26 estimated before it was stopped.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# DemoBank Legacy Portal - Page Inventory
|
|
2
|
+
|
|
3
|
+
Synthetic legacy J2EE fixture for the bank-conversion PoC demo. Authored
|
|
4
|
+
from scratch; no real bank code or branding. This file is the answer key
|
|
5
|
+
for judging survey/extract quality: it lists every page, its live/dead
|
|
6
|
+
status, and the page -> endpoint -> ESB-service mapping.
|
|
7
|
+
|
|
8
|
+
All JSPs live under `src/main/webapp/`. Java sources live under
|
|
9
|
+
`src/main/java/com/demobank/legacy/` (`web/` controllers, `dto/` data
|
|
10
|
+
classes, `esb/` fake ESB service wrappers). The app is not runnable and is
|
|
11
|
+
not meant to be; it only has to read as authentic mid-2000s J2EE.
|
|
12
|
+
|
|
13
|
+
## Hero pages
|
|
14
|
+
|
|
15
|
+
The three pages the workshop converts end to end. Each exercises a
|
|
16
|
+
different legacy mix on purpose:
|
|
17
|
+
|
|
18
|
+
| # | Page | Mix it exercises |
|
|
19
|
+
| --- | ------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
20
|
+
| 1 | `accountOverview.jsp` | Server-rendered JSTL table from a request-scoped model, plus a jQuery `$.ajax` GET that refreshes balances as JSON. Read-only. |
|
|
21
|
+
| 2 | `beneficiaryList.jsp` + `beneficiaryEdit.jsp` | CRUD list + form. Client-side jQuery validation (inline + shared `validate.js`) AND server-side validation in the servlet; the two rule sets deliberately overlap but are not identical. |
|
|
22
|
+
| 3 | `transferStep1.jsp` -> `transferStep2.jsp` -> `transferConfirm.jsp` | Multi-step wizard keeping a `TransferDraft` in `HttpSession` across steps; scriptlets mixed with JSTL. The hardest extraction case. |
|
|
23
|
+
|
|
24
|
+
## Full page list
|
|
25
|
+
|
|
26
|
+
| Page | Status | Notes |
|
|
27
|
+
| --------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
28
|
+
| `login.jsp` | live | Welcome page (see `web.xml` welcome-file). Filler shell; form posts to a servlet that does not exist on purpose (`j_security_check` style legacy stub). |
|
|
29
|
+
| `dashboard.jsp` | live | Filler landing page after login; scriptlet date banner. |
|
|
30
|
+
| `accountOverview.jsp` | live (HERO 1) | Served by `AccountOverviewServlet` forward. |
|
|
31
|
+
| `beneficiaryList.jsp` | live (HERO 2) | Served by `BeneficiaryServlet` forward. |
|
|
32
|
+
| `beneficiaryEdit.jsp` | live (HERO 2) | Add/edit form; posts back to `BeneficiaryServlet`. |
|
|
33
|
+
| `transferStep1.jsp` | live (HERO 3) | Amount + beneficiary pick. |
|
|
34
|
+
| `transferStep2.jsp` | live (HERO 3) | Review screen; data comes from session draft. |
|
|
35
|
+
| `transferConfirm.jsp` | live (HERO 3) | Result screen; shows ESB reference number. |
|
|
36
|
+
| `settings.jsp` | live | Filler; scriptlet-heavy preference toggles, nothing wired. |
|
|
37
|
+
| `profile.jsp` | live | Filler; static customer data with scriptlets. |
|
|
38
|
+
| `messages.jsp` | live | Filler; inbox-style static table. |
|
|
39
|
+
| `help.jsp` | live | Filler; static FAQ. |
|
|
40
|
+
| `oldTransfer.jsp` | DEAD | Pre-wizard single-page transfer. Not in nav, not in `web.xml`, nothing links to it. |
|
|
41
|
+
| `promoQ3.jsp` | DEAD | Expired Q3 2011 campaign page. Unreferenced. |
|
|
42
|
+
| `testHarness.jsp` | DEAD | Developer scratch page hitting endpoints by hand. Unreferenced. |
|
|
43
|
+
| `header.jsp` | fragment | Included via `<jsp:include>` from every page. |
|
|
44
|
+
| `nav.jsp` | fragment | Included from `header.jsp`; the nav link set defines "referenced". |
|
|
45
|
+
| `footer.jsp` | fragment | Included via `<jsp:include>` from every page. |
|
|
46
|
+
|
|
47
|
+
Live pages: 12. Dead pages: 3. Fragments: 3. Total JSP files: 18.
|
|
48
|
+
|
|
49
|
+
## Page -> endpoint -> ESB service (answer key)
|
|
50
|
+
|
|
51
|
+
| Page | HTTP endpoint (`web.xml` url-pattern) | Controller | ESB wrapper | ESB service id |
|
|
52
|
+
| --------------------- | -------------------------------------------------------------------------------- | ------------------------ | ---------------------------------------- | ---------------- |
|
|
53
|
+
| `accountOverview.jsp` | `GET /accountOverview` (HTML), `GET /accountOverview?fmt=json` (AJAX refresh) | `AccountOverviewServlet` | `EsbAcctListService` | `ESB_ACCT_LIST` |
|
|
54
|
+
| `beneficiaryList.jsp` | `GET /beneficiary` (list), `GET /beneficiary?action=delete&benfId=..` | `BeneficiaryServlet` | `EsbBenfListService` | `ESB_BENF_LIST` |
|
|
55
|
+
| `beneficiaryEdit.jsp` | `GET /beneficiary?action=edit&benfId=..` (load form), `POST /beneficiary` (save) | `BeneficiaryServlet` | `EsbBenfMaintService` | `ESB_BENF_MAINT` |
|
|
56
|
+
| `transferStep1.jsp` | `GET /transfer` (start), `POST /transfer` with `step=1` | `TransferServlet` | `EsbBenfListService` (beneficiary combo) | `ESB_BENF_LIST` |
|
|
57
|
+
| `transferStep2.jsp` | `POST /transfer` with `step=2` (validate draft) | `TransferServlet` | `EsbTrfValidateService` | `ESB_TRF_VAL` |
|
|
58
|
+
| `transferConfirm.jsp` | `POST /transfer` with `step=3` (execute) | `TransferServlet` | `EsbTrfExecService` | `ESB_TRF_EXEC` |
|
|
59
|
+
| dead pages | none | none | none | none |
|
|
60
|
+
|
|
61
|
+
DTOs: `AcctOvwDTO` (hero 1), `BenfDTO` (hero 2), `TrfDTO` + session-held
|
|
62
|
+
`TransferDraft` (hero 3). Field names use period-typical abbreviations
|
|
63
|
+
(`acctNo`, `curBal`, `avlBal`, `ccyCd`, `benfNm`, `trfAmt`, ...) so the
|
|
64
|
+
anti-corruption renaming in a Page Spec has something to bite on.
|
|
65
|
+
|
|
66
|
+
All data is fictional: EUR accounts, fake IBAN-like numbers in the form
|
|
67
|
+
`IT00 DEMO 0000 ...`, customer "MARIO BIANCHI" / customer id `CUST0042`.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!--
|
|
3
|
+
DemoBank legacy portal - build skeleton only.
|
|
4
|
+
This fixture is not meant to compile or deploy; the pom exists so the
|
|
5
|
+
tree reads as a period-typical Maven WAR module.
|
|
6
|
+
-->
|
|
7
|
+
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
|
8
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
9
|
+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
|
10
|
+
<modelVersion>4.0.0</modelVersion>
|
|
11
|
+
|
|
12
|
+
<groupId>com.demobank.legacy</groupId>
|
|
13
|
+
<artifactId>demobank-portal</artifactId>
|
|
14
|
+
<version>2.7.14-SNAPSHOT</version>
|
|
15
|
+
<packaging>war</packaging>
|
|
16
|
+
<name>DemoBank Internet Banking Portal</name>
|
|
17
|
+
|
|
18
|
+
<properties>
|
|
19
|
+
<project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>
|
|
20
|
+
<maven.compiler.source>1.6</maven.compiler.source>
|
|
21
|
+
<maven.compiler.target>1.6</maven.compiler.target>
|
|
22
|
+
</properties>
|
|
23
|
+
|
|
24
|
+
<dependencies>
|
|
25
|
+
<dependency>
|
|
26
|
+
<groupId>javax.servlet</groupId>
|
|
27
|
+
<artifactId>servlet-api</artifactId>
|
|
28
|
+
<version>2.5</version>
|
|
29
|
+
<scope>provided</scope>
|
|
30
|
+
</dependency>
|
|
31
|
+
<dependency>
|
|
32
|
+
<groupId>javax.servlet</groupId>
|
|
33
|
+
<artifactId>jstl</artifactId>
|
|
34
|
+
<version>1.2</version>
|
|
35
|
+
</dependency>
|
|
36
|
+
<dependency>
|
|
37
|
+
<groupId>javax.servlet.jsp</groupId>
|
|
38
|
+
<artifactId>jsp-api</artifactId>
|
|
39
|
+
<version>2.1</version>
|
|
40
|
+
<scope>provided</scope>
|
|
41
|
+
</dependency>
|
|
42
|
+
<!-- ESB connectivity jars are provided by the app server shared lib
|
|
43
|
+
(see deployment runbook DB-OPS-114, not part of this repo). -->
|
|
44
|
+
</dependencies>
|
|
45
|
+
|
|
46
|
+
<build>
|
|
47
|
+
<finalName>demobank-portal</finalName>
|
|
48
|
+
</build>
|
|
49
|
+
</project>
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
package com.demobank.legacy.dto;
|
|
2
|
+
|
|
3
|
+
import java.io.Serializable;
|
|
4
|
+
import java.math.BigDecimal;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Account overview row DTO.
|
|
8
|
+
*
|
|
9
|
+
* Field names mirror the host copybook CBACCT01 (abbreviations kept on
|
|
10
|
+
* purpose so the mapping to ESB_ACCT_LIST stays 1:1). Do NOT rename: the
|
|
11
|
+
* JSPs and the JSON serializer rely on the getter names.
|
|
12
|
+
*
|
|
13
|
+
* @author gferri (2008)
|
|
14
|
+
*/
|
|
15
|
+
public class AcctOvwDTO implements Serializable {
|
|
16
|
+
|
|
17
|
+
private static final long serialVersionUID = 1L;
|
|
18
|
+
|
|
19
|
+
/** Account number, host format (12 digits, branch prefixed). */
|
|
20
|
+
private String acctNo;
|
|
21
|
+
/** IBAN presentation form, e.g. "IT00 DEMO 0101 0101 0000 0000 001". */
|
|
22
|
+
private String acctIban;
|
|
23
|
+
/** Short description from host, e.g. "CURRENT ACCOUNT". */
|
|
24
|
+
private String acctDesc;
|
|
25
|
+
/** ISO currency code, always EUR for domestic accounts. */
|
|
26
|
+
private String ccyCd;
|
|
27
|
+
/** Current (booked) balance. */
|
|
28
|
+
private BigDecimal curBal;
|
|
29
|
+
/** Available balance (booked minus holds). */
|
|
30
|
+
private BigDecimal avlBal;
|
|
31
|
+
/** Account status cd: A=active, B=blocked, C=closed. */
|
|
32
|
+
private String staCd;
|
|
33
|
+
|
|
34
|
+
public AcctOvwDTO() {
|
|
35
|
+
// bean constructor
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public String getAcctNo() { return acctNo; }
|
|
39
|
+
public void setAcctNo(String acctNo) { this.acctNo = acctNo; }
|
|
40
|
+
|
|
41
|
+
public String getAcctIban() { return acctIban; }
|
|
42
|
+
public void setAcctIban(String acctIban) { this.acctIban = acctIban; }
|
|
43
|
+
|
|
44
|
+
public String getAcctDesc() { return acctDesc; }
|
|
45
|
+
public void setAcctDesc(String acctDesc) { this.acctDesc = acctDesc; }
|
|
46
|
+
|
|
47
|
+
public String getCcyCd() { return ccyCd; }
|
|
48
|
+
public void setCcyCd(String ccyCd) { this.ccyCd = ccyCd; }
|
|
49
|
+
|
|
50
|
+
public BigDecimal getCurBal() { return curBal; }
|
|
51
|
+
public void setCurBal(BigDecimal curBal) { this.curBal = curBal; }
|
|
52
|
+
|
|
53
|
+
public BigDecimal getAvlBal() { return avlBal; }
|
|
54
|
+
public void setAvlBal(BigDecimal avlBal) { this.avlBal = avlBal; }
|
|
55
|
+
|
|
56
|
+
public String getStaCd() { return staCd; }
|
|
57
|
+
public void setStaCd(String staCd) { this.staCd = staCd; }
|
|
58
|
+
}
|