@portll/cobolwork 0.6.0 → 0.7.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.
Files changed (140) hide show
  1. package/README.md +49 -18
  2. package/STABILITY.md +76 -0
  3. package/bin/cobolwork.mjs +30 -7
  4. package/lib/bms.mjs +21 -7
  5. package/lib/build.mjs +108 -53
  6. package/lib/capabilities.mjs +9 -10
  7. package/lib/cics-commands.mjs +501 -9
  8. package/lib/compliance.mjs +11 -0
  9. package/lib/consequence.mjs +13 -0
  10. package/lib/control-workers.mjs +161 -0
  11. package/lib/control.mjs +52 -3
  12. package/lib/dataflow.mjs +176 -125
  13. package/lib/db2/cursor.mjs +15 -0
  14. package/lib/db2/read.mjs +170 -0
  15. package/lib/db2/rules.mjs +77 -0
  16. package/lib/db2/stmt/alter.mjs +473 -0
  17. package/lib/db2/stmt/grant.mjs +125 -0
  18. package/lib/db2/stmt/index.mjs +141 -0
  19. package/lib/db2/stmt/misc.mjs +325 -0
  20. package/lib/db2/stmt/routine.mjs +564 -0
  21. package/lib/db2/stmt/storage.mjs +146 -0
  22. package/lib/db2/stmt/table.mjs +540 -0
  23. package/lib/db2/stmt/view.mjs +146 -0
  24. package/lib/diff.mjs +17 -5
  25. package/lib/evidence/cli.mjs +14 -3
  26. package/lib/evidence/record.mjs +1 -1
  27. package/lib/evidence/store.mjs +44 -31
  28. package/lib/exec-reading.mjs +51 -0
  29. package/lib/execution.mjs +3 -2
  30. package/lib/explain.mjs +2 -0
  31. package/lib/exploitability.mjs +11 -2
  32. package/lib/hlasm/asm/data.mjs +13 -1
  33. package/lib/hlasm/asm/sections.mjs +3 -1
  34. package/lib/hlasm/instr.mjs +25 -0
  35. package/lib/hlasm/macro/authorization.mjs +24 -4
  36. package/lib/hlasm/macro/datasets.mjs +30 -17
  37. package/lib/hlasm/macro/io.mjs +68 -45
  38. package/lib/hlasm/macro/le.mjs +2 -2
  39. package/lib/hlasm/macro/operator.mjs +32 -21
  40. package/lib/hlasm/macro/program.mjs +126 -84
  41. package/lib/hlasm/macro/recovery.mjs +10 -5
  42. package/lib/hlasm/macro/storage.mjs +64 -14
  43. package/lib/hlasm/macro/structured.mjs +1 -1
  44. package/lib/hlasm/model.mjs +35 -10
  45. package/lib/hlasm/mvs38.mjs +47 -0
  46. package/lib/hlasm/operands.mjs +10 -0
  47. package/lib/hlasm/optable.mjs +61 -0
  48. package/lib/hlasm/read.mjs +22 -8
  49. package/lib/hlasm.mjs +44 -7
  50. package/lib/ims/dli.mjs +37 -0
  51. package/lib/ims/macro/dbd.mjs +299 -0
  52. package/lib/ims/macro/psb.mjs +286 -0
  53. package/lib/ims/model.mjs +149 -0
  54. package/lib/ims/operands.mjs +23 -0
  55. package/lib/ims/read.mjs +37 -0
  56. package/lib/ims/rules.mjs +135 -0
  57. package/lib/ironwork.mjs +17 -13
  58. package/lib/kernel/pds-archive.mjs +256 -0
  59. package/lib/kernel/registry.mjs +14 -8
  60. package/lib/kernel/shared-pass.mjs +34 -9
  61. package/lib/kernel/source-tree.mjs +104 -36
  62. package/lib/kernel/version-key.mjs +17 -0
  63. package/lib/layout.mjs +26 -31
  64. package/lib/parser.mjs +136 -17
  65. package/lib/pli/cursor.mjs +15 -0
  66. package/lib/pli/expr.mjs +101 -0
  67. package/lib/pli/include.mjs +82 -0
  68. package/lib/pli/layout.mjs +125 -0
  69. package/lib/pli/lex.mjs +198 -0
  70. package/lib/pli/program.mjs +280 -0
  71. package/lib/pli/rules/based.mjs +95 -0
  72. package/lib/pli/rules/conditions.mjs +68 -0
  73. package/lib/pli/rules/entry.mjs +130 -0
  74. package/lib/pli/rules/index.mjs +24 -0
  75. package/lib/pli/rules/preprocessor.mjs +55 -0
  76. package/lib/pli/statements.mjs +130 -0
  77. package/lib/pli/stmt/alloc.mjs +45 -0
  78. package/lib/pli/stmt/assignment.mjs +56 -0
  79. package/lib/pli/stmt/call.mjs +104 -0
  80. package/lib/pli/stmt/conditions.mjs +94 -0
  81. package/lib/pli/stmt/control.mjs +219 -0
  82. package/lib/pli/stmt/declare.mjs +149 -0
  83. package/lib/pli/stmt/exec.mjs +55 -0
  84. package/lib/pli/stmt/io.mjs +239 -0
  85. package/lib/pli/stmt/misc.mjs +4 -0
  86. package/lib/pli/stmt/preprocessor.mjs +242 -0
  87. package/lib/pli/stmt/procedure.mjs +258 -0
  88. package/lib/pli/stmt/stream.mjs +283 -0
  89. package/lib/pli/storage.mjs +129 -0
  90. package/lib/precompile-check.mjs +124 -0
  91. package/lib/precompile-cics.mjs +7 -3
  92. package/lib/reach.mjs +11 -2
  93. package/lib/revision.json +1 -1
  94. package/lib/sarif.mjs +41 -3
  95. package/lib/scan.mjs +7 -1
  96. package/lib/sets/abend.mjs +16 -6
  97. package/lib/sets/cics.mjs +15 -35
  98. package/lib/sets/compile.mjs +41 -15
  99. package/lib/sets/crypto.mjs +5 -3
  100. package/lib/sets/ddl.mjs +36 -0
  101. package/lib/sets/flow.mjs +18 -1
  102. package/lib/sets/hidden.mjs +5 -3
  103. package/lib/sets/hlasm.mjs +72 -12
  104. package/lib/sets/ims.mjs +139 -0
  105. package/lib/sets/log.mjs +6 -6
  106. package/lib/sets/opaque.mjs +27 -7
  107. package/lib/sets/pli.mjs +40 -0
  108. package/lib/sets/recon.mjs +5 -3
  109. package/lib/sets/secrets.mjs +5 -3
  110. package/lib/sets/semantics.mjs +3 -0
  111. package/lib/sets/web.mjs +36 -22
  112. package/lib/site.mjs +10 -0
  113. package/lib/sources.mjs +80 -20
  114. package/lib/statement-cursor.mjs +67 -0
  115. package/lib/verify.mjs +3 -2
  116. package/lib/version.mjs +6 -0
  117. package/package.json +3 -2
  118. package/rules/compliance-cobit2019.json +432 -1
  119. package/rules/compliance-dora.json +414 -1
  120. package/rules/compliance-ffiec.json +414 -1
  121. package/rules/compliance-nist80053.json +466 -1
  122. package/rules/hlasm-optables.json +8024 -0
  123. package/schema/cobolwork-baseline.schema.json +36 -0
  124. package/schema/cobolwork-build-provenance.schema.json +187 -0
  125. package/schema/cobolwork-build.schema.json +382 -0
  126. package/schema/cobolwork-capabilities.schema.json +239 -0
  127. package/schema/cobolwork-diff.schema.json +217 -0
  128. package/schema/cobolwork-evidence.schema.json +161 -0
  129. package/schema/cobolwork-execution.schema.json +53 -0
  130. package/schema/cobolwork-explain.schema.json +360 -0
  131. package/schema/cobolwork-finding.schema.json +465 -0
  132. package/schema/cobolwork-flow.schema.json +465 -0
  133. package/schema/cobolwork-gate.schema.json +211 -0
  134. package/schema/cobolwork-inventory.schema.json +206 -0
  135. package/schema/cobolwork-parse.schema.json +105 -0
  136. package/schema/cobolwork-reach.schema.json +74 -0
  137. package/schema/cobolwork-report.schema.json +559 -0
  138. package/schema/cobolwork-witness.schema.json +107 -0
  139. package/schema/cobolwork.baseline.schema.json +101 -0
  140. package/schema/cobolwork.site.schema.json +116 -0
