@portll/cobolwork 0.5.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 (163) hide show
  1. package/README.md +89 -26
  2. package/STABILITY.md +76 -0
  3. package/bin/cobolwork.mjs +56 -14
  4. package/lib/baseline.mjs +9 -0
  5. package/lib/bms.mjs +21 -7
  6. package/lib/build.mjs +133 -53
  7. package/lib/capabilities.mjs +13 -11
  8. package/lib/cics-commands.mjs +501 -9
  9. package/lib/compliance.mjs +11 -0
  10. package/lib/consequence.mjs +17 -0
  11. package/lib/control-reuse.mjs +113 -0
  12. package/lib/control-workers.mjs +161 -0
  13. package/lib/control.mjs +77 -4
  14. package/lib/dataflow.mjs +402 -152
  15. package/lib/db2/cursor.mjs +15 -0
  16. package/lib/db2/read.mjs +170 -0
  17. package/lib/db2/rules.mjs +77 -0
  18. package/lib/db2/stmt/alter.mjs +473 -0
  19. package/lib/db2/stmt/grant.mjs +125 -0
  20. package/lib/db2/stmt/index.mjs +141 -0
  21. package/lib/db2/stmt/misc.mjs +325 -0
  22. package/lib/db2/stmt/routine.mjs +564 -0
  23. package/lib/db2/stmt/storage.mjs +146 -0
  24. package/lib/db2/stmt/table.mjs +540 -0
  25. package/lib/db2/stmt/view.mjs +146 -0
  26. package/lib/diff.mjs +17 -5
  27. package/lib/equivalence.mjs +44 -5
  28. package/lib/evidence/cli.mjs +26 -7
  29. package/lib/evidence/record.mjs +16 -6
  30. package/lib/evidence/seal.mjs +17 -0
  31. package/lib/evidence/store.mjs +44 -15
  32. package/lib/evidence/timestamp.mjs +83 -0
  33. package/lib/evidence/verify.mjs +120 -42
  34. package/lib/exec-reading.mjs +51 -0
  35. package/lib/execution.mjs +3 -2
  36. package/lib/explain.mjs +2 -0
  37. package/lib/exploitability.mjs +11 -2
  38. package/lib/hlasm/asm/data.mjs +128 -0
  39. package/lib/hlasm/asm/listing.mjs +43 -0
  40. package/lib/hlasm/asm/output.mjs +45 -0
  41. package/lib/hlasm/asm/sections.mjs +161 -0
  42. package/lib/hlasm/asm/symbols.mjs +78 -0
  43. package/lib/hlasm/exec.mjs +27 -0
  44. package/lib/hlasm/expr.mjs +167 -0
  45. package/lib/hlasm/instr.mjs +73 -0
  46. package/lib/hlasm/locate.mjs +333 -0
  47. package/lib/hlasm/macro/authorization.mjs +146 -0
  48. package/lib/hlasm/macro/datasets.mjs +107 -0
  49. package/lib/hlasm/macro/io.mjs +162 -0
  50. package/lib/hlasm/macro/le.mjs +53 -0
  51. package/lib/hlasm/macro/linkage.mjs +143 -0
  52. package/lib/hlasm/macro/operator.mjs +77 -0
  53. package/lib/hlasm/macro/program.mjs +184 -0
  54. package/lib/hlasm/macro/recovery.mjs +85 -0
  55. package/lib/hlasm/macro/storage.mjs +167 -0
  56. package/lib/hlasm/macro/structured.mjs +131 -0
  57. package/lib/hlasm/model.mjs +97 -0
  58. package/lib/hlasm/mvs38.mjs +47 -0
  59. package/lib/hlasm/operands.mjs +59 -0
  60. package/lib/hlasm/optable.mjs +61 -0
  61. package/lib/hlasm/read.mjs +130 -0
  62. package/lib/hlasm.mjs +44 -7
  63. package/lib/ims/dli.mjs +37 -0
  64. package/lib/ims/macro/dbd.mjs +299 -0
  65. package/lib/ims/macro/psb.mjs +286 -0
  66. package/lib/ims/model.mjs +149 -0
  67. package/lib/ims/operands.mjs +23 -0
  68. package/lib/ims/read.mjs +37 -0
  69. package/lib/ims/rules.mjs +135 -0
  70. package/lib/inventory.mjs +10 -7
  71. package/lib/ironwork-ids.mjs +24 -0
  72. package/lib/ironwork.mjs +20 -13
  73. package/lib/kernel/pds-archive.mjs +256 -0
  74. package/lib/kernel/registry.mjs +32 -23
  75. package/lib/kernel/shared-pass.mjs +163 -0
  76. package/lib/kernel/source-tree.mjs +104 -36
  77. package/lib/kernel/version-key.mjs +17 -0
  78. package/lib/layout.mjs +26 -31
  79. package/lib/options.mjs +26 -4
  80. package/lib/parser.mjs +136 -17
  81. package/lib/pli/cursor.mjs +15 -0
  82. package/lib/pli/expr.mjs +101 -0
  83. package/lib/pli/include.mjs +82 -0
  84. package/lib/pli/layout.mjs +125 -0
  85. package/lib/pli/lex.mjs +198 -0
  86. package/lib/pli/program.mjs +280 -0
  87. package/lib/pli/rules/based.mjs +95 -0
  88. package/lib/pli/rules/conditions.mjs +68 -0
  89. package/lib/pli/rules/entry.mjs +130 -0
  90. package/lib/pli/rules/index.mjs +24 -0
  91. package/lib/pli/rules/preprocessor.mjs +55 -0
  92. package/lib/pli/statements.mjs +130 -0
  93. package/lib/pli/stmt/alloc.mjs +45 -0
  94. package/lib/pli/stmt/assignment.mjs +56 -0
  95. package/lib/pli/stmt/call.mjs +104 -0
  96. package/lib/pli/stmt/conditions.mjs +94 -0
  97. package/lib/pli/stmt/control.mjs +219 -0
  98. package/lib/pli/stmt/declare.mjs +149 -0
  99. package/lib/pli/stmt/exec.mjs +55 -0
  100. package/lib/pli/stmt/io.mjs +239 -0
  101. package/lib/pli/stmt/misc.mjs +4 -0
  102. package/lib/pli/stmt/preprocessor.mjs +242 -0
  103. package/lib/pli/stmt/procedure.mjs +258 -0
  104. package/lib/pli/stmt/stream.mjs +283 -0
  105. package/lib/pli/storage.mjs +129 -0
  106. package/lib/policy.mjs +6 -0
  107. package/lib/precompile-check.mjs +124 -0
  108. package/lib/precompile-cics.mjs +8 -4
  109. package/lib/reach.mjs +11 -2
  110. package/lib/revision.json +1 -1
  111. package/lib/sarif.mjs +44 -3
  112. package/lib/scan.mjs +28 -12
  113. package/lib/sets/abend.mjs +82 -8
  114. package/lib/sets/build.mjs +43 -37
  115. package/lib/sets/cics.mjs +20 -38
  116. package/lib/sets/compile.mjs +46 -18
  117. package/lib/sets/copybook.mjs +5 -3
  118. package/lib/sets/crypto.mjs +5 -3
  119. package/lib/sets/ddl.mjs +36 -0
  120. package/lib/sets/flow.mjs +32 -8
  121. package/lib/sets/hidden.mjs +5 -3
  122. package/lib/sets/hlasm.mjs +124 -8
  123. package/lib/sets/ims.mjs +139 -0
  124. package/lib/sets/log.mjs +11 -9
  125. package/lib/sets/opaque.mjs +27 -7
  126. package/lib/sets/pli.mjs +40 -0
  127. package/lib/sets/priv.mjs +5 -3
  128. package/lib/sets/recon.mjs +5 -3
  129. package/lib/sets/secrets.mjs +112 -0
  130. package/lib/sets/semantics.mjs +8 -3
  131. package/lib/sets/web.mjs +39 -23
  132. package/lib/site.mjs +10 -0
  133. package/lib/sources.mjs +80 -20
  134. package/lib/statement-cursor.mjs +67 -0
  135. package/lib/verify.mjs +3 -2
  136. package/lib/version.mjs +6 -0
  137. package/package.json +3 -2
  138. package/rules/compliance-cobit2019.json +520 -5
  139. package/rules/compliance-dora.json +509 -5
  140. package/rules/compliance-ffiec.json +505 -1
  141. package/rules/compliance-nist80053.json +557 -1
  142. package/rules/gitleaks-mainframe.toml +46 -15
  143. package/rules/hlasm-instructions.json +2396 -0
  144. package/rules/hlasm-optables.json +8024 -0
  145. package/schema/cobolwork-baseline.schema.json +36 -0
  146. package/schema/cobolwork-build-provenance.schema.json +187 -0
  147. package/schema/cobolwork-build.schema.json +382 -0
  148. package/schema/cobolwork-capabilities.schema.json +239 -0
  149. package/schema/cobolwork-diff.schema.json +217 -0
  150. package/schema/cobolwork-evidence.schema.json +161 -0
  151. package/schema/cobolwork-execution.schema.json +53 -0
  152. package/schema/cobolwork-explain.schema.json +360 -0
  153. package/schema/cobolwork-finding.schema.json +465 -0
  154. package/schema/cobolwork-flow.schema.json +465 -0
  155. package/schema/cobolwork-gate.schema.json +211 -0
  156. package/schema/cobolwork-inventory.schema.json +206 -0
  157. package/schema/cobolwork-parse.schema.json +105 -0
  158. package/schema/cobolwork-reach.schema.json +74 -0
  159. package/schema/cobolwork-report.schema.json +559 -0
  160. package/schema/cobolwork-witness.schema.json +107 -0
  161. package/schema/cobolwork.baseline.schema.json +101 -0
  162. package/schema/cobolwork.policy.schema.json +7 -0
  163. package/schema/cobolwork.site.schema.json +116 -0
