diff --git a/docs/language_status/blockers_history.jsonl b/docs/language_status/blockers_history.jsonl index acbe7afb3..9f0cf22d8 100644 --- a/docs/language_status/blockers_history.jsonl +++ b/docs/language_status/blockers_history.jsonl @@ -18,3 +18,4 @@ {"pr": 7936, "main_sha": "fd2117800beee87e5a500351f70eaaad43160487", "date": "2026-11-06T19:56:22Z", "whole": 113, "total": 127, "whole_burned": 105, "total_burned": 106, "whole_non_burned": 8, "total_non_burned": 21, "refused_whole": 8, "top_gaps": [{"gap": "refused: LayoutError: source defect: source text past column N (…) cuts a literal open: fixed-form COBOL reads columns N", "only": 7, "only_burned": 0, "only_non_burned": 7, "refuses_program": true}, {"gap": "EXEC CICS WEB CONVERSE POST", "only": 1, "only_burned": 0, "only_non_burned": 1, "refuses_program": false}, {"gap": "JSONGEN JSON GENERATE: the value after an exception is not modelled", "only": 1, "only_burned": 0, "only_non_burned": 1, "refuses_program": false}, {"gap": "missing copybook BAQRINFO", "only": 1, "only_burned": 0, "only_non_burned": 1, "refuses_program": true}, {"gap": "MOVE an alphanumeric literal holds a character beyond the single-byte code page (…): its bytes and length depend on how the source reached the compiler", "only": 0, "only_burned": 0, "only_non_burned": 0, "refuses_program": false}], "scope": "burned + local + census corpora", "copy_members": 1, "note": "re-survey after the zos_comp5 container/queue slices (#7845): no COMP-5 / bytes-overlap gap row; census basis 39, 11 whole; burned 105 of 106 CICS programs"} {"pr": 7930, "main_sha": "b91787d2b7c3852bbfa14057e3e7397b54de165f", "date": "2026-11-06T20:33:34Z", "whole": 198, "total": 212, "whole_burned": 190, "total_burned": 191, "whole_non_burned": 8, "total_non_burned": 21, "refused_whole": 8, "top_gaps": [{"gap": "refused: LayoutError: source defect: source text past column N (…) cuts a literal open: fixed-form COBOL reads columns N", "only": 7, "only_burned": 0, "only_non_burned": 7, "refuses_program": true}, {"gap": ": undeclared item", "only": 1, "only_burned": 0, "only_non_burned": 1, "refuses_program": false}, {"gap": "EXEC CICS WEB CONVERSE POST", "only": 1, "only_burned": 0, "only_non_burned": 1, "refuses_program": false}, {"gap": "missing copybook BAQRINFO", "only": 1, "only_burned": 0, "only_non_burned": 1, "refuses_program": true}, {"gap": "MOVE an alphanumeric literal holds a character beyond the single-byte code page (…): its bytes and length depend on how the source reached the compiler", "only": 0, "only_burned": 0, "only_non_burned": 0, "refuses_program": false}], "scope": "burned + local + census corpora + cics-crucible", "copy_members": 1, "note": "re-survey after JSON GENERATE JSON-CODE (#7524, #7709)"} {"pr": 7942, "main_sha": "f27e38f550f7cba1972606b526234d0143bd4b80", "date": "2026-11-06T20:43:42Z", "whole": 113, "total": 127, "whole_burned": 105, "total_burned": 106, "whole_non_burned": 8, "total_non_burned": 21, "refused_whole": 8, "top_gaps": [{"gap": "refused: LayoutError: source defect: source text past column N (…) cuts a literal open: fixed-form COBOL reads columns N", "only": 7, "only_burned": 0, "only_non_burned": 7, "refuses_program": true}, {"gap": ": undeclared item", "only": 1, "only_burned": 0, "only_non_burned": 1, "refuses_program": false}, {"gap": "EXEC CICS not a data area: '…'", "only": 1, "only_burned": 0, "only_non_burned": 1, "refuses_program": false}, {"gap": "missing copybook BAQRINFO", "only": 1, "only_burned": 0, "only_non_burned": 1, "refuses_program": true}, {"gap": "MOVE an alphanumeric literal holds a character beyond the single-byte code page (…): its bytes and length depend on how the source reached the compiler", "only": 0, "only_burned": 0, "only_non_burned": 0, "refuses_program": false}], "scope": "burned + local + census corpora", "copy_members": 1, "note": "re-survey after WEB CONVERSE bare method keywords (#7942, #7525): no EXEC CICS WEB gap row (CONVERSE POST, HTTPHEADER, NOTRUNCATE all gone); whole unchanged at 113/127, non-burned 8/21"} +{"pr": 7938, "main_sha": "945e52b796d9d0bdbc228e66c322eeae37877b81", "date": "2026-11-06T21:49:13Z", "whole": 114, "total": 127, "whole_burned": 105, "total_burned": 106, "whole_non_burned": 9, "total_non_burned": 21, "refused_whole": 8, "top_gaps": [{"gap": "refused: LayoutError: source defect: source text past column N (…) cuts a literal open: fixed-form COBOL reads columns N", "only": 7, "only_burned": 0, "only_non_burned": 7, "refuses_program": true}, {"gap": "EXEC CICS not a data area: '…'", "only": 1, "only_burned": 0, "only_non_burned": 1, "refuses_program": false}, {"gap": "missing copybook BAQRINFO", "only": 1, "only_burned": 0, "only_non_burned": 1, "refuses_program": true}, {"gap": "MOVE an alphanumeric literal holds a character beyond the single-byte code page (…): its bytes and length depend on how the source reached the compiler", "only": 0, "only_burned": 0, "only_non_burned": 0, "refuses_program": false}, {"gap": "STRING sender , PIC (…): a numeric item with a P or a decimal place is a compile error in Enterprise COBOL", "only": 0, "only_burned": 0, "only_non_burned": 0, "refuses_program": false}], "scope": "burned + local + census corpora", "copy_members": 1, "note": "census re-survey after JSON GENERATE NAME OMITTED (#7938) and JSON-STATUS (#7946); no JSON row remains"} diff --git a/docs/language_status/gap_prevalence.md b/docs/language_status/gap_prevalence.md index 4faf768ab..c314f61c8 100644 --- a/docs/language_status/gap_prevalence.md +++ b/docs/language_status/gap_prevalence.md @@ -27,37 +27,35 @@ One ranking over both scopes, highest estate coverage first; estates and program | `EPSCSMRI: no service of its own, its translation is refused: epscsmrd.cbl:N: the PICTURE N (…) is not modelled (…): the translator reads one byte a character` | B | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | not modelled | #4272 | | `EPSCSMRO: no service of its own, its translation is refused: LE recovery point: SERVICE LABEL (…): the resume point after , not BLL addressing: not modelled` | B | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | not modelled | #5106 (le-condition-handling) | | `EXEC CICS SOAPFAULT CREATE` | B | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | not modelled | #4270 (cics-command-slice) | -| `EXEC CICS WEB CONVERSE POST` | C | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | not modelled | #7525 | -| `JSON GENERATE: not modelled` | C | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | not modelled | #7524 | -| `JSON PARSE: not modelled` | C | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | not modelled | #7524 | +| `EXEC CICS: operand is not a data area` | C | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | not modelled | #4270 (cics-command-slice) | | `PERFORM: undeclared paragraph` | C | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | named source defect | #7647 (source defect: no such paragraph in the program or its clone) | | `SET TO ENTRY: procedure / function pointers are not modelled` | B | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | not modelled | #5106 | | `STRING: literal beyond the single-byte code page` | C | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | named source defect | #7526 (source defect: no single-byte EBCDIC code page holds the character, so the source as stored is no input an IBM compiler reads; the translator refuses the statement, register D4) | | `refused: ExprError: PROCEDURE DIVISION does not parse` | C | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | refused by name | #7709 (source defect: a comment banner whose asterisks start in column 8, not the indicator column 7, is text to a fixed-form compiler, so Enterprise COBOL rejects the program too; the fixture test in tests/cobol_mainframe/test_det_source_defects_4735.py shows the det parser refuses that shape and reads the column-7 one, so the grammar is not at fault; census T4, #7847, #7927) | -Coverage if closed, programs that translate whole after the highest-ranked gaps (from 137 today): top 1: 138 / 168 (82.1%), top 3: 149 / 168 (88.7%, upper bound), top 5: 158 / 168 (94.0%, upper bound), top 10: 162 / 168 (96.4%, upper bound). +Coverage if closed, programs that translate whole after the highest-ranked gaps (from 138 today): top 1: 139 / 168 (82.7%), top 3: 150 / 168 (89.3%, upper bound), top 5: 159 / 168 (94.6%, upper bound), top 10: 163 / 168 (97.0%, upper bound). | top N gaps closed | programs whole | share | bound | |---|---|---|---| -| 1 | 138 / 168 | 82.1% | exact | -| 3 | 149 / 168 | 88.7% | upper | -| 5 | 158 / 168 | 94.0% | upper | -| 10 | 162 / 168 | 96.4% | upper | +| 1 | 139 / 168 | 82.7% | exact | +| 3 | 150 / 168 | 89.3% | upper | +| 5 | 159 / 168 | 94.6% | upper | +| 10 | 163 / 168 | 97.0% | upper | Close-next order (greedy: each step closes the gap that makes the most further programs whole, given the steps before it): | step | gap closed | newly whole | e0 | e1 | e2 | e3 | e4 | none | whole | share | bound | |---|---|---|---|---|---|---|---|---|---|---|---| -| 1 | `refused: LayoutError: source defect: text past column 72` | 9 | 0 | 0 | 9 | 0 | 0 | 0 | 146 / 168 | 86.9% | upper | -| 2 | `missing copybook: clone defect (not in the clone)` | 7 | 0 | 0 | 7 | 0 | 0 | 0 | 153 / 168 | 91.1% | upper | -| 3 | `refused: generation: ISPF editor screen, not a COBOL program` | 2 | 0 | 0 | 0 | 0 | 0 | 2 | 155 / 168 | 92.3% | upper | -| 4 | `: is not defined in a record of file ` | 2 | 0 | 0 | 0 | 2 | 0 | 0 | 157 / 168 | 93.5% | upper | -| 5 | `missing copybook: z/OS Connect product` | 2 | 0 | 0 | 1 | 0 | 1 | 0 | 159 / 168 | 94.6% | upper | -| 6 | `: undeclared item` | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 160 / 168 | 95.2% | upper | -| 7 | `EXEC CICS map: no field` | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 161 / 168 | 95.8% | upper | -| 8 | `EXEC CICS WEB CONVERSE POST` | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 162 / 168 | 96.4% | upper | -| 9 | `PERFORM: undeclared paragraph` | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 163 / 168 | 97.0% | upper | -| 10 | `refused: ExprError: PROCEDURE DIVISION does not parse` | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 164 / 168 | 97.6% | upper | +| 1 | `refused: LayoutError: source defect: text past column 72` | 9 | 0 | 0 | 9 | 0 | 0 | 0 | 147 / 168 | 87.5% | upper | +| 2 | `missing copybook: clone defect (not in the clone)` | 7 | 0 | 0 | 7 | 0 | 0 | 0 | 154 / 168 | 91.7% | upper | +| 3 | `refused: generation: ISPF editor screen, not a COBOL program` | 2 | 0 | 0 | 0 | 0 | 0 | 2 | 156 / 168 | 92.9% | upper | +| 4 | `: is not defined in a record of file ` | 2 | 0 | 0 | 0 | 2 | 0 | 0 | 158 / 168 | 94.0% | upper | +| 5 | `missing copybook: z/OS Connect product` | 2 | 0 | 0 | 1 | 0 | 1 | 0 | 160 / 168 | 95.2% | upper | +| 6 | `: undeclared item` | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 161 / 168 | 95.8% | upper | +| 7 | `EXEC CICS map: no field` | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 162 / 168 | 96.4% | upper | +| 8 | `EXEC CICS: operand is not a data area` | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 163 / 168 | 97.0% | upper | +| 9 | `PERFORM: undeclared paragraph` | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 164 / 168 | 97.6% | upper | +| 10 | `refused: ExprError: PROCEDURE DIVISION does not parse` | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 165 / 168 | 98.2% | upper | ## Burned estates (6 estates, 129 programs, 126 translate whole today) @@ -92,15 +90,15 @@ Needs several gaps together (1 program the order above leaves out: each turns wh |---|---|---|---|---|---|---|---|---|---| | ` ADDRESS OF : not an item of or LINKAGE`; `CEEHDLR: registering an LE user condition handler is not modelled`; `CEEHDLU: unregistering an LE user condition handler is not modelled`; `EPSCSMRI: no service of its own, its translation is refused: epscsmrd.cbl:N: the PICTURE N (…) is not modelled (…): the translator reads one byte a character`; `EPSCSMRO: no service of its own, its translation is refused: LE recovery point: SERVICE LABEL (…): the resume point after , not BLL addressing: not modelled`; `EXEC CICS SOAPFAULT CREATE`; `SET TO ENTRY: procedure / function pointers are not modelled` | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | exact | -## Census estates (9 estates, 39 programs, 11 translate whole today) +## Census estates (9 estates, 39 programs, 12 translate whole today) Counted by tools only; non-burned estates keep their first-contact numbers. Aggregates under opaque `census-*` labels: no program, table or copybook name is kept, and a gap key that could carry one is collapsed to its class (`scrub_key`). -Coverage if closed, programs that translate whole after the highest-ranked gaps (from 11 today): top 1: 12 / 39 (30.8%), top 3: 23 / 39 (59.0%, upper bound), top 5: 31 / 39 (79.5%, upper bound), top 10: 35 / 39 (89.7%, upper bound). +Coverage if closed, programs that translate whole after the highest-ranked gaps (from 12 today): top 1: 13 / 39 (33.3%), top 3: 24 / 39 (61.5%, upper bound), top 5: 32 / 39 (82.0%, upper bound), top 10: 37 / 39 (94.9%, upper bound). Copy members: 1 listed, not counted in the 39 programs (no IDENTIFICATION / PROCEDURE DIVISION and no PROGRAM-ID: data description entries only; owner ruling 2026-11-06, #7709: the census basis is the programs alone). -Accounted today (whole, or every gap a named source defect): 35 / 39. +Accounted today (whole, or every gap a named source defect): 36 / 39. | gap | estates | programs | e0 | e1 | e2 | e3 | e4 | none | status | owner | |---|---|---|---|---|---|---|---|---|---|---| @@ -112,38 +110,35 @@ Accounted today (whole, or every gap a named source defect): 35 / 39. | `MOVE: literal beyond the single-byte code page` | 1 | 2 | 0 | 0 | 2 | 0 | 0 | 0 | named source defect | #7526 (source defect: no single-byte EBCDIC code page holds the character, so the source as stored is no input an IBM compiler reads; the translator refuses the statement, register D4) | | `STRING: numeric sender with P or a decimal place` | 1 | 2 | 0 | 0 | 2 | 0 | 0 | 0 | named source defect | #7523 (source defect: a numeric STRING sender must be an integer without a P, a compile error in Enterprise COBOL) | | `missing copybook: z/OS Connect product` | 1 | 2 | 0 | 0 | 1 | 0 | 1 | 0 | unknown | #7709 (product copybook frontier: no runtime modelled; IBM's copybooks are never shipped) | -| `EXEC CICS WEB CONVERSE POST` | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | not modelled | #7525 | -| `JSON GENERATE: not modelled` | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | not modelled | #7524 | -| `JSON PARSE: not modelled` | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | not modelled | #7524 | +| `EXEC CICS: operand is not a data area` | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | not modelled | #4270 (cics-command-slice) | | `PERFORM: undeclared paragraph` | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | named source defect | #7647 (source defect: no such paragraph in the program or its clone) | | `STRING: literal beyond the single-byte code page` | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | named source defect | #7526 (source defect: no single-byte EBCDIC code page holds the character, so the source as stored is no input an IBM compiler reads; the translator refuses the statement, register D4) | | `refused: ExprError: PROCEDURE DIVISION does not parse` | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | refused by name | #7709 (source defect: a comment banner whose asterisks start in column 8, not the indicator column 7, is text to a fixed-form compiler, so Enterprise COBOL rejects the program too; the fixture test in tests/cobol_mainframe/test_det_source_defects_4735.py shows the det parser refuses that shape and reads the column-7 one, so the grammar is not at fault; census T4, #7847, #7927) | | top N gaps closed | programs whole | share | bound | |---|---|---|---| -| 1 | 12 / 39 | 30.8% | exact | -| 3 | 23 / 39 | 59.0% | upper | -| 5 | 31 / 39 | 79.5% | upper | -| 10 | 35 / 39 | 89.7% | upper | +| 1 | 13 / 39 | 33.3% | exact | +| 3 | 24 / 39 | 61.5% | upper | +| 5 | 32 / 39 | 82.0% | upper | +| 10 | 37 / 39 | 94.9% | upper | Close-next order (greedy: each step closes the gap that makes the most further programs whole, given the steps before it): | step | gap closed | newly whole | e0 | e1 | e2 | e3 | e4 | none | whole | share | bound | |---|---|---|---|---|---|---|---|---|---|---|---| -| 1 | `refused: LayoutError: source defect: text past column 72` | 9 | 0 | 0 | 9 | 0 | 0 | 0 | 20 / 39 | 51.3% | upper | -| 2 | `missing copybook: clone defect (not in the clone)` | 7 | 0 | 0 | 7 | 0 | 0 | 0 | 27 / 39 | 69.2% | upper | -| 3 | `refused: generation: ISPF editor screen, not a COBOL program` | 2 | 0 | 0 | 0 | 0 | 0 | 2 | 29 / 39 | 74.4% | upper | -| 4 | `missing copybook: z/OS Connect product` | 2 | 0 | 0 | 1 | 0 | 1 | 0 | 31 / 39 | 79.5% | upper | -| 5 | `: undeclared item` | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 32 / 39 | 82.0% | upper | -| 6 | `EXEC CICS map: no field` | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 33 / 39 | 84.6% | upper | -| 7 | `EXEC CICS WEB CONVERSE POST` | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 34 / 39 | 87.2% | upper | -| 8 | `PERFORM: undeclared paragraph` | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 35 / 39 | 89.7% | upper | -| 9 | `refused: ExprError: PROCEDURE DIVISION does not parse` | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 36 / 39 | 92.3% | upper | - -Needs several gaps together (3 programs the order above leaves out: each turns whole only when every gap in its row is closed): +| 1 | `refused: LayoutError: source defect: text past column 72` | 9 | 0 | 0 | 9 | 0 | 0 | 0 | 21 / 39 | 53.8% | upper | +| 2 | `missing copybook: clone defect (not in the clone)` | 7 | 0 | 0 | 7 | 0 | 0 | 0 | 28 / 39 | 71.8% | upper | +| 3 | `refused: generation: ISPF editor screen, not a COBOL program` | 2 | 0 | 0 | 0 | 0 | 0 | 2 | 30 / 39 | 76.9% | upper | +| 4 | `missing copybook: z/OS Connect product` | 2 | 0 | 0 | 1 | 0 | 1 | 0 | 32 / 39 | 82.0% | upper | +| 5 | `: undeclared item` | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 33 / 39 | 84.6% | upper | +| 6 | `EXEC CICS map: no field` | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 34 / 39 | 87.2% | upper | +| 7 | `EXEC CICS: operand is not a data area` | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 35 / 39 | 89.7% | upper | +| 8 | `PERFORM: undeclared paragraph` | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 36 / 39 | 92.3% | upper | +| 9 | `refused: ExprError: PROCEDURE DIVISION does not parse` | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 37 / 39 | 94.9% | upper | + +Needs several gaps together (2 programs the order above leaves out: each turns whole only when every gap in its row is closed): | gaps closed together | programs | estates | e0 | e1 | e2 | e3 | e4 | none | bound | |---|---|---|---|---|---|---|---|---|---| -| `JSON GENERATE: not modelled`; `JSON PARSE: not modelled` | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | exact | | `MOVE: literal beyond the single-byte code page`; `STRING: numeric sender with P or a decimal place` | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | exact | | `MOVE: literal beyond the single-byte code page`; `STRING: literal beyond the single-byte code page`; `STRING: numeric sender with P or a decimal place` | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | exact | diff --git a/tests/fixtures/gap_prevalence/census_summary.json b/tests/fixtures/gap_prevalence/census_summary.json index dbeb66537..57cfdb6a7 100644 --- a/tests/fixtures/gap_prevalence/census_summary.json +++ b/tests/fixtures/gap_prevalence/census_summary.json @@ -1,5 +1,5 @@ { - "accounted_now": 35, + "accounted_now": 36, "by_era_programs": { "0": 0, "1": 1, @@ -20,9 +20,9 @@ "none": 0 }, "gap": "refused: LayoutError: source defect: text past column 72", - "share": 0.5128, + "share": 0.5385, "upper_bound": true, - "whole": 20 + "whole": 21 }, { "gained": 7, @@ -35,9 +35,9 @@ "none": 0 }, "gap": "missing copybook: clone defect (not in the clone)", - "share": 0.6923, + "share": 0.7179, "upper_bound": true, - "whole": 27 + "whole": 28 }, { "gained": 2, @@ -50,9 +50,9 @@ "none": 2 }, "gap": "refused: generation: ISPF editor screen, not a COBOL program", - "share": 0.7436, + "share": 0.7692, "upper_bound": true, - "whole": 29 + "whole": 30 }, { "gained": 2, @@ -65,9 +65,9 @@ "none": 0 }, "gap": "missing copybook: z/OS Connect product", - "share": 0.7949, + "share": 0.8205, "upper_bound": true, - "whole": 31 + "whole": 32 }, { "gained": 1, @@ -80,9 +80,9 @@ "none": 1 }, "gap": ": undeclared item", - "share": 0.8205, + "share": 0.8462, "upper_bound": true, - "whole": 32 + "whole": 33 }, { "gained": 1, @@ -95,9 +95,9 @@ "none": 0 }, "gap": "EXEC CICS map: no field", - "share": 0.8462, + "share": 0.8718, "upper_bound": true, - "whole": 33 + "whole": 34 }, { "gained": 1, @@ -109,10 +109,10 @@ "4": 1, "none": 0 }, - "gap": "EXEC CICS WEB CONVERSE POST", - "share": 0.8718, + "gap": "EXEC CICS: operand is not a data area", + "share": 0.8974, "upper_bound": true, - "whole": 34 + "whole": 35 }, { "gained": 1, @@ -125,9 +125,9 @@ "none": 0 }, "gap": "PERFORM: undeclared paragraph", - "share": 0.8974, + "share": 0.9231, "upper_bound": true, - "whole": 35 + "whole": 36 }, { "gained": 1, @@ -140,36 +140,36 @@ "none": 1 }, "gap": "refused: ExprError: PROCEDURE DIVISION does not parse", - "share": 0.9231, + "share": 0.9487, "upper_bound": true, - "whole": 36 + "whole": 37 } ], "copy_members": 1, "coverage_if_closed": [ { - "share": 0.3077, + "share": 0.3333, "top": 1, "upper_bound": false, - "whole": 12 + "whole": 13 }, { - "share": 0.5897, + "share": 0.6154, "top": 3, "upper_bound": true, - "whole": 23 + "whole": 24 }, { - "share": 0.7949, + "share": 0.8205, "top": 5, "upper_bound": true, - "whole": 31 + "whole": 32 }, { - "share": 0.8974, + "share": 0.9487, "top": 10, "upper_bound": true, - "whole": 35 + "whole": 37 } ], "estates": [ @@ -395,56 +395,8 @@ "4": 1, "none": 0 }, - "gap": "EXEC CICS WEB CONVERSE POST", - "owner": "#7525", - "programs": 1, - "refuses_program": false, - "status": "not modelled" - }, - { - "by_era": { - "0": 0, - "1": 0, - "2": 0, - "3": 0, - "4": 1, - "none": 0 - }, - "estates": 1, - "estates_by_era": { - "0": 0, - "1": 0, - "2": 0, - "3": 0, - "4": 1, - "none": 0 - }, - "gap": "JSON GENERATE: not modelled", - "owner": "#7524", - "programs": 1, - "refuses_program": false, - "status": "not modelled" - }, - { - "by_era": { - "0": 0, - "1": 0, - "2": 0, - "3": 0, - "4": 1, - "none": 0 - }, - "estates": 1, - "estates_by_era": { - "0": 0, - "1": 0, - "2": 0, - "3": 0, - "4": 1, - "none": 0 - }, - "gap": "JSON PARSE: not modelled", - "owner": "#7524", + "gap": "EXEC CICS: operand is not a data area", + "owner": "#4270 (cics-command-slice)", "programs": 1, "refuses_program": false, "status": "not modelled" @@ -523,23 +475,6 @@ } ], "needs_together": [ - { - "by_era": { - "0": 0, - "1": 0, - "2": 0, - "3": 0, - "4": 1, - "none": 0 - }, - "estates": 1, - "gaps": [ - "JSON GENERATE: not modelled", - "JSON PARSE: not modelled" - ], - "programs": 1, - "upper_bound": false - }, { "by_era": { "0": 0, @@ -651,22 +586,7 @@ "none": 0 }, "gaps": [ - "EXEC CICS WEB CONVERSE POST" - ], - "programs": 1 - }, - { - "by_era": { - "0": 0, - "1": 0, - "2": 0, - "3": 0, - "4": 1, - "none": 0 - }, - "gaps": [ - "JSON GENERATE: not modelled", - "JSON PARSE: not modelled" + "EXEC CICS: operand is not a data area" ], "programs": 1 }, @@ -756,5 +676,5 @@ "programs": 2 } ], - "whole_now": 11 + "whole_now": 12 } diff --git a/tests/tools/gap_prevalence.py b/tests/tools/gap_prevalence.py index fc7484066..f936b4a82 100644 --- a/tests/tools/gap_prevalence.py +++ b/tests/tools/gap_prevalence.py @@ -334,6 +334,9 @@ def needs_together(progs: list[tuple[str, str, set[str]]], closed: set[str]) -> (r"^[A-Z0-9]+: undeclared item", ": undeclared item"), (r"^[A-Z0-9]+: no FD record", "FD: no record description"), (r"^EXEC CICS map : no ", "EXEC CICS map: no field"), + # #7709: the det port wants a data area where the operand is a literal or an expression (cics.py `ref`); the operand + # text is source, so only the class is kept + (r"^EXEC CICS not a data area", "EXEC CICS: operand is not a data area"), (r"^STOP literal", "STOP: literal"), (r"^EXHIBIT NAMED", "EXHIBIT NAMED: only plain names and literals"), (r"^MOVE CORRESPONDING", "MOVE CORRESPONDING"), diff --git a/tests/tools/test_gap_prevalence.py b/tests/tools/test_gap_prevalence.py index 9a431e89e..258954660 100644 --- a/tests/tools/test_gap_prevalence.py +++ b/tests/tools/test_gap_prevalence.py @@ -322,6 +322,9 @@ def test_render_adds_the_census_section(rows_and_inv): (": its bytes hold ", ": bytes overlap another item"), ("ACCEPT from SYSIN / console", "ACCEPT: from SYSIN / console"), ("PERFORM : undeclared paragraph", "PERFORM: undeclared paragraph"), + # #7709: the operand text (a literal, `LENGTH OF `) is source: only the class is kept, and it is owned + ("EXEC CICS not a data area: '…'", "EXEC CICS: operand is not a data area"), + ("EXEC CICS not a data area: Length of ", "EXEC CICS: operand is not a data area"), ("SQLCA: undeclared item", ": undeclared item"), ("PAYMAPI: undeclared item", ": undeclared item"), ("PAYIN: no FD record", "FD: no record description"),