@@ -1342,6 +1342,18 @@
1342
1342
  "idsOnly": true
1343
1343
  }
1344
1344
  },
1345
+ {
1346
+ "kind": "compliance",
1347
+ "ruleId": "cics-queue-to-cics-dynamic-transfer",
1348
+ "framework": "cobit-2019",
1349
+ "clause": "DSS06.02",
1350
+ "rationale": "The rule reports: A CICS queue item decides which program CICS transfers to. That is information processed without the control that keeps it valid, authorised and accurate, which is what this practice asks of business process controls.",
1351
+ "source": {
1352
+ "doc": "cobit2019",
1353
+ "retrieved": "2026-09-20",
1354
+ "idsOnly": true
1355
+ }
1356
+ },
1345
1357
  {
1346
1358
  "kind": "compliance",
1347
1359
  "ruleId": "file-record-to-cics-sysid",
@@ -1354,6 +1366,18 @@
1354
1366
  "idsOnly": true
1355
1367
  }
1356
1368
  },
1369
+ {
1370
+ "kind": "compliance",
1371
+ "ruleId": "cics-queue-to-cics-sysid",
1372
+ "framework": "cobit-2019",
1373
+ "clause": "DSS06.02",
1374
+ "rationale": "The rule reports: A CICS queue item decides which region a CICS command is shipped to. That is information processed without the control that keeps it valid, authorised and accurate, which is what this practice asks of business process controls.",
1375
+ "source": {
1376
+ "doc": "cobit2019",
1377
+ "retrieved": "2026-09-20",
1378
+ "idsOnly": true
1379
+ }
1380
+ },
1357
1381
  {
1358
1382
  "kind": "compliance",
1359
1383
  "ruleId": "file-record-to-cics-system-resource",
@@ -1366,6 +1390,18 @@
1366
1390
  "idsOnly": true
1367
1391
  }