@@ -358,6 +358,18 @@
358
358
  "idsOnly": true
359
359
  }
360
360
  },
361
+ {
362
+ "kind": "compliance",
363
+ "ruleId": "cics-new-password",
364
+ "framework": "cobit-2019",
365
+ "clause": "DSS05.04",
366
+ "rationale": "The rule reports: Credential pattern: cics new password. That is access or authentication handled outside the managed identity and logical access this practice requires.",
367
+ "source": {
368
+ "doc": "cobit2019",
369
+ "retrieved": "2026-09-20",
370
+ "idsOnly": true
371
+ }
372
+ },
361
373
  {
362
374
  "kind": "compliance",
363
375
  "ruleId": "cics-protected-field-to-record-key",
@@ -994,6 +1006,18 @@
994
1006
  "idsOnly": true
995
1007
  }
996
1008
  },
1009
+ {
1010
+ "kind": "compliance",
1011
+ "ruleId": "credential-in-source",
1012
+ "framework": "cobit-2019",
1013
+ "clause": "DSS05.04",
1014
+ "rationale": "The rule reports: A credential is written into the source. That is access or authentication handled outside the managed identity and logical access this practice requires.",
1015
+ "source": {
1016
+ "doc": "cobit2019",
1017
+ "retrieved": "2026-09-20",
1018
+ "idsOnly": true
1019
+ }
1020
+ },
997
1021
  {
998
1022
  "kind": "compliance",
999
1023
  "ruleId": "csd-defines-diagnostic-transaction",
@@ -1318,6 +1342,18 @@
1318
1342
  "idsOnly": true
1319
1343
  }
