@llm4ts/shell 0.4.0 → 0.6.0
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.map +1 -1
- package/dist/Cli.js +5 -1
- package/dist/Cli.js.map +1 -1
- package/flows/fixtures/scaffolds/kafka-streams-service/README.md +12 -0
- package/flows/fixtures/scaffolds/kafka-streams-service/pom.xml +49 -0
- package/flows/fixtures/scaffolds/kafka-streams-service/scripts/replay.sh +10 -0
- package/flows/fixtures/scaffolds/kafka-streams-service/src/main/java/com/meridian/scaffold/Application.java +29 -0
- package/flows/fixtures/scaffolds/kafka-streams-service/src/test/java/com/meridian/scaffold/ApplicationTests.java +21 -0
- package/flows/fixtures/scaffolds/kafka-streams-service/src/test/resources/features/.gitkeep +0 -0
- package/flows/fixtures/scaffolds/nextjs-spa/README.md +6 -0
- package/flows/fixtures/scaffolds/nextjs-spa/app/layout.js +11 -0
- package/flows/fixtures/scaffolds/nextjs-spa/app/page.js +7 -0
- package/flows/fixtures/scaffolds/nextjs-spa/docs/specs/.gitkeep +0 -0
- package/flows/fixtures/scaffolds/nextjs-spa/features/.gitkeep +0 -0
- package/flows/fixtures/scaffolds/nextjs-spa/next.config.js +7 -0
- package/flows/fixtures/scaffolds/nextjs-spa/package.json +15 -0
- package/flows/fixtures/scaffolds/nextjs-spa/tests/smoke.test.js +6 -0
- package/flows/fixtures/scaffolds/spring-bff/README.md +9 -0
- package/flows/fixtures/scaffolds/spring-bff/frontend/app/layout.js +11 -0
- package/flows/fixtures/scaffolds/spring-bff/frontend/app/page.js +7 -0
- package/flows/fixtures/scaffolds/spring-bff/frontend/next.config.js +7 -0
- package/flows/fixtures/scaffolds/spring-bff/frontend/package.json +15 -0
- package/flows/fixtures/scaffolds/spring-bff/frontend/tests/smoke.test.js +6 -0
- package/flows/fixtures/scaffolds/spring-bff/pom.xml +57 -0
- package/flows/fixtures/scaffolds/spring-bff/scripts/test.sh +6 -0
- package/flows/fixtures/scaffolds/spring-bff/src/main/java/com/meridian/bff/Application.java +12 -0
- package/flows/fixtures/scaffolds/spring-bff/src/main/resources/application.yaml +12 -0
- package/flows/fixtures/scaffolds/spring-bff/src/test/java/com/meridian/bff/ApplicationTests.java +12 -0
- package/flows/fixtures/scaffolds/spring-bff/src/test/resources/features/.gitkeep +0 -0
- package/flows/fixtures/scaffolds/spring-boot-service/README.md +7 -0
- package/flows/fixtures/scaffolds/spring-boot-service/pom.xml +53 -0
- package/flows/fixtures/scaffolds/spring-boot-service/scripts/replay.sh +9 -0
- package/flows/fixtures/scaffolds/spring-boot-service/src/main/java/com/meridian/scaffold/Application.java +12 -0
- package/flows/fixtures/scaffolds/spring-boot-service/src/main/resources/application.yaml +12 -0
- package/flows/fixtures/scaffolds/spring-boot-service/src/test/java/com/meridian/scaffold/ApplicationTests.java +12 -0
- package/flows/fixtures/scaffolds/spring-boot-service/src/test/resources/features/.gitkeep +0 -0
- package/flows/modernize-bench.ts +10 -4
- package/flows/modernize-extract.ts +17 -8
- package/flows/modernize-implement.ts +13 -6
- package/flows/modernize-review.ts +14 -6
- package/flows/modernize-seed.ts +12 -5
- package/flows/modernize-survey.ts +0 -0
- package/flows/modernize-verify.ts +11 -4
- package/flows/packs/ace-integration/lessons.md +6 -0
- package/flows/packs/ace-integration/pack.md +29 -0
- package/flows/packs/ace-integration/prompts/analysis.md +21 -0
- package/flows/packs/ace-integration/prompts/bdd.md +13 -0
- package/flows/packs/ace-integration/prompts/implement.md +17 -0
- package/flows/packs/ace-integration/prompts/plan.md +12 -0
- package/flows/packs/ace-integration/prompts/review.md +17 -0
- package/flows/packs/ace-integration/prompts/spec.md +29 -0
- package/flows/packs/ace-integration/reviewers/routing-fidelity.md +19 -0
- package/flows/packs/ace-integration/reviewers/traceability.md +13 -0
- package/flows/packs/ace-kafka/lessons.md +6 -0
- package/flows/packs/ace-kafka/pack.md +36 -0
- package/flows/packs/ace-kafka/prompts/analysis.md +21 -0
- package/flows/packs/ace-kafka/prompts/bdd.md +13 -0
- package/flows/packs/ace-kafka/prompts/implement.md +34 -0
- package/flows/packs/ace-kafka/prompts/plan.md +12 -0
- package/flows/packs/ace-kafka/prompts/review.md +17 -0
- package/flows/packs/ace-kafka/prompts/spec.md +31 -0
- package/flows/packs/ace-kafka/prompts/vectors.md +21 -0
- package/flows/packs/ace-kafka/reviewers/event-contracts.md +9 -0
- package/flows/packs/ace-kafka/reviewers/routing-fidelity.md +19 -0
- package/flows/packs/ace-kafka/reviewers/traceability.md +13 -0
- package/flows/packs/cobol-kafka/lessons.md +3 -0
- package/flows/packs/cobol-kafka/pack.md +51 -0
- package/flows/packs/cobol-kafka/patterns/PAT-STREAM-001-record-to-event.md +7 -0
- package/flows/packs/cobol-kafka/patterns/PAT-STREAM-002-job-step-topology.md +6 -0
- package/flows/packs/cobol-kafka/patterns/PAT-STREAM-003-checkpoint-idempotence.md +7 -0
- package/flows/packs/cobol-kafka/patterns/PAT-STREAM-004-eod-totals-window.md +7 -0
- package/flows/packs/cobol-kafka/patterns/PAT-STREAM-005-reject-topic.md +6 -0
- package/flows/packs/cobol-kafka/patterns/PAT-STREAM-006-keyed-state-store.md +7 -0
- package/flows/packs/cobol-kafka/patterns/PAT-STREAM-007-outbox.md +7 -0
- package/flows/packs/cobol-kafka/patterns/PAT-STREAM-008-partition-key.md +7 -0
- package/flows/packs/cobol-kafka/patterns/PAT-STREAM-009-batch-window-cutoff.md +7 -0
- package/flows/packs/cobol-kafka/patterns/PAT-STREAM-010-replay-backfill.md +7 -0
- package/flows/packs/cobol-kafka/prompts/analysis.md +23 -0
- package/flows/packs/cobol-kafka/prompts/bdd.md +15 -0
- package/flows/packs/cobol-kafka/prompts/implement.md +47 -0
- package/flows/packs/cobol-kafka/prompts/plan.md +13 -0
- package/flows/packs/cobol-kafka/prompts/review.md +17 -0
- package/flows/packs/cobol-kafka/prompts/spec.md +28 -0
- package/flows/packs/cobol-kafka/prompts/vectors.md +21 -0
- package/flows/packs/cobol-kafka/reviewers/cobol-fidelity.md +16 -0
- package/flows/packs/cobol-kafka/reviewers/pattern-conformance.md +10 -0
- package/flows/packs/cobol-kafka/reviewers/traceability.md +13 -0
- package/flows/packs/cobol-springboot/lessons.md +3 -0
- package/flows/packs/cobol-springboot/pack.md +51 -0
- package/flows/packs/cobol-springboot/prompts/analysis.md +23 -0
- package/flows/packs/cobol-springboot/prompts/bdd.md +15 -0
- package/flows/packs/cobol-springboot/prompts/implement.md +31 -0
- package/flows/packs/cobol-springboot/prompts/plan.md +13 -0
- package/flows/packs/cobol-springboot/prompts/review.md +17 -0
- package/flows/packs/cobol-springboot/prompts/spec.md +28 -0
- package/flows/packs/cobol-springboot/prompts/vectors.md +22 -0
- package/flows/packs/cobol-springboot/reviewers/cobol-fidelity.md +16 -0
- package/flows/packs/cobol-springboot/reviewers/pattern-conformance.md +10 -0
- package/flows/packs/cobol-springboot/reviewers/traceability.md +13 -0
- package/flows/packs/jsp-bff-nextjs/lessons.md +6 -0
- package/flows/packs/jsp-bff-nextjs/pack.md +30 -0
- package/flows/packs/jsp-bff-nextjs/prompts/analysis.md +20 -0
- package/flows/packs/jsp-bff-nextjs/prompts/bdd.md +10 -0
- package/flows/packs/jsp-bff-nextjs/prompts/implement.md +17 -0
- package/flows/packs/jsp-bff-nextjs/prompts/plan.md +12 -0
- package/flows/packs/jsp-bff-nextjs/prompts/review.md +16 -0
- package/flows/packs/jsp-bff-nextjs/prompts/spec.md +27 -0
- package/flows/packs/jsp-bff-nextjs/reviewers/bff-boundary.md +18 -0
- package/flows/packs/jsp-bff-nextjs/reviewers/traceability.md +13 -0
- package/flows/packs/jsp-nextjs/lessons.md +6 -0
- package/flows/packs/jsp-nextjs/pack.md +29 -0
- package/flows/packs/jsp-nextjs/prompts/analysis.md +21 -0
- package/flows/packs/jsp-nextjs/prompts/bdd.md +12 -0
- package/flows/packs/jsp-nextjs/prompts/implement.md +17 -0
- package/flows/packs/jsp-nextjs/prompts/plan.md +14 -0
- package/flows/packs/jsp-nextjs/prompts/review.md +16 -0
- package/flows/packs/jsp-nextjs/prompts/spec.md +26 -0
- package/flows/packs/jsp-nextjs/reviewers/traceability.md +13 -0
- package/flows/packs/jsp-nextjs/reviewers/ux-fidelity.md +16 -0
- package/flows/patterns/PAT-COBOL-001-comp3-money.md +7 -0
- package/flows/patterns/PAT-COBOL-002-redefines.md +7 -0
- package/flows/patterns/PAT-COBOL-003-88-levels.md +7 -0
- package/flows/patterns/PAT-COBOL-004-perform-thru.md +7 -0
- package/flows/patterns/PAT-COBOL-005-file-status.md +6 -0
- package/flows/patterns/PAT-COBOL-006-sqlcode.md +7 -0
- package/flows/patterns/PAT-COBOL-007-validation-order.md +7 -0
- package/flows/patterns/PAT-COBOL-008-zoned-decimal.md +6 -0
- package/flows/patterns/PAT-COBOL-009-occurs-table.md +6 -0
- package/flows/patterns/PAT-COBOL-010-copybook-record.md +7 -0
- package/flows/patterns/PAT-COBOL-011-batch-counters.md +6 -0
- package/flows/patterns/PAT-COBOL-012-commit-frequency.md +7 -0
- package/flows/patterns/PAT-COBOL-013-abend.md +6 -0
- package/flows/patterns/PAT-COBOL-014-reject-file.md +6 -0
- package/flows/patterns/PAT-COBOL-015-accept-date.md +6 -0
- package/flows/patterns/PAT-COBOL-016-string-building.md +6 -0
- package/flows/patterns/PAT-COBOL-017-cursor-loop.md +6 -0
- package/flows/patterns/PAT-COBOL-018-yn-switches.md +6 -0
- package/flows/patterns/PAT-COBOL-019-shared-accumulators.md +6 -0
- package/flows/patterns/PAT-COBOL-020-tiered-fees.md +7 -0
- package/flows/patterns/PAT-COBOL-021-overdraft-floor.md +7 -0
- package/flows/patterns/PAT-COBOL-022-jcl-job-net.md +6 -0
- package/flows/patterns/PAT-COBOL-023-sort-step.md +6 -0
- package/flows/patterns/PAT-COBOL-024-fixed-width-records.md +6 -0
- package/flows/patterns/PAT-COBOL-025-audit-rows.md +6 -0
- package/package.json +5 -4
- package/src/Cli.ts +10 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
Write one behavioural spec per COBOL program as Markdown with exactly these sections:
|
|
2
|
+
|
|
3
|
+
# <PROGRAM> — <one-line purpose>
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
What the program does, when it runs (from the JCL), and its inputs/outputs (files,
|
|
7
|
+
tables).
|
|
8
|
+
|
|
9
|
+
## Business rules
|
|
10
|
+
A numbered list (R1, R2, ...) of every rule, in the order the code applies them.
|
|
11
|
+
Each rule states its exact values (amounts, rates, codes) and its outcome. Validation
|
|
12
|
+
rules state what is checked, in what order, and which reject reason code fires.
|
|
13
|
+
|
|
14
|
+
## Error handling
|
|
15
|
+
Reject reason codes with trigger conditions; database error behaviour (SQLCODE
|
|
16
|
+
handling, rollback, abend code, return code).
|
|
17
|
+
|
|
18
|
+
## Data access
|
|
19
|
+
Tables read/written, per operation, including commit frequency.
|
|
20
|
+
|
|
21
|
+
## Orchestration
|
|
22
|
+
The JCL steps that run this program: order, condition codes, restart notes.
|
|
23
|
+
|
|
24
|
+
## Open questions
|
|
25
|
+
Anything ambiguous in the source. Empty section if none.
|
|
26
|
+
|
|
27
|
+
Rules must be source-grounded: every number, code, and ordering comes from the code,
|
|
28
|
+
not from banking domain knowledge.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
You generate equivalence vectors for a COBOL batch program from its behavioural spec.
|
|
2
|
+
A vector is one execution: the inputs that drive it and the exact observations the
|
|
3
|
+
spec promises. Both sides of the wall anchor on the SPEC's names — the replay harness
|
|
4
|
+
is built from the same specs, so never invent field names.
|
|
5
|
+
|
|
6
|
+
Conventions for this pack (COBOL batch → Spring Boot):
|
|
7
|
+
|
|
8
|
+
- inputs: use the COBOL record/field names from the spec verbatim as keys
|
|
9
|
+
(e.g. "XFER-AMOUNT": "500.00", "FROM-ACCT": "1000012"), plus any pre-existing
|
|
10
|
+
account/customer state the scenario needs, prefixed "state:"
|
|
11
|
+
(e.g. "state:FROM-BALANCE": "2500.00", "state:DAILY-XFER-TOTAL": "0.00").
|
|
12
|
+
Amounts are plain scale-2 decimal strings, dates ISO-8601.
|
|
13
|
+
- observations, kind "record": emitted output/reject/report records — channel is
|
|
14
|
+
"output:<name>" using the spec's output record names; fields carry the record's
|
|
15
|
+
values exactly as the spec states them.
|
|
16
|
+
- observations, kind "db": LEDGER/AUDIT/… mutations — channel is the DB2 table name
|
|
17
|
+
from the data mapping, op is insert/update/delete, key addresses the row, fields
|
|
18
|
+
are the columns written.
|
|
19
|
+
- Respect the spec's validation ORDER: first failure wins — a rejected transfer
|
|
20
|
+
emits its reject record and NO ledger mutations.
|
|
21
|
+
- Status and reason codes verbatim from the spec; every amount scale-2 (fees rounded
|
|
22
|
+
HALF_UP where the spec says ROUNDED).
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
files: .*\.java
|
|
3
|
+
---
|
|
4
|
+
You are the COBOL-fidelity reviewer for a mainframe-to-Spring-Boot port. Your single
|
|
5
|
+
concern: does the Java preserve the exact semantics the specs carried over from COBOL?
|
|
6
|
+
|
|
7
|
+
Flag as Critical:
|
|
8
|
+
- float/double anywhere money, rates, or balances flow; BigDecimal without explicit
|
|
9
|
+
scale or with a rounding mode other than HALF_UP where the spec says COBOL ROUNDED.
|
|
10
|
+
- Validation checks that run in a different order than the spec's numbered rules
|
|
11
|
+
(first-failure-wins means order is observable behaviour).
|
|
12
|
+
- Reason codes, thresholds, fees, caps, or floors that differ from the spec values in
|
|
13
|
+
any digit.
|
|
14
|
+
- Boundary drift: <= where the spec says <, exclusive where inclusive.
|
|
15
|
+
|
|
16
|
+
Ignore style, naming, and framework choices — other reviewers own those.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
files: .*\.(java|kt|scala)
|
|
3
|
+
---
|
|
4
|
+
The specs cite pattern cards (PAT-… ids) — the translation playbook for known
|
|
5
|
+
legacy idioms. For each cited card, check the implementation follows its
|
|
6
|
+
translation (BigDecimal/HALF_UP where comp3-money is cited, sealed variants for
|
|
7
|
+
redefines, keyed state stores where keyed-state-store is cited, …). Patterns are
|
|
8
|
+
ADVISORY heuristics: report divergence as minor findings naming the card id, and
|
|
9
|
+
accept divergence the specs or target architecture explicitly justify — the
|
|
10
|
+
specs always win over the cards.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
You are the traceability reviewer for a spec-driven modernization. Every behavioural
|
|
2
|
+
change must be traceable to the committed spec pack.
|
|
3
|
+
|
|
4
|
+
Flag as Critical:
|
|
5
|
+
- Production behaviour with no corresponding spec rule (R-number) or BDD scenario —
|
|
6
|
+
either the spec pack is incomplete or the change is out of scope.
|
|
7
|
+
- Changes to .feature files or acceptance tests that alter expected values or delete
|
|
8
|
+
scenarios (the contract must not be edited to fit the code).
|
|
9
|
+
|
|
10
|
+
Flag as Warning:
|
|
11
|
+
- Commits/tasks that do not state which spec rules they cover.
|
|
12
|
+
|
|
13
|
+
Ignore refactors with no behavioural surface.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
- When splitting a server-rendered app into BFF + SPA, assign every legacy server
|
|
2
|
+
behaviour an explicit owner (BFF or SPA) in the spec BEFORE implementing: rules
|
|
3
|
+
that end up enforced only client-side are the most common regression in this
|
|
4
|
+
migration shape.
|
|
5
|
+
- Legacy error message texts are contract at the BFF boundary: return them verbatim
|
|
6
|
+
in error responses so the SPA (and any other consumer) can assert them.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Pack: jsp-bff-nextjs
|
|
2
|
+
|
|
3
|
+
source: jsp
|
|
4
|
+
scaffold: ../../fixtures/scaffolds/spring-bff
|
|
5
|
+
sources: .*\.(jsp|java|xml)
|
|
6
|
+
programs: .*\.(jsp|java)
|
|
7
|
+
specs-dir: docs/specs
|
|
8
|
+
features-dir: src/test/resources/features
|
|
9
|
+
|
|
10
|
+
## Gates
|
|
11
|
+
|
|
12
|
+
- build: mvn -q -B test-compile
|
|
13
|
+
- test: bash scripts/test.sh
|
|
14
|
+
- verify: bash scripts/test.sh
|
|
15
|
+
|
|
16
|
+
## Judge
|
|
17
|
+
|
|
18
|
+
- completeness (0..2): Every screen, servlet mapping (web.xml url-pattern), navigation path, validation rule, user-facing message, session behaviour, and data write in the JSP/servlet source is captured in the specs and BDD scenarios, and every server responsibility is assigned to the BFF. Score 2 only if nothing material is missing.
|
|
19
|
+
- faithfulness (0..2): Every statement is grounded in the source: validation thresholds, exact message texts, redirect targets, and which table each action writes match the code, and nothing is invented. Score 2 only if fully source-grounded.
|
|
20
|
+
- testability (0..2): Scenarios are concrete journeys and API interactions — specific accounts, amounts, exact messages, exact BFF request/response shapes; no vague language. Score 2 only if every scenario is directly encodable as a test.
|
|
21
|
+
|
|
22
|
+
## Coverage: servlet-url
|
|
23
|
+
|
|
24
|
+
files: .*web\.xml
|
|
25
|
+
unit: <url-pattern>([^<]+)</url-pattern>
|
|
26
|
+
|
|
27
|
+
## Coverage: jsp-form
|
|
28
|
+
|
|
29
|
+
files: .*\.jsp
|
|
30
|
+
unit: action="([^"]+)"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
You are a legacy-web reverse-engineering analyst. Extract the COMPLETE observable
|
|
2
|
+
behaviour of this J2EE/JSP application into a spec pack precise enough to rebuild it
|
|
3
|
+
as a Spring Boot BFF plus a thin Next.js SPA.
|
|
4
|
+
|
|
5
|
+
How to read the app:
|
|
6
|
+
|
|
7
|
+
- Start from WEB-INF/web.xml: every url-pattern is an entry point and must be
|
|
8
|
+
accounted for.
|
|
9
|
+
- Servlets carry the behaviour: request-parameter validation (exact rules AND exact
|
|
10
|
+
error message texts), session reads/writes, redirects vs forwards, and every
|
|
11
|
+
database read/write (which table, which columns, which values).
|
|
12
|
+
- JSPs carry the screens: fields shown, status-code-to-label mappings, forms
|
|
13
|
+
(including hidden fields), links.
|
|
14
|
+
- Draw the RESPONSIBILITY SPLIT as you go: anything the servlet did on the server —
|
|
15
|
+
authoritative validation, session state, data access, orchestration — belongs to
|
|
16
|
+
the BFF; the SPA renders, mirrors validation for UX, and navigates. The mapping
|
|
17
|
+
document defines the BFF's API contract between them.
|
|
18
|
+
|
|
19
|
+
Never invent behaviour; message texts and thresholds are contract — record them
|
|
20
|
+
verbatim. Ambiguity goes in "Open questions", not guesses.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Write Gherkin .feature files encoding the specs as executable scenarios — these
|
|
2
|
+
drive the BFF's acceptance tests (and the SPA mirrors them).
|
|
3
|
+
|
|
4
|
+
- One feature per screen/flow; scenarios exercise behaviour through the BFF API
|
|
5
|
+
(Given an account state, When the client posts a transfer of 3000.00, Then the
|
|
6
|
+
response requires confirmation) in user-domain vocabulary.
|
|
7
|
+
- Error messages asserted VERBATIM — the BFF returns the exact legacy texts.
|
|
8
|
+
- Concrete values everywhere; threshold boundaries get scenarios on both sides.
|
|
9
|
+
- Cover: each flow's happy path, EVERY validation rule and its message,
|
|
10
|
+
confirmation flows, and what lands in the data store on success.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
You implement one task at a time in a monorepo replacing a J2EE/JSP application:
|
|
2
|
+
Spring Boot 3 / Java 21 BFF at the root, client-only Next.js SPA under frontend/.
|
|
3
|
+
The committed specs under docs/specs/ and the .feature files under
|
|
4
|
+
src/test/resources/features/ are the contract; the acceptance tests encode them —
|
|
5
|
+
make them pass without weakening them.
|
|
6
|
+
|
|
7
|
+
Non-negotiables:
|
|
8
|
+
|
|
9
|
+
- The BFF is authoritative: every validation rule runs server-side, in the spec's
|
|
10
|
+
numbered order, returning the EXACT legacy message texts in error responses. SPA
|
|
11
|
+
validation is a UX mirror, never the only enforcement.
|
|
12
|
+
- Thresholds keep their inclusive/exclusive semantics; money is BigDecimal in the
|
|
13
|
+
BFF and exact-decimal handling in the SPA — no float/double.
|
|
14
|
+
- Legacy session/hidden-field state becomes explicit, named state (BFF session or
|
|
15
|
+
SPA client state per the spec) — never re-derived.
|
|
16
|
+
- The SPA talks only to the BFF through one API client module (the test seam).
|
|
17
|
+
- `bash scripts/test.sh` (backend + frontend tests) is the gate — keep both green.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
Derive the implementation task list for the BFF+SPA monorepo (Spring Boot backend
|
|
2
|
+
at the root, Next.js under frontend/) from the spec pack. Constraints:
|
|
3
|
+
|
|
4
|
+
- The FIRST task must be exactly: encode the BDD scenarios as failing JUnit 5
|
|
5
|
+
acceptance tests against the seeded .feature files, driving the BFF API (no
|
|
6
|
+
production code).
|
|
7
|
+
- Early tasks: BFF request/response DTOs per the spec's API contract, then one task
|
|
8
|
+
per flow implementing the BFF endpoint with authoritative validation (verbatim
|
|
9
|
+
messages, spec rule order) and data access.
|
|
10
|
+
- Later tasks: SPA screens under frontend/ consuming the BFF, mirroring validation
|
|
11
|
+
for UX, with node:test coverage mocking the BFF at the fetch seam.
|
|
12
|
+
- Each task names the spec rules (R1, ...) and scenarios it covers.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
You review a finished modernization increment: a Spring Boot BFF + Next.js SPA
|
|
2
|
+
built from specs reverse-engineered out of a J2EE/JSP app. Judge against the
|
|
3
|
+
committed spec pack, not your own taste.
|
|
4
|
+
|
|
5
|
+
Look specifically for:
|
|
6
|
+
|
|
7
|
+
- Boundary erosion: business rules enforced only in the SPA, or duplicated with
|
|
8
|
+
drift between SPA and BFF (the BFF must be authoritative and match the spec).
|
|
9
|
+
- Message drift: error texts differing from the spec's verbatim messages at either
|
|
10
|
+
layer.
|
|
11
|
+
- Rule reordering, threshold boundary drift, skipped confirmation steps.
|
|
12
|
+
- API contract drift: BFF endpoints diverging from the spec's documented shapes.
|
|
13
|
+
- Weakened tests: scenarios deleted, assertions loosened, boundaries moved.
|
|
14
|
+
|
|
15
|
+
Classify each finding as FIX (violates the spec) or IMPROVEMENT (compliant but
|
|
16
|
+
worth a follow-up).
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
Write one behavioural spec per screen/servlet cluster as Markdown with exactly these
|
|
2
|
+
sections:
|
|
3
|
+
|
|
4
|
+
# <Screen or flow> — <one-line purpose>
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
What the user does here, entry url-pattern(s), where it navigates.
|
|
8
|
+
|
|
9
|
+
## Screens
|
|
10
|
+
What each page shows, forms and their fields (including hidden fields), links.
|
|
11
|
+
|
|
12
|
+
## Business rules
|
|
13
|
+
Numbered (R1, R2, ...), in the order the servlet applies them: validation rules with
|
|
14
|
+
their EXACT error message texts, thresholds (with boundary semantics), confirmation
|
|
15
|
+
steps, and what each successful action writes (table, columns, values).
|
|
16
|
+
|
|
17
|
+
## BFF API contract
|
|
18
|
+
The endpoints the BFF exposes to the SPA for this flow (method, path,
|
|
19
|
+
request/response shape, error responses carrying the rule's message), and which
|
|
20
|
+
rules the BFF enforces authoritatively.
|
|
21
|
+
|
|
22
|
+
## Session & state
|
|
23
|
+
What the legacy app kept in session/hidden fields, and whether it becomes BFF
|
|
24
|
+
session state or SPA client state.
|
|
25
|
+
|
|
26
|
+
## Open questions
|
|
27
|
+
Anything ambiguous in the source. Empty if none.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
files: .*\.(java|js|jsx|ts|tsx)
|
|
3
|
+
---
|
|
4
|
+
You are the boundary reviewer for a JSP-to-BFF+SPA port. Your single concern: the
|
|
5
|
+
responsibility split between the Spring Boot BFF and the Next.js SPA.
|
|
6
|
+
|
|
7
|
+
Flag as Critical:
|
|
8
|
+
- A business rule (validation, threshold, confirmation, authorization) enforced
|
|
9
|
+
ONLY client-side — the BFF must enforce it authoritatively.
|
|
10
|
+
- BFF error responses whose message texts differ from the spec's verbatim legacy
|
|
11
|
+
messages.
|
|
12
|
+
- The SPA calling anything other than the BFF, or bypassing the shared API client
|
|
13
|
+
module.
|
|
14
|
+
- Session-scoped legacy state materialized as ad-hoc globals instead of the state
|
|
15
|
+
home the spec assigns (BFF session vs SPA client state).
|
|
16
|
+
- float/double on money in the BFF; floating-point arithmetic on amounts in the SPA.
|
|
17
|
+
|
|
18
|
+
Ignore styling and framework idioms — other reviewers own those.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
You are the traceability reviewer for a spec-driven modernization. Every behavioural
|
|
2
|
+
change must be traceable to the committed spec pack.
|
|
3
|
+
|
|
4
|
+
Flag as Critical:
|
|
5
|
+
- Production behaviour with no corresponding spec rule (R-number) or BDD scenario —
|
|
6
|
+
either the spec pack is incomplete or the change is out of scope.
|
|
7
|
+
- Changes to .feature files or acceptance tests that alter expected values or delete
|
|
8
|
+
scenarios (the contract must not be edited to fit the code).
|
|
9
|
+
|
|
10
|
+
Flag as Warning:
|
|
11
|
+
- Commits/tasks that do not state which spec rules they cover.
|
|
12
|
+
|
|
13
|
+
Ignore refactors with no behavioural surface.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
- Server-side validation messages in legacy JSP apps are contract, not copy: port
|
|
2
|
+
them verbatim into the SPA and assert them verbatim in tests — "close enough"
|
|
3
|
+
wording breaks screen-scraping downstream consumers and user muscle memory.
|
|
4
|
+
- Hidden form fields and session attributes are the legacy app's state model: make
|
|
5
|
+
each one an explicit, named piece of client state before porting any screen that
|
|
6
|
+
touches it.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Pack: jsp-nextjs
|
|
2
|
+
|
|
3
|
+
source: jsp
|
|
4
|
+
scaffold: ../../fixtures/scaffolds/nextjs-spa
|
|
5
|
+
sources: .*\.(jsp|java|xml)
|
|
6
|
+
programs: .*\.(jsp|java)
|
|
7
|
+
specs-dir: docs/specs
|
|
8
|
+
features-dir: features
|
|
9
|
+
|
|
10
|
+
## Gates
|
|
11
|
+
|
|
12
|
+
- build: npm test
|
|
13
|
+
- test: npm test
|
|
14
|
+
|
|
15
|
+
## Judge
|
|
16
|
+
|
|
17
|
+
- completeness (0..2): Every screen, servlet mapping (web.xml url-pattern), navigation path, validation rule, user-facing message, and data write in the JSP/servlet source is captured in the specs and BDD scenarios. Score 2 only if nothing material is missing.
|
|
18
|
+
- faithfulness (0..2): Every statement is grounded in the source: validation thresholds, exact message texts, redirect targets, session behaviour, and which table each action writes match the code, and nothing is invented. Score 2 only if fully source-grounded.
|
|
19
|
+
- testability (0..2): Scenarios are concrete user journeys — specific accounts, amounts, and the exact message or destination screen expected; no vague language ("shows an error", "handled gracefully"). Score 2 only if every scenario is directly encodable as a test.
|
|
20
|
+
|
|
21
|
+
## Coverage: servlet-url
|
|
22
|
+
|
|
23
|
+
files: .*web\.xml
|
|
24
|
+
unit: <url-pattern>([^<]+)</url-pattern>
|
|
25
|
+
|
|
26
|
+
## Coverage: jsp-form
|
|
27
|
+
|
|
28
|
+
files: .*\.jsp
|
|
29
|
+
unit: action="([^"]+)"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
You are a legacy-web reverse-engineering analyst. Extract the COMPLETE observable
|
|
2
|
+
behaviour of this J2EE/JSP application into a spec pack precise enough that a team
|
|
3
|
+
who never sees this source can rebuild it as a client-only SPA.
|
|
4
|
+
|
|
5
|
+
How to read the app:
|
|
6
|
+
|
|
7
|
+
- Start from WEB-INF/web.xml: every url-pattern is an entry point and must be
|
|
8
|
+
accounted for.
|
|
9
|
+
- Servlets carry the behaviour: request-parameter validation (exact rules AND exact
|
|
10
|
+
error message texts), session reads/writes, redirects vs forwards, and every
|
|
11
|
+
database read/write (which table, which columns, which values — e.g. rows queued
|
|
12
|
+
for a batch rather than posted online).
|
|
13
|
+
- JSPs carry the screens: what is displayed per row, status-code-to-label mappings,
|
|
14
|
+
forms (fields, hidden fields, where they submit), links between screens.
|
|
15
|
+
- Hidden fields and session attributes are STATE the SPA must own explicitly —
|
|
16
|
+
document what flows through them.
|
|
17
|
+
- The SPA will be client-only: everything the servlets did on the server becomes an
|
|
18
|
+
API the SPA expects. The mapping document must define that expected API contract.
|
|
19
|
+
|
|
20
|
+
Never invent behaviour; message texts and thresholds are contract — record them
|
|
21
|
+
verbatim. Genuinely ambiguous behaviour goes in "Open questions", not guesses.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
Write Gherkin .feature files encoding the specs as executable user journeys — these
|
|
2
|
+
become the acceptance tests of the new SPA.
|
|
3
|
+
|
|
4
|
+
- One feature per screen/flow.
|
|
5
|
+
- User vocabulary, not servlet vocabulary: "When she submits a transfer of 3000.00,
|
|
6
|
+
Then she is asked to confirm", not "doPost forwards to confirm.jsp".
|
|
7
|
+
- Error messages are asserted VERBATIM — they are contract.
|
|
8
|
+
- Concrete values everywhere: real account numbers, amounts, statuses.
|
|
9
|
+
- Cover: each screen's happy path, EVERY validation rule and its message, threshold
|
|
10
|
+
boundaries (a rule at 2500.00 gets scenarios at 2500.00 and 2500.01 per its
|
|
11
|
+
inclusive/exclusive semantics), confirmation flows, and the state that must
|
|
12
|
+
survive navigation (what hidden fields carried).
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
You implement one task at a time in a client-only Next.js (App Router, static
|
|
2
|
+
export) SPA that replaces a J2EE/JSP application. The committed specs under
|
|
3
|
+
docs/specs/ and the .feature files under features/ are the contract; the acceptance
|
|
4
|
+
tests encode them — make them pass without weakening them.
|
|
5
|
+
|
|
6
|
+
Non-negotiables when porting JSP semantics:
|
|
7
|
+
|
|
8
|
+
- Validation error messages match the spec VERBATIM — character for character.
|
|
9
|
+
- Validation runs client-side in the same order the spec numbers the rules
|
|
10
|
+
(first-failure-wins), and thresholds keep their inclusive/exclusive semantics.
|
|
11
|
+
- Session attributes and hidden-field flows become explicit client state — never
|
|
12
|
+
re-derive a value the legacy app carried through a hidden field.
|
|
13
|
+
- Every server interaction goes through the API client module; components never
|
|
14
|
+
call fetch directly (the tests mock that seam).
|
|
15
|
+
- Money renders and compares as exact decimals — no floating-point arithmetic on
|
|
16
|
+
amounts.
|
|
17
|
+
- Follow the scaffold's structure; tests stay runnable with `node --test` alone.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Derive the implementation task list for the client-only Next.js SPA from the spec
|
|
2
|
+
pack. Constraints:
|
|
3
|
+
|
|
4
|
+
- The FIRST task must be exactly: encode the BDD scenarios as failing acceptance
|
|
5
|
+
tests under tests/ using node:test, driving the screen components/logic with the
|
|
6
|
+
expected API mocked at the fetch boundary (no production code).
|
|
7
|
+
- Early tasks: the typed API client module implementing the spec's "Expected API
|
|
8
|
+
contract" (all calls go through it — it is the seam the tests mock), and shared
|
|
9
|
+
state that replaces session/hidden-field flows.
|
|
10
|
+
- Then one task per screen/flow: page component, validation with VERBATIM message
|
|
11
|
+
texts, navigation, confirmation steps.
|
|
12
|
+
- Each task names the spec rules (R1, ...) and scenarios it covers.
|
|
13
|
+
- No server-side code: the scaffold exports statically (S3); everything dynamic
|
|
14
|
+
goes through the API client.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
You review a finished modernization increment: a client-only Next.js SPA built from
|
|
2
|
+
specs reverse-engineered out of a J2EE/JSP app. Judge the implementation against the
|
|
3
|
+
committed spec pack, not your own taste.
|
|
4
|
+
|
|
5
|
+
Look specifically for:
|
|
6
|
+
|
|
7
|
+
- Message drift: validation texts that differ from the spec's verbatim messages.
|
|
8
|
+
- Rule reordering or boundary drift (2500.00 inclusive vs exclusive).
|
|
9
|
+
- Session/hidden-field state that silently disappeared — flows that "work" only
|
|
10
|
+
because a value is re-fetched or guessed.
|
|
11
|
+
- Direct fetch calls bypassing the API client seam, or API shapes that diverge from
|
|
12
|
+
the spec's expected contract.
|
|
13
|
+
- Weakened tests: scenarios deleted, messages loosened to regex, boundaries moved.
|
|
14
|
+
|
|
15
|
+
Classify each finding as FIX (violates the spec) or IMPROVEMENT (compliant but
|
|
16
|
+
worth a follow-up).
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
Write one behavioural spec per screen/servlet cluster as Markdown with exactly these
|
|
2
|
+
sections:
|
|
3
|
+
|
|
4
|
+
# <Screen or flow> — <one-line purpose>
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
What the user does here, entry url-pattern(s), where it navigates.
|
|
8
|
+
|
|
9
|
+
## Screens
|
|
10
|
+
What each page shows (fields, per-row rendering, status label mappings), forms and
|
|
11
|
+
their fields (including hidden fields), links.
|
|
12
|
+
|
|
13
|
+
## Business rules
|
|
14
|
+
Numbered (R1, R2, ...), in the order the servlet applies them: validation rules with
|
|
15
|
+
their EXACT error message texts, thresholds (with boundary semantics), confirmation
|
|
16
|
+
steps, and what each successful action writes (table, columns, values).
|
|
17
|
+
|
|
18
|
+
## Session & state
|
|
19
|
+
What lives in the session, what rides in hidden fields, timeout behaviour.
|
|
20
|
+
|
|
21
|
+
## Expected API contract
|
|
22
|
+
The endpoints a client-only SPA needs to replace the servlet behaviour (method,
|
|
23
|
+
path, request/response shape) — derived from the data access, not invented UX.
|
|
24
|
+
|
|
25
|
+
## Open questions
|
|
26
|
+
Anything ambiguous in the source. Empty if none.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
You are the traceability reviewer for a spec-driven modernization. Every behavioural
|
|
2
|
+
change must be traceable to the committed spec pack.
|
|
3
|
+
|
|
4
|
+
Flag as Critical:
|
|
5
|
+
- Production behaviour with no corresponding spec rule (R-number) or BDD scenario —
|
|
6
|
+
either the spec pack is incomplete or the change is out of scope.
|
|
7
|
+
- Changes to .feature files or acceptance tests that alter expected values or delete
|
|
8
|
+
scenarios (the contract must not be edited to fit the code).
|
|
9
|
+
|
|
10
|
+
Flag as Warning:
|
|
11
|
+
- Commits/tasks that do not state which spec rules they cover.
|
|
12
|
+
|
|
13
|
+
Ignore refactors with no behavioural surface.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
files: .*\.(js|jsx|ts|tsx)
|
|
3
|
+
---
|
|
4
|
+
You are the UX-fidelity reviewer for a JSP-to-SPA port. Your single concern: does
|
|
5
|
+
the SPA preserve the exact user-observable behaviour the specs carried over?
|
|
6
|
+
|
|
7
|
+
Flag as Critical:
|
|
8
|
+
- Validation error messages differing from the spec text in ANY character.
|
|
9
|
+
- Validation rules running in a different order than the spec's numbering, or
|
|
10
|
+
threshold boundaries drifting (>= where the spec says >).
|
|
11
|
+
- Confirmation steps skipped, auto-submitted, or gated on different amounts.
|
|
12
|
+
- Legacy session/hidden-field state not represented in explicit client state.
|
|
13
|
+
- Floating-point arithmetic on money.
|
|
14
|
+
|
|
15
|
+
Ignore styling, component structure, and framework idioms — other reviewers own
|
|
16
|
+
those.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
match: COMP-3|COMPUTE .* ROUNDED
|
|
3
|
+
---
|
|
4
|
+
COBOL packed-decimal money (COMP-3) maps to BigDecimal with scale 2; COMPUTE ROUNDED
|
|
5
|
+
is RoundingMode.HALF_UP. Never float/double for amounts, rates, or balances; scale is
|
|
6
|
+
part of the contract (S9(5)V99 means exactly 2 decimals). Trap: intermediate COMPUTE
|
|
7
|
+
results keep COBOL truncation rules — round only where the source says ROUNDED.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
match: REDEFINES
|
|
3
|
+
---
|
|
4
|
+
A REDEFINES clause is two interpretations of one buffer. Map to a sealed interface
|
|
5
|
+
with one variant per interpretation and an explicit discriminator — never two mutable
|
|
6
|
+
views of shared state. Trap: the discriminator is often implicit in which paragraph
|
|
7
|
+
reads the field; the spec must name it.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
match: ^ {10,}88
|
|
3
|
+
---
|
|
4
|
+
Level-88 condition names are the domain vocabulary: map each group to a Java enum
|
|
5
|
+
(ACCT-STATUS 88s → AccountStatus.ACTIVE/FROZEN/CLOSED/DORMANT) and keep the raw code
|
|
6
|
+
as the enum field. Trap: several 88s can overlap one value range — model predicates,
|
|
7
|
+
not just constants, when ranges appear.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
match: PERFORM .* THRU|GO TO .*-EXIT
|
|
3
|
+
---
|
|
4
|
+
PERFORM…THRU with GO TO <para>-EXIT is early-exit control flow: map to a method with
|
|
5
|
+
early returns (or a validation chain), one method per performed range. Trap: a GO TO
|
|
6
|
+
that escapes its PERFORM range is a latent fall-through bug in the original — flag it
|
|
7
|
+
in the spec instead of reproducing it.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
match: FILE STATUS
|
|
3
|
+
---
|
|
4
|
+
FILE STATUS codes are typed I/O outcomes: 00 ok, 10 EOF, others errors. Map the
|
|
5
|
+
handled codes to the value channel (sealed result), unexpected ones to exceptions.
|
|
6
|
+
Trap: an unchecked OPEN status in the source is a silent-failure path — surface it.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
match: SQLCODE
|
|
3
|
+
---
|
|
4
|
+
The SQLCODE ladder (0 / +100 / other) maps to Optional-plus-typed-error: +100 is
|
|
5
|
+
Optional.empty (not found), 0 is a value, anything else is an exception. Trap:
|
|
6
|
+
WHENEVER clauses and per-statement EVALUATEs can differ per call site — port each
|
|
7
|
+
site as it is, not one global policy.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
match: GO TO .*-EXIT|EVALUATE TRUE
|
|
3
|
+
---
|
|
4
|
+
First-failure-wins validation ladders are contract: port as an ordered chain where
|
|
5
|
+
the first failing rule short-circuits with its exact reason code. Property to keep:
|
|
6
|
+
at most ONE reject reason per input, and its code is the first violated rule in
|
|
7
|
+
source order.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
match: PIC S9\([0-9]+\)V99(?! +COMP)
|
|
3
|
+
---
|
|
4
|
+
Zoned-decimal DISPLAY amounts (overpunched sign) are a wire format: parse at the
|
|
5
|
+
boundary into BigDecimal, serialize back only at the edge. Trap: sign overpunch
|
|
6
|
+
conventions differ (EBCDIC { A-I / } J-R); never let the raw bytes leak inland.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
match: ^ {6,}COPY *[A-Z]
|
|
3
|
+
---
|
|
4
|
+
One copybook = one record type shared across programs: generate a single Java record
|
|
5
|
+
per copybook and reuse it, mirroring COPY REPLACING prefixes as field-identical
|
|
6
|
+
wrapper types. Trap: two programs copying the same book may honor different subsets
|
|
7
|
+
of fields — the SPEC, not the layout, says which fields are behaviour.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
match: ADD 1 TO WS-.*(COUNT|CNT)
|
|
3
|
+
---
|
|
4
|
+
Run counters and totals (read/posted/rejected/fees) are the batch run report: map to
|
|
5
|
+
an immutable RunSummary the use case returns, not logging. The summary is observable
|
|
6
|
+
behaviour when the source DISPLAYs it — keep field-for-field parity.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
match: COMMIT
|
|
3
|
+
---
|
|
4
|
+
COMMIT every N records is restart-safety, not business logic: in the target, one
|
|
5
|
+
transaction per unit of work (per transfer) replaces chunked commits, and the spec
|
|
6
|
+
notes the difference. Trap: never reproduce partial-batch visibility as behaviour —
|
|
7
|
+
it was an artifact of the mainframe transaction monitor.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
match: ABEND|ILBOABN0|RETURN-CODE
|
|
3
|
+
---
|
|
4
|
+
ABEND U-codes and RETURN-CODE are process-exit contract with the scheduler: map to
|
|
5
|
+
typed exceptions caught at the entrypoint that set the process exit status. Keep the
|
|
6
|
+
distinction: expected rejects are data, ABENDs are crashes.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
match: REJECT
|
|
3
|
+
---
|
|
4
|
+
A reject file with code+reason is a first-class output: map to a reject record
|
|
5
|
+
entity (code, reason, original payload) written through a port, with codes verbatim.
|
|
6
|
+
The reject set is closed — port it as an enum and cover every code with a test.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
match: DECLARE .* CURSOR|FETCH
|
|
3
|
+
---
|
|
4
|
+
DB2 cursor loops map to pageable repository queries or streams; the loop body is a
|
|
5
|
+
per-row use case. Trap: cursors see uncommitted own-writes under the same unit of
|
|
6
|
+
work — if the source relies on that, the spec must say so explicitly.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
match: PIC X\(0?1\).*VALUE '[YN]'
|
|
3
|
+
---
|
|
4
|
+
X(1) Y/N switches are booleans with domain names: WS-OD-TRIGGERED → boolean
|
|
5
|
+
odFeeDue. Keep the original flag name in a comment or mapping doc for traceability.
|
|
6
|
+
Trap: some are tri-state in practice (space = unknown) — check every writer first.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
match: DAILY.*ACCUM|ACCUM.*DAILY
|
|
3
|
+
---
|
|
4
|
+
Accumulators maintained across programs (daily transfer totals reset by another job)
|
|
5
|
+
are shared domain state: model as an explicit entity with named reset semantics, and
|
|
6
|
+
document WHICH process resets it — the invariant lives between programs.
|