1368
1392
  },
1393
+ {
1394
+ "kind": "compliance",
1395
+ "ruleId": "cics-queue-to-cics-system-resource",
1396
+ "framework": "cobit-2019",
1397
+ "clause": "DSS06.02",
1398
+ "rationale": "The rule reports: A CICS queue item names the resource an EXEC CICS SET changes. That is information processed without the control that keeps it valid, authorised and accurate, which is what this practice asks of business process controls.",
1399
+ "source": {
1400
+ "doc": "cobit2019",
1401
+ "retrieved": "2026-09-20",
1402
+ "idsOnly": true
1403
+ }
1404
+ },
1369
1405
  {
1370
1406
  "kind": "compliance",
1371
1407
  "ruleId": "file-record-to-dynamic-file-path",
@@ -1378,6 +1414,18 @@
1378
1414
  "idsOnly": true
1379
1415
  }
1380
1416
  },
1417
+ {
1418
+ "kind": "compliance",
1419
+ "ruleId": "cics-queue-to-dynamic-file-path",
1420
+ "framework": "cobit-2019",
1421
+ "clause": "DSS06.02",
1422
+ "rationale": "The rule reports: A CICS queue item decides which file is opened. That is information processed without the control that keeps it valid, authorised and accurate, which is what this practice asks of business process controls.",
1423
+ "source": {
1424
+ "doc": "cobit2019",
1425
+ "retrieved": "2026-09-20",
1426
+ "idsOnly": true
1427
+ }
1428
+ },
1381
1429
  {
1382
1430
  "kind": "compliance",
1383
1431
  "ruleId": "file-record-to-dynamic-program-load",
@@ -1390,6 +1438,18 @@
1390
1438
  "idsOnly": true
1391
1439
  }
1392
1440
  },
1441
+ {
1442
+ "kind": "compliance",
1443
+ "ruleId": "cics-queue-to-dynamic-program-load",
1444
+ "framework": "cobit-2019",
1445
+ "clause": "DSS06.02",
1446
+ "rationale": "The rule reports: A CICS queue item decides which program is called. That is information processed without the control that keeps it valid, authorised and accurate, which is what this practice asks of business process controls.",
1447
+ "source": {
1448
+ "doc": "cobit2019",
1449
+ "retrieved": "2026-09-20",
1450
+ "idsOnly": true
1451
+ }
1452
+ },
1393
1453
  {
1394
1454
  "kind": "compliance",
1395
1455
  "ruleId": "file-record-to-dynamic-sql",
@@ -1402,6 +1462,18 @@
1402
1462
  "idsOnly": true
1403
1463
  }