1320
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
+ },
1321
1357
  {
1322
1358
  "kind": "compliance",
1323
1359
  "ruleId": "file-record-to-cics-sysid",
@@ -1330,6 +1366,18 @@
1330
1366
  "idsOnly": true
1331
1367
  }
1332
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
+ },
1333
1381
  {
1334
1382
  "kind": "compliance",
1335
1383
  "ruleId": "file-record-to-cics-system-resource",
@@ -1342,6 +1390,18 @@
1342
1390
  "idsOnly": true
1343
1391
  }
1344
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
+ },
1345
1405
  {
1346
1406
  "kind": "compliance",
1347
1407
  "ruleId": "file-record-to-dynamic-file-path",
@@ -1354,6 +1414,18 @@
1354
1414
  "idsOnly": true
1355
1415
  }
1356
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
+ },
1357
1429
  {
1358
1430
  "kind": "compliance",
1359
1431
  "ruleId": "file-record-to-dynamic-program-load",
@@ -1366,6 +1438,18 @@
1366
1438
  "idsOnly": true
1367
1439
  }
1368
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
+ },
1369
1453
  {
1370
1454
  "kind": "compliance",
1371
1455
  "ruleId": "file-record-to-dynamic-sql",
@@ -1378,6 +1462,18 @@
1378
1462
  "idsOnly": true
1379
1463
  }
