Repository navigation
fix: train -- #4305, #4351, #4353, #4355 - #4383
Merged
Merged
Conversation
Gate 3.1 blocked a member as binary at more than 1 NUL per 1000 characters (#3491). A 168-byte PL/I member with 2 NULs at the end of a comment is 12 per 1000, so it vanished from every fact channel (estate-crucible NULREST.pli, H-0037). At most 4 NULs, with at most 4 other C0 control characters, is now transfer damage in text, whatever the size. A binary carries control bytes beyond its NULs, so it is still blocked. The old 16-character "binary" fixture (2 NULs) now carries 5. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FNWHcUSn5p7eMxFTsB5rFo
) data_moves' word class was ASCII-only, and a name needed an ASCII letter. `MOVE '000001' TO 社員コード` and `MOVE 'Z' TO F02` drew no row, and `MOVE SPACE TO X項目` was recorded into `X`. The word class now takes the record reader's NATIONAL / WIDE_DIGITS / WIDE_HYPHENS characters (#3955 / #3991), and a national letter counts as a letter. estate-crucible H-0040, H-0041 and H-0046 now pass, and H-0042's two missing moves are found. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FNWHcUSn5p7eMxFTsB5rFo
calls_out took the word after any PERFORM as a callee, and only VARYING / UNTIL / WITH were ignored. These inline forms name no paragraph: - `PERFORM TEST BEFORE|AFTER` (WITH omitted) and `PERFORM FOREVER`: TEST and FOREVER join `_calls_out_ignore`. - `PERFORM WS-N TIMES` / `PERFORM 3 TIMES`: a name followed by TIMES is the loop count. `PERFORM PARA-X 3 TIMES` keeps PARA-X, and the name must end at a word end, so backtracking cannot dodge the check. - `EXIT PERFORM [CYCLE]`: consumed by its own alternative, which captures nothing. The detector drops an empty callee. estate-crucible H-0006 now passes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FNWHcUSn5p7eMxFTsB5rFo
… IS COMMA (#4355) `MOVE 0,5 TO T-WERT (2)` in a program with DECIMAL-POINT IS COMMA drew no row: the tokenizer split `0,5` into `0` `,` `5`. In such a program a digit-comma-digit run is now one numeric literal. A separator comma is followed by a space, so it still separates, and a program without the clause is read as before. estate-crucible H-0043 now passes. Built on fix/4353 (same tokenizer lines). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FNWHcUSn5p7eMxFTsB5rFo
Contributor
…edger for #4305 #4351 #4353 #4355 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FNWHcUSn5p7eMxFTsB5rFo
squid-protocol
force-pushed
the
train/train-b
branch
from
October 5, 2026 00:50
096e92a to
90a38a8
Compare
squid-protocol
marked this pull request as ready for review
October 5, 2026 01:01
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Train of four engine fixes: one golden regeneration, one ledger run, one CI run. Each fix branch is code + regression tests, reproduced on main and audited with the kit. #4306 and #4329 were in earlier builds of this train and have been taken out; see the end.
#4305: inline PERFORM forms draw no callee (
fix/4305-inline-perform-callees)PERFORM TEST AFTER|BEFORE ...→TESTPERFORM FOREVER→FOREVERPERFORM WS-N TIMES/PERFORM 3 TIMES→WS-N/3EXIT PERFORM [CYCLE]→ the next word (END-IF,CYCLE)cobol.pycalls_out /_calls_out_ignore; the detector drops an empty callee):PERFORM PARA-X 3 TIMESkeeps PARA-X;EXIT PERFORM [CYCLE]is consumed by its own capture-less alternative.BANKDATA.cbl, zopeneditorSAM1.cbl, gnucobolCBL_OC_DUMP.cob. In each, the phantomTESTcallee is gone.<para> -> PERFORM TEST(CBSA BANKDATA, zopeneditor SAM1 / SAM1LIB / multiroot SAM1).#4351: a short member with stray NULs stays source (
fix/4351-stray-nuls)NULRESTend_lineis 5 (the RETURN), and the engine gives 6 (END NULREST;). For CLMPROC, whose nested procedures follow its last statement, the engine and the key agree. For INIT_CLAIM, the key's own end_line includes its END line. Worth a look at the key.#4353: national / CJK / full-width names in data_moves (
fix/4353-data-moves-national)MOVE '000001' TO 社員コードgave no row, andMOVE SPACE TO X項目was recorded intoX._(in NATIONAL'sID_START, and in the record reader's class) are now whole:WS_NAMEwas recorded as the two operandsWS+NAME;STRING WS-STR_IN1 ... INTO WS-STR_OUTwasWS-STR,IN1, ....VALUE G'…'is recorded as the valueG#4354.#4355: decimal-comma literal in a MOVE (
fix/4355-decimal-comma-move, built on #4353)MOVE 0,5 TO T-WERT (2)underDECIMAL-POINT IS COMMAgave no row, because0,5was tokenized as0,5.Taken out: #4306 (
fix/4306-idms-phantom-units)In the first build of this train its step moved 38 golden channels across 515 files. The unit diff shows why:
Program1-idand RESFILE-CONTROsL.NC1134.2.cbl(29 units: OPEN-FILES, MAR-TEST-1..15, PASS, FAIL, ...). That source writesPROCEDURE/DIVISION/.on three lines (116-118), so the branch's "outside the PROCEDURE DIVISION" filter never sees the header.The branch needs the header matched across line breaks, plus a test with the NC1134 shape, before it goes into a train.
Taken out: #4329 (
fix/4329-usage-leak)The second build of this train went red on CICS Crucible: 5 new
hc-abend-link/*/java-portedcells failedmvn compile.01 WS-CA.+COPY HCLINKCA.is the last entry before the PROCEDURE DIVISION, and its USAGE leaked in from the procedure text asPOINTER. With the fix it isNone.gitgalaxy/tools/cobol_to_java, outside this lane) now treats WS-CA as a real record. HCSUB's generatedhandleLinktakesHcsubWsCa, named after the caller's record, instead ofHcsubDfhcommarea.HcsubDfhcommarea, so the ported project no longer compiles.This needs a forge-side decision: name the callee's contract DTO after its own DFHCOMMAREA, or re-key the overlay. Blessing the CICS baseline would only hide the failures. The branch is unchanged and ready to rejoin a train once that is settled.
Golden masters (vs
a42fc11fe4a1)full-precision (
tests/golden_master_audit): 5 fixture file(s), 5 channel(s), 6 scanned file(s) moved (cobol 6).cobol/CICS-Cobol/CBL0104v01ProcedureDivision.cbl,cobol/CICS-Cobol/CBL0105v01DeclararElementoGrupo.cbl,cobol/CICS-Cobol/CBL0703v01StatementString.cblcobol/cics-banking-sample-application-cbsa/BANKDATA.cbl,cobol/gnucobol/CBL_OC_DUMP.cob,cobol/zopeneditor-sample/SAM1.cblMost-moved scanned files (channels):
cobol/CICS-Cobol/CBL0703v01StatementString.cbl(1),cobol/CICS-Cobol/CBL0104v01ProcedureDivision.cbl(1),cobol/CICS-Cobol/CBL0105v01DeclararElementoGrupo.cbl(1),cobol/zopeneditor-sample/SAM1.cbl(1),cobol/cics-banking-sample-application-cbsa/BANKDATA.cbl(1)zero-dependency (
tests/golden_master_zero_dep_audit): 5 fixture file(s), 5 channel(s), 6 scanned file(s) moved (cobol 6).cobol/CICS-Cobol/CBL0104v01ProcedureDivision.cbl,cobol/CICS-Cobol/CBL0105v01DeclararElementoGrupo.cbl,cobol/CICS-Cobol/CBL0703v01StatementString.cblcobol/cics-banking-sample-application-cbsa/BANKDATA.cbl,cobol/gnucobol/CBL_OC_DUMP.cob,cobol/zopeneditor-sample/SAM1.cblMost-moved scanned files (channels):
cobol/CICS-Cobol/CBL0703v01StatementString.cbl(1),cobol/CICS-Cobol/CBL0104v01ProcedureDivision.cbl(1),cobol/CICS-Cobol/CBL0105v01DeclararElementoGrupo.cbl(1),cobol/zopeneditor-sample/SAM1.cbl(1),cobol/cics-banking-sample-application-cbsa/BANKDATA.cbl(1)Ground-truth ledger
Ground-truth ledger: 4 mismatch(es) fixed, 0 introduced.
cics-banking-sample-application-cbsa :: engine | intra-program edges | src/base/cobol_src/BANKDATA.cbl | A010 -> PERFORM TEST | fpzopeneditor-sample :: engine | intra-program edges | COBOL/SAM1.cbl | 210-PROCESS-ADD-TRAN -> PERFORM TEST | fpzopeneditor-sample :: engine | intra-program edges | COBOL/SAM1LIB.cbl | 210-PROCESS-ADD-TRAN -> PERFORM TEST | fpzopeneditor-sample :: engine | intra-program edges | multiroot/sam/SAM1.cbl | 210-PROCESS-ADD-TRAN -> PERFORM TEST | fpEstate-crucible horrors
Estate-crucible (
a42fc11fe4a1->27eff08c95d9): horrors passing 37/49 -> 43/49; checks pass 835->855, fail 17->18, missing 14->0, phantom 16->8._in namesFixes #4305
Fixes #4351
Fixes #4353
Fixes #4355
🤖 Generated with Claude Code
https://claude.ai/code/session_01FNWHcUSn5p7eMxFTsB5rFo