1404
1464
  },
1465
+ {
1466
+ "kind": "compliance",
1467
+ "ruleId": "cics-queue-to-dynamic-sql",
1468
+ "framework": "cobit-2019",
1469
+ "clause": "DSS06.02",
1470
+ "rationale": "The rule reports: A CICS queue item reaches dynamic SQL. That is information processed without the control that keeps it valid, authorised and accurate, which is what this practice asks of business process controls.",
1471
+ "source": {
1472
+ "doc": "cobit2019",
1473
+ "retrieved": "2026-09-20",
1474
+ "idsOnly": true
1475
+ }
1476
+ },
1405
1477
  {
1406
1478
  "kind": "compliance",
1407
1479
  "ruleId": "file-record-to-extrapartition-queue",
@@ -1414,6 +1486,18 @@
1414
1486
  "idsOnly": true
1415
1487
  }
1416
1488
  },
1489
+ {
1490
+ "kind": "compliance",
1491
+ "ruleId": "cics-queue-to-extrapartition-queue",
1492
+ "framework": "cobit-2019",
1493
+ "clause": "DSS05.02",
1494
+ "rationale": "The rule reports: A CICS queue item is written to a transient-data queue that leaves the region. That is information or a credential crossing a connection with nothing protecting it, which this practice requires be secured.",
1495
+ "source": {
1496
+ "doc": "cobit2019",
1497
+ "retrieved": "2026-09-20",
1498
+ "idsOnly": true
1499
+ }
1500
+ },
1417
1501
  {
1418
1502
  "kind": "compliance",
1419
1503
  "ruleId": "file-record-to-http-header",
@@ -1426,6 +1510,18 @@
1426
1510
  "idsOnly": true
1427
1511
  }
1428
1512
  },
1513
+ {
1514
+ "kind": "compliance",
1515
+ "ruleId": "cics-queue-to-http-header",
1516
+ "framework": "cobit-2019",
1517
+ "clause": "DSS06.02",
1518
+ "rationale": "The rule reports: A CICS queue item is written into a header of the response. That is information processed without the control that keeps it valid, authorised and accurate, which is what this practice asks of business process controls.",
1519
+ "source": {
1520
+ "doc": "cobit2019",
1521
+ "retrieved": "2026-09-20",
1522
+ "idsOnly": true
1523
+ }
1524
+ },
1429
1525
  {
1430
1526
  "kind": "compliance",
1431
1527
  "ruleId": "file-record-to-internal-reader",
@@ -1438,6 +1534,18 @@
1438
1534
  "idsOnly": true
1439
1535
  }
1440
1536
  },
1537
+ {
1538
+ "kind": "compliance",
1539
+ "ruleId": "cics-queue-to-internal-reader",
1540
+ "framework": "cobit-2019",
1541
+ "clause": "DSS06.02",
1542
+ "rationale": "The rule reports: A CICS queue item is written into a job the internal reader submits. That is information processed without the control that keeps it valid, authorised and accurate, which is what this practice asks of business process controls.",
1543
+ "source": {
1544
+ "doc": "cobit2019",
1545
+ "retrieved": "2026-09-20",
1546
+ "idsOnly": true
1547
+ }
1548
+ },
1441
1549
  {
1442
1550
  "kind": "compliance",
1443
1551
  "ruleId": "file-record-to-message-queue",
@@ -1450,6 +1558,18 @@
1450
1558
  "idsOnly": true
1451
1559
  }
1452
1560
  },
1561
+ {
1562
+ "kind": "compliance",
1563
+ "ruleId": "cics-queue-to-message-queue",
1564
+ "framework": "cobit-2019",
1565
+ "clause": "DSS05.02",
1566
+ "rationale": "The rule reports: A CICS queue item is put on a message queue. That is information or a credential crossing a connection with nothing protecting it, which this practice requires be secured.",
1567
+ "source": {
1568
+ "doc": "cobit2019",
1569
+ "retrieved": "2026-09-20",
1570
+ "idsOnly": true
1571
+ }
1572
+ },
1453
1573
  {
1454
1574
  "kind": "compliance",
1455
1575
  "ruleId": "file-record-to-os-command",
@@ -1462,6 +1582,18 @@
1462
1582
  "idsOnly": true
1463
1583
  }
1464
1584
  },
