Repository navigation
Turning CICS → Java into an iterably solvable problem #4784
squid-protocol
announced in
Build Process Journal
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
I started the COBOL/CICS → Java translator with a goal: get the translation right 100% of the time, on the first try. That's still the destination. But in the last couple of weeks the thing I was building turned into something else, and I think it's more useful than the original goal.
CICS → Java translation is now an iterably solvable problem.
What "iterably solvable" means
Every gap now surfaces as a concrete, ranked, fixable item:
And three things follow from that:
The supporting argument: a measuring stick
The reason this works is that the translator is deterministic (no LLM anywhere in the translation) and every program ships with a full evidence chain. So when a translation isn't right, I get a precise list of what was wrong, and that list is the list of things to fix.
First-time success is a claim. A ranked, evidenced fix list is a plan a team can execute. I'd honestly take the plan. So my focus shifted from first-try success to the documentation and evidence a team needs to march to 100%.
What's in the machine
cobolrtruntime. COBOL has very particular rules (fixed-point decimals, truncation, how fields move into other fields).cobolrtis those rules, written in Java, so the translated code behaves like the original instead of like "Java that looks similar."On top of that, every program gets an evidence level, L0 to L5:
Anything I can't do, the translator refuses by name instead of guessing. There's a caveats register (
oracle_assumptions.md) where every assumption is tagged MATCHED, REFUSED, DIFFERS or ASSUMED. Compile options are recorded with provenance per program (#4704, #4708). The release gate refuses stale evidence (#4703). And the definition of done I signed off on is now written down indocs/language_status/definition_of_done.md(#4722), so "finished" isn't a vibe.How the gaps show up
This is the part I care about. There are five ways a gap surfaces, and each one is a to-do item with a name on it:
The harness also audits itself, and this is the part that made me wince and then feel good about it. In about two days it found three places where my proofs were weaker than they looked:
Each of those made some "proven" claims quietly softer than advertised. Now they're on the list, and closing them makes every earlier number more honest. A one-shot pipeline has no way to find out its own proofs are leaky.
The numbers actually move
Over roughly two days:
That's the point of the whole post. Those moved because I took the top items off a ranked list, not because I got lucky. Next week's list is shorter and different.
A policy shift
IBM z/OS is the reference. GnuCOBOL is the instrument. GnuCOBOL is how I measure, not what's right. Where IBM documents the answer, the Java follows IBM, and GnuCOBOL is configured to match or the difference is declared. Where IBM leaves it undefined, the translator refuses by name rather than guess. The register is where every one of those calls is written down. A future step is calibrating against a real z/OS.
The big caveat, no sugarcoating
So I'm not telling you it's right the first time. I'm telling you that when it's wrong, I'll know where, I'll be able to rank it, and the fix will stick for everyone after.
More as it comes in.
All reactions