1380
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
+ },
1381
1477
  {
1382
1478
  "kind": "compliance",
1383
1479
  "ruleId": "file-record-to-extrapartition-queue",
@@ -1390,6 +1486,18 @@
1390
1486
  "idsOnly": true
1391
1487
  }
1392
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
+ },
1393
1501
  {
1394
1502
  "kind": "compliance",
1395
1503
  "ruleId": "file-record-to-http-header",
@@ -1402,6 +1510,18 @@
1402
1510
  "idsOnly": true
1403
1511
  }
1404
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
+ },
1405
1525
  {
1406
1526
  "kind": "compliance",
1407
1527
  "ruleId": "file-record-to-internal-reader",
@@ -1414,6 +1534,18 @@
1414
1534
  "idsOnly": true
1415
1535
  }
1416
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
+ },
1417
1549
  {
1418
1550
  "kind": "compliance",
1419
1551
  "ruleId": "file-record-to-message-queue",
@@ -1426,6 +1558,18 @@
1426
1558
  "idsOnly": true
1427
1559
  }
1428
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
+ },
1429
1573
  {
1430
1574
  "kind": "compliance",
1431
1575
  "ruleId": "file-record-to-os-command",
@@ -1438,6 +1582,18 @@
1438
1582
  "idsOnly": true
1439
1583
  }
1440
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
+ },
1441
1597
  {
1442
1598
  "kind": "compliance",
1443
1599
  "ruleId": "file-record-to-outbound-host",
@@ -1450,6 +1606,18 @@
1450
1606
  "idsOnly": true
1451
1607
  }
1452
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
+ },
1453
1621
  {
1454
1622
  "kind": "compliance",
1455
1623
  "ruleId": "file-record-to-outbound-http",
@@ -1462,6 +1630,18 @@
1462
1630
  "idsOnly": true
1463
1631
  }
1464
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
+ },
1465
1645
  {
1466
1646
  "kind": "compliance",
1467
1647
  "ruleId": "file-record-to-queue-name",
@@ -1474,6 +1654,18 @@
1474
1654
  "idsOnly": true
1475
1655
  }
1476
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
+ },
1477
1669
  {
1478
1670
  "kind": "compliance",
1479
1671
  "ruleId": "file-record-to-socket-send",
@@ -1486,6 +1678,18 @@
1486
1678
  "idsOnly": true
1487
1679
  }
1488
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
+ },
1489
1693
  {
1490
1694
  "kind": "compliance",
1491
1695
  "ruleId": "file-record-to-web-response",
@@ -1498,6 +1702,18 @@
1498
1702
  "idsOnly": true
1499
1703
  }
1500
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
+ },
1501
1717
  {
1502
1718
  "kind": "compliance",
1503
1719
  "ruleId": "hidden-payload-in-identification-area",
@@ -1575,7 +1791,19 @@
1575
1791
  "ruleId": "hlasm-supervisor-state-change",
1576
1792
  "framework": "cobit-2019",
1577
1793
  "clause": "DSS05.04",
1578
- "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.",
1795
+ "source": {
1796
+ "doc": "cobit2019",
1797
+ "retrieved": "2026-09-20",
1798
+ "idsOnly": true
1799
+ }
1800
+ },
1801
+ {
1802
+ "kind": "compliance",
1803
+ "ruleId": "hlasm-runtime-module-name",
1804
+ "framework": "cobit-2019",
1805
+ "clause": "DSS06.02",
1806
+ "rationale": "The rule reports: Assembler source loads or calls a module whose name it reads from storage 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.",
1579
1807
  "source": {
1580
1808
  "doc": "cobit2019",
1581
1809
  "retrieved": "2026-09-20",
@@ -1630,6 +1858,30 @@
1630
1858
  "idsOnly": true
1631
1859
  }
1632
1860
  },