1585
+ {
1586
+ "kind": "compliance",
1587
+ "ruleId": "cics-queue-to-os-command",
1588
+ "framework": "cobit-2019",
1589
+ "clause": "DSS06.02",
1590
+ "rationale": "The rule reports: A CICS queue item reaches an operating-system command routine. That is information processed without the control that keeps it valid, authorised and accurate, which is what this practice asks of business process controls.",
1591
+ "source": {
1592
+ "doc": "cobit2019",
1593
+ "retrieved": "2026-09-20",
1594
+ "idsOnly": true
1595
+ }
1596
+ },
1465
1597
  {
1466
1598
  "kind": "compliance",
1467
1599
  "ruleId": "file-record-to-outbound-host",
@@ -1474,6 +1606,18 @@
1474
1606
  "idsOnly": true
1475
1607
  }
1476
1608
  },
1609
+ {
1610
+ "kind": "compliance",
1611
+ "ruleId": "cics-queue-to-outbound-host",
1612
+ "framework": "cobit-2019",
1613
+ "clause": "DSS06.02",
1614
+ "rationale": "The rule reports: A CICS queue item decides the host or path this program sends a request to. That is information processed without the control that keeps it valid, authorised and accurate, which is what this practice asks of business process controls.",
1615
+ "source": {
1616
+ "doc": "cobit2019",
1617
+ "retrieved": "2026-09-20",
1618
+ "idsOnly": true
1619
+ }
1620
+ },
1477
1621
  {
1478
1622
  "kind": "compliance",
1479
1623
  "ruleId": "file-record-to-outbound-http",
@@ -1486,6 +1630,18 @@
1486
1630
  "idsOnly": true
1487
1631
  }
1488
1632
  },
1633
+ {
1634
+ "kind": "compliance",
1635
+ "ruleId": "cics-queue-to-outbound-http",
1636
+ "framework": "cobit-2019",
1637
+ "clause": "DSS05.02",
1638
+ "rationale": "The rule reports: A CICS queue item is sent to a remote server over HTTP. That is information or a credential crossing a connection with nothing protecting it, which this practice requires be secured.",
1639
+ "source": {
1640
+ "doc": "cobit2019",
1641
+ "retrieved": "2026-09-20",
1642
+ "idsOnly": true
1643
+ }
1644
+ },
1489
1645
  {
1490
1646
  "kind": "compliance",
1491
1647
  "ruleId": "file-record-to-queue-name",
@@ -1498,6 +1654,18 @@
1498
1654
  "idsOnly": true
1499
1655
  }
1500
1656
  },
1657
+ {
1658
+ "kind": "compliance",
1659
+ "ruleId": "cics-queue-to-queue-name",
1660
+ "framework": "cobit-2019",
1661
+ "clause": "DSS06.02",
1662
+ "rationale": "The rule reports: A CICS queue item names the queue a command reads, writes or deletes. That is information processed without the control that keeps it valid, authorised and accurate, which is what this practice asks of business process controls.",
1663
+ "source": {
1664
+ "doc": "cobit2019",
1665
+ "retrieved": "2026-09-20",
1666
+ "idsOnly": true
1667
+ }
1668
+ },
1501
1669
  {
1502
1670
  "kind": "compliance",
1503
1671
  "ruleId": "file-record-to-socket-send",
@@ -1510,6 +1678,18 @@
1510
1678
  "idsOnly": true
1511
1679
  }
1512
1680
  },
1681
+ {
1682
+ "kind": "compliance",
1683
+ "ruleId": "cics-queue-to-socket-send",
1684
+ "framework": "cobit-2019",
1685
+ "clause": "DSS05.02",
1686
+ "rationale": "The rule reports: A CICS queue item is written to a network socket. That is information or a credential crossing a connection with nothing protecting it, which this practice requires be secured.",
1687
+ "source": {
1688
+ "doc": "cobit2019",
1689
+ "retrieved": "2026-09-20",
1690
+ "idsOnly": true
1691
+ }
1692
+ },
1513
1693
  {
1514
1694
  "kind": "compliance",
1515
1695
  "ruleId": "file-record-to-web-response",
@@ -1522,6 +1702,18 @@
1522
1702
  "idsOnly": true
1523
1703
  }
1524
1704
  },
1705
+ {
1706
+ "kind": "compliance",
1707
+ "ruleId": "cics-queue-to-web-response",
1708
+ "framework": "cobit-2019",
1709
+ "clause": "DSS06.02",
1710
+ "rationale": "The rule reports: A CICS queue item is written into the response this program returns. That is information processed without the control that keeps it valid, authorised and accurate, which is what this practice asks of business process controls.",
1711
+ "source": {
1712
+ "doc": "cobit2019",
1713
+ "retrieved": "2026-09-20",
1714
+ "idsOnly": true
1715
+ }
1716
+ },
1525
1717
  {
1526
1718
  "kind": "compliance",
1527
1719
  "ruleId": "hidden-payload-in-identification-area",
@@ -1599,7 +1791,7 @@
1599
1791
  "ruleId": "hlasm-supervisor-state-change",
1600
1792
  "framework": "cobit-2019",
1601
1793
  "clause": "DSS05.04",
1602
- "rationale": "The rule reports: Assembler source switches to PSW key zero or supervisor state. That is access or authentication handled outside the managed identity and logical access this practice requires.",
1794
+ "rationale": "The rule reports: Assembler source switches to PSW key zero, another system key, or supervisor state. That is access or authentication handled outside the managed identity and logical access this practice requires.",
1603
1795
  "source": {
1604
1796
  "doc": "cobit2019",
1605
1797
  "retrieved": "2026-09-20",
@@ -2697,6 +2889,245 @@
2697
2889
  "retrieved": "2026-09-20",
2698
2890
  "idsOnly": true
2699
2891
  }
2892
+ },
2893
+ {
2894
+ "kind": "compliance",
2895
+ "ruleId": "db2-exit-routine-declared",
2896
+ "framework": "cobit-2019",
2897
+ "clause": "BAI09.01",
2898
+ "rationale": "The rule reports: A table names an exit routine that runs inside Db2. That is a component the record of assets does not account for, which this practice requires be identified and recorded.",
2899
+ "source": {
2900
+ "doc": "cobit2019",
2901
+ "retrieved": "2026-09-20",
2902
+ "idsOnly": true
2903
+ }
2904
+ },
2905
+ {
2906
+ "kind": "compliance",
2907
+ "ruleId": "db2-external-routine",
2908
+ "framework": "cobit-2019",
2909
+ "clause": "BAI09.01",
2910
+ "rationale": "The rule reports: A procedure or function runs an external load module. That is a component the record of assets does not account for, which this practice requires be identified and recorded.",
2911
+ "source": {
2912
+ "doc": "cobit2019",
2913
+ "retrieved": "2026-09-20",
2914
+ "idsOnly": true
2915
+ }
2916
+ },
2917
+ {
2918
+ "kind": "compliance",
2919
+ "ruleId": "db2-grant-to-public",
2920
+ "framework": "cobit-2019",
2921
+ "clause": "DSS05.04",
2922
+ "rationale": "The rule reports: A GRANT gives privileges to PUBLIC, every authorization ID. That is access or authentication handled outside the managed identity and logical access this practice requires.",
2923
+ "source": {
2924
+ "doc": "cobit2019",
2925
+ "retrieved": "2026-09-20",
2926
+ "idsOnly": true
2927
+ }
2928
+ },
2929
+ {
2930
+ "kind": "compliance",
2931
+ "ruleId": "db2-grant-with-grant-option",
2932
+ "framework": "cobit-2019",
2933
+ "clause": "DSS05.04",
2934
+ "rationale": "The rule reports: WITH GRANT OPTION lets the grantee grant the privilege to others. That is access or authentication handled outside the managed identity and logical access this practice requires.",
2935
+ "source": {
2936
+ "doc": "cobit2019",
2937
+ "retrieved": "2026-09-20",
2938
+ "idsOnly": true
2939
+ }
2940
+ },
2941
+ {
2942
+ "kind": "compliance",
2943
+ "ruleId": "db2-system-authority-granted",
2944
+ "framework": "cobit-2019",
2945
+ "clause": "DSS05.04",
2946
+ "rationale": "The rule reports: A system or database authority is granted. That is access or authentication handled outside the managed identity and logical access this practice requires.",
2947
+ "source": {
2948
+ "doc": "cobit2019",
2949
+ "retrieved": "2026-09-20",
2950
+ "idsOnly": true
2951
+ }
2952
+ },
2953
+ {
2954
+ "kind": "compliance",
2955
+ "ruleId": "ims-definition-inconsistent",
2956
+ "framework": "cobit-2019",
2957
+ "clause": "DSS06.02",
2958
+ "rationale": "The rule reports: A DBD or PSB holds what DBDGEN, PSBGEN or ACBGEN refuses. That is information processed without the control that keeps it valid, authorised and accurate, which is what this practice asks of business process controls.",
2959
+ "source": {
2960
+ "doc": "cobit2019",
2961
+ "retrieved": "2026-09-20",
2962
+ "idsOnly": true
2963
+ }
2964
+ },
2965
+ {
2966
+ "kind": "compliance",
2967
+ "ruleId": "ims-pcb-procopt-all",
2968
+ "framework": "cobit-2019",
2969
+ "clause": "DSS05.04",
2970
+ "rationale": "The rule reports: A database PCB lets the program get, insert, replace and delete its sensitive segments. That is access or authentication handled outside the managed identity and logical access this practice requires.",
2971
+ "source": {
2972
+ "doc": "cobit2019",
2973
+ "retrieved": "2026-09-20",
2974
+ "idsOnly": true
2975
+ }
2976
+ },
2977
+ {
2978
+ "kind": "compliance",
2979
+ "ruleId": "ims-senseg-unknown-segment",
2980
+ "framework": "cobit-2019",
2981
+ "clause": "DSS06.02",
2982
+ "rationale": "The rule reports: A SENSEG names a segment its PCB's DBD does not define, which ends the program with abend U0914. That is information processed without the control that keeps it valid, authorised and accurate, which is what this practice asks of business process controls.",
2983
+ "source": {
2984
+ "doc": "cobit2019",
2985
+ "retrieved": "2026-09-20",
2986
+ "idsOnly": true
2987
+ }
2988
+ },
2989
+ {
2990
+ "kind": "compliance",
2991
+ "ruleId": "pli-based-storage-addressing",
2992
+ "framework": "cobit-2019",
2993
+ "clause": "BAI09.01",
2994
+ "rationale": "The rule reports: A program addresses storage through a pointer, so data flow through it is not followed. That is a component the record of assets does not account for, which this practice requires be identified and recorded.",
2995
+ "source": {
2996
+ "doc": "cobit2019",
2997
+ "retrieved": "2026-09-20",
2998
+ "idsOnly": true
2999
+ }
3000
+ },
3001
+ {
3002
+ "kind": "compliance",
3003
+ "ruleId": "pli-entry-variable-call",
3004
+ "framework": "cobit-2019",
3005
+ "clause": "BAI09.01",
3006
+ "rationale": "The rule reports: A CALL through an entry variable dispatches to a procedure chosen at run time, so the callee is not known statically. That is a component the record of assets does not account for, which this practice requires be identified and recorded.",
3007
+ "source": {
3008
+ "doc": "cobit2019",
3009
+ "retrieved": "2026-09-20",
3010
+ "idsOnly": true
3011
+ }
3012
+ },
3013
+ {
3014
+ "kind": "compliance",
3015
+ "ruleId": "pli-error-condition-ignored",
3016
+ "framework": "cobit-2019",
3017
+ "clause": "DSS06.02",
3018
+ "rationale": "The rule reports: An ON unit for a condition does nothing with it, so the condition is silently ignored. That is information processed without the control that keeps it valid, authorised and accurate, which is what this practice asks of business process controls.",
3019
+ "source": {
3020
+ "doc": "cobit2019",
3021
+ "retrieved": "2026-09-20",
3022
+ "idsOnly": true
3023
+ }
3024
+ },
3025
+ {
3026
+ "kind": "compliance",
3027
+ "ruleId": "pli-fetch-title-variable",
3028
+ "framework": "cobit-2019",
3029
+ "clause": "DSS06.02",
3030
+ "rationale": "The rule reports: A FETCH whose TITLE is not a literal names the module to load at run time. That is information processed without the control that keeps it valid, authorised and accurate, which is what this practice asks of business process controls.",
3031
+ "source": {
3032
+ "doc": "cobit2019",
3033
+ "retrieved": "2026-09-20",
3034
+ "idsOnly": true
3035
+ }
3036
+ },
3037
+ {
3038
+ "kind": "compliance",
3039
+ "ruleId": "pli-preprocessor-in-use",
3040
+ "framework": "cobit-2019",
3041
+ "clause": "BAI09.01",
3042
+ "rationale": "The rule reports: A program uses PL/I preprocessor directives, so the source text is not the code that is compiled. That is a component the record of assets does not account for, which this practice requires be identified and recorded.",
3043
+ "source": {
3044
+ "doc": "cobit2019",
3045
+ "retrieved": "2026-09-20",
3046
+ "idsOnly": true
3047
+ }
3048
+ },
3049
+ {
3050
+ "kind": "compliance",
3051
+ "ruleId": "ims-procopt-broader-than-used",
3052
+ "framework": "cobit-2019",
3053
+ "clause": "DSS05.04",
3054
+ "rationale": "The rule reports: A PSB grants a processing option that no DL/I call of the program it is named for uses. That is access or authentication handled outside the managed identity and logical access this practice requires.",
3055
+ "source": {
3056
+ "doc": "cobit2019",
3057
+ "retrieved": "2026-09-20",
3058
+ "idsOnly": true
3059
+ }
3060
+ }
3061
+ ],
3062
+ "evidence": [
3063
+ {
3064
+ "kind": "evidence",
3065
+ "evidenceId": "journal-records",
3066
+ "tools": [
3067
+ "cobolwork",
3068
+ "ironwork"
3069
+ ],
3070
+ "framework": "cobit-2019",
3071
+ "clause": "DSS06.05",
3072
+ "rationale": "The evidence is a run journal's records, one per event: what ran and with which arguments, the inputs and DD files it read, the programs it called, where data left it, and how and when it ended. That makes the events of a run traceable afterwards, to what ran, on what and with what result, which this practice requires of information events.",
3073
+ "source": {
3074
+ "doc": "cobit2019",
3075
+ "retrieved": "2026-09-20",
3076
+ "idsOnly": true
3077
+ }
3078
+ },
3079
+ {
3080
+ "kind": "evidence",
3081
+ "evidenceId": "journal-chain",
3082
+ "tools": [
3083
+ "cobolwork",
3084
+ "ironwork"
3085
+ ],
3086
+ "framework": "cobit-2019",
3087
+ "clause": "DSS06.05",
3088
+ "rationale": "The evidence is the SHA-256 chain through each run journal and the ledger that names every run, which `cobolwork evidence verify` recomputes, so a record changed, removed or reordered after it was written is found. That makes the events of a run traceable afterwards, to what ran, on what and with what result, which this practice requires of information events.",
3089
+ "source": {
3090
+ "doc": "cobit2019",
3091
+ "retrieved": "2026-09-20",
3092
+ "idsOnly": true
3093
+ }
3094
+ },
3095
+ {
3096
+ "kind": "evidence",
3097
+ "evidenceId": "provenance",
3098
+ "tools": [
3099
+ "cobolwork",
3100
+ "ironwork"
3101
+ ],
3102
+ "framework": "cobit-2019",
3103
+ "clause": "DSS06.05",
3104
+ "rationale": "The evidence is the in-toto SLSA provenance statement of a run, naming its output and the sources it was built from by digest, the tool, and the tip of its journal. That makes the events of a run traceable afterwards, to what ran, on what and with what result, which this practice requires of information events.",
3105
+ "source": {
3106
+ "doc": "cobit2019",
3107
+ "retrieved": "2026-09-20",
3108
+ "idsOnly": true
3109
+ }
3110
+ },
3111
+ {
3112
+ "kind": "evidence",
3113
+ "evidenceId": "options-in-force",
3114
+ "tools": [
3115
+ "ironwork"
3116
+ ],
3117
+ "framework": "cobit-2019",
3118
+ "clause": "BAI10.04",
3119
+ "rationale": "The evidence is the options a compile or run used, its compliance level and dialect among them, in the provenance statement's optionsInForce and the journal's open record. That reports the configuration each compile and run used, which this practice requires be produced.",
3120
+ "source": {
3121
+ "doc": "cobit2019",
3122
+ "retrieved": "2026-09-20",
3123
+ "idsOnly": true
3124
+ }
3125
+ }
3126
+ ],
3127
+ "unmappedEvidence": [
3128
+ {
3129
+ "evidenceId": "assumptions-register",
3130
+ "why": "No COBIT 2019 practice is about how a compiler resolves what its language leaves open, for the reason NIST declines it."
2700
3131
  }
2701
3132
  ]
2702
3133
  }