1861
+ {
1862
+ "kind": "compliance",
1863
+ "ruleId": "input-causes-hang",
1864
+ "framework": "cobit-2019",
1865
+ "clause": "DSS06.02",
1866
+ "rationale": "The rule reports: An input the program accepts keeps a loop running past the statement limit that stands in for its time limit (S322). That is information processed without the control that keeps the processing complete and within its bounds, which is what this practice asks of business process controls.",
1867
+ "source": {
1868
+ "doc": "cobit2019",
1869
+ "retrieved": "2026-09-20",
1870
+ "idsOnly": true
1871
+ }
1872
+ },
1873
+ {
1874
+ "kind": "compliance",
1875
+ "ruleId": "input-selects-program",
1876
+ "framework": "cobit-2019",
1877
+ "clause": "DSS06.02",
1878
+ "rationale": "The rule reports: An input the program accepts chooses the program a CALL loads. That is information processed without the control that keeps it valid and authorised: the input decides what code runs, which this practice asks business process controls to prevent.",
1879
+ "source": {
1880
+ "doc": "cobit2019",
1881
+ "retrieved": "2026-09-20",
1882
+ "idsOnly": true
1883
+ }
1884
+ },
1633
1885
  {
1634
1886
  "kind": "compliance",
1635
1887
  "ruleId": "input-causes-abend-s0c4",
@@ -2088,10 +2340,10 @@
2088
2340
  },
2089
2341
  {
2090
2342
  "kind": "compliance",
2091
- "ruleId": "jcl-racf-password",
2343
+ "ruleId": "jcl-racf-new-password",
2092
2344
  "framework": "cobit-2019",
2093
2345
  "clause": "DSS05.04",
2094
- "rationale": "The rule reports: Credential pattern: jcl racf password. That is access or authentication handled outside the managed identity and logical access this practice requires.",
2346
+ "rationale": "The rule reports: Credential pattern: jcl racf new password. That is access or authentication handled outside the managed identity and logical access this practice requires.",
2095
2347
  "source": {
2096
2348
  "doc": "cobit2019",
2097
2349
  "retrieved": "2026-09-20",
@@ -2100,10 +2352,10 @@
2100
2352
  },
2101
2353
  {
2102
2354
  "kind": "compliance",
2103
- "ruleId": "jcl-racf-new-password",
2355
+ "ruleId": "jcl-racf-password",
2104
2356
  "framework": "cobit-2019",
2105
2357
  "clause": "DSS05.04",
2106
- "rationale": "The rule reports: Credential pattern: jcl racf new password. That is access or authentication handled outside the managed identity and logical access this practice requires.",
2358
+ "rationale": "The rule reports: Credential pattern: jcl racf password. That is access or authentication handled outside the managed identity and logical access this practice requires.",
2107
2359
  "source": {
2108
2360
  "doc": "cobit2019",
2109
2361
  "retrieved": "2026-09-20",
@@ -2278,6 +2530,18 @@
2278
2530
  "idsOnly": true
2279
2531
  }
2280
2532
  },
2533
+ {
2534
+ "kind": "compliance",
2535
+ "ruleId": "racf-command-new-password",
2536
+ "framework": "cobit-2019",
2537
+ "clause": "DSS05.04",
2538
+ "rationale": "The rule reports: Credential pattern: racf command new password. That is access or authentication handled outside the managed identity and logical access this practice requires.",
2539
+ "source": {
2540
+ "doc": "cobit2019",
2541
+ "retrieved": "2026-09-20",
2542
+ "idsOnly": true
2543
+ }
2544
+ },
2281
2545
  {
2282
2546
  "kind": "compliance",
2283
2547
  "ruleId": "racf-command-password",
@@ -2386,6 +2650,18 @@
2386
2650
  "idsOnly": true
2387
2651
  }
2388
2652
  },
2653
+ {
2654
+ "kind": "compliance",
2655
+ "ruleId": "tso-logon-new-password",
2656
+ "framework": "cobit-2019",
2657
+ "clause": "DSS05.04",
2658
+ "rationale": "The rule reports: Credential pattern: tso logon new password. That is access or authentication handled outside the managed identity and logical access this practice requires.",
2659
+ "source": {
2660
+ "doc": "cobit2019",
2661
+ "retrieved": "2026-09-20",
2662
+ "idsOnly": true
2663
+ }
2664
+ },
2389
2665
  {
2390
2666
  "kind": "compliance",
2391
2667
  "ruleId": "tso-logon-password",
@@ -2613,6 +2889,245 @@
2613
2889
  "retrieved": "2026-09-20",
2614
2890
  "idsOnly": true
2615
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."
2616
3131
  }
2617
3132
  ]
2618
3133
  }