@dzhechkov/harness-core 0.3.138 → 0.3.140
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.
- package/.dz-manifest.json +31 -7
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/score.d.ts +44 -0
- package/dist/score.d.ts.map +1 -0
- package/dist/score.js +148 -0
- package/dist/score.js.map +1 -0
- package/package.json +5 -5
- package/sbom.json +66 -6
- package/src/index.ts +4 -0
- package/src/score.ts +220 -0
package/.dz-manifest.json
CHANGED
|
@@ -421,19 +421,19 @@
|
|
|
421
421
|
},
|
|
422
422
|
{
|
|
423
423
|
"path": "dist/index.d.ts",
|
|
424
|
-
"sha256": "
|
|
424
|
+
"sha256": "d6a34c903e1dc447559d1cd3188e04fd6da273ce77bd71a916950b3c6cb54bc2"
|
|
425
425
|
},
|
|
426
426
|
{
|
|
427
427
|
"path": "dist/index.d.ts.map",
|
|
428
|
-
"sha256": "
|
|
428
|
+
"sha256": "cbc342e0e3297d90ed033226292aa2bb738cff1b0734b25be0498e4f03c12811"
|
|
429
429
|
},
|
|
430
430
|
{
|
|
431
431
|
"path": "dist/index.js",
|
|
432
|
-
"sha256": "
|
|
432
|
+
"sha256": "c72a77f95e4b1cb5f72ea50164c4cccad72b8144cce4083acadb7fcdb144032c"
|
|
433
433
|
},
|
|
434
434
|
{
|
|
435
435
|
"path": "dist/index.js.map",
|
|
436
|
-
"sha256": "
|
|
436
|
+
"sha256": "214013193317769bf5934a811ab300d444cd672f247f3b796d9162a286043a3f"
|
|
437
437
|
},
|
|
438
438
|
{
|
|
439
439
|
"path": "dist/learning-backend.d.ts",
|
|
@@ -771,6 +771,22 @@
|
|
|
771
771
|
"path": "dist/sbom.js.map",
|
|
772
772
|
"sha256": "98ec864a25bd3f1c951b0a9c49bf887eedc4a126a5d74d9f60447c743e077ba2"
|
|
773
773
|
},
|
|
774
|
+
{
|
|
775
|
+
"path": "dist/score.d.ts",
|
|
776
|
+
"sha256": "235e8b11d72281e15c40d10cf1aa66733903cf92d32631f815ec25b92fe40f03"
|
|
777
|
+
},
|
|
778
|
+
{
|
|
779
|
+
"path": "dist/score.d.ts.map",
|
|
780
|
+
"sha256": "e18658756ba4ce4774ecf6892344a75311a551e1ee2c731a1020a04004e14c72"
|
|
781
|
+
},
|
|
782
|
+
{
|
|
783
|
+
"path": "dist/score.js",
|
|
784
|
+
"sha256": "75115888ac28a1c612084a09edc53483c389efe5a89da4dc4e645df80e13f476"
|
|
785
|
+
},
|
|
786
|
+
{
|
|
787
|
+
"path": "dist/score.js.map",
|
|
788
|
+
"sha256": "59e5ff95f4db2dbd1bd80b0887901acf6f2582379bbf0ca51bdcca40d831e2ce"
|
|
789
|
+
},
|
|
774
790
|
{
|
|
775
791
|
"path": "dist/session-retro.d.ts",
|
|
776
792
|
"sha256": "b7a90478cc9d377004e61bcf234e31356e982b5c87637ec96cdee1f16a7baec7"
|
|
@@ -997,7 +1013,7 @@
|
|
|
997
1013
|
},
|
|
998
1014
|
{
|
|
999
1015
|
"path": "package.json",
|
|
1000
|
-
"sha256": "
|
|
1016
|
+
"sha256": "50f62b541c15bbb35dd1e3f795fd35a0724ef7906b6eff1d0954468437296acd"
|
|
1001
1017
|
},
|
|
1002
1018
|
{
|
|
1003
1019
|
"path": "src/__tests__/golden-baseline.test.ts",
|
|
@@ -1101,7 +1117,7 @@
|
|
|
1101
1117
|
},
|
|
1102
1118
|
{
|
|
1103
1119
|
"path": "src/index.ts",
|
|
1104
|
-
"sha256": "
|
|
1120
|
+
"sha256": "ed6a797940b4e795eab59ec4cc485a976a8cfd3b0ea2d4cfa0f1d75f485c4b84"
|
|
1105
1121
|
},
|
|
1106
1122
|
{
|
|
1107
1123
|
"path": "src/learning-backend.ts",
|
|
@@ -1179,6 +1195,10 @@
|
|
|
1179
1195
|
"path": "src/safla-delta.ts",
|
|
1180
1196
|
"sha256": "55d46a4d2068fc99c4606d744e861c19a1004148d2c7679537ff4862fc38db84"
|
|
1181
1197
|
},
|
|
1198
|
+
{
|
|
1199
|
+
"path": "src/score.ts",
|
|
1200
|
+
"sha256": "db381274ce3acfce4a5205bbe60a3086ff303ee2d18354c2d981d99a51f76880"
|
|
1201
|
+
},
|
|
1182
1202
|
{
|
|
1183
1203
|
"path": "src/security/boundaries.json",
|
|
1184
1204
|
"sha256": "839dbce8fa70f1ac34675f63228279a2f5392f6e1b1b9a3e8522e0e553f8ff7c"
|
|
@@ -1483,6 +1503,10 @@
|
|
|
1483
1503
|
"path": "test/safla-delta.test.ts",
|
|
1484
1504
|
"sha256": "1669198eab1fdda44e137b19454a01954dc42ab7b059725dd056c836b06a5e3e"
|
|
1485
1505
|
},
|
|
1506
|
+
{
|
|
1507
|
+
"path": "test/score.test.ts",
|
|
1508
|
+
"sha256": "d1928d920156af8851349761791a3779ade1ff0e1f05b829c88d6baad9481d80"
|
|
1509
|
+
},
|
|
1486
1510
|
{
|
|
1487
1511
|
"path": "test/session-06-features.test.ts",
|
|
1488
1512
|
"sha256": "8fd6dd3999d8c02e1bd6d7c0f8702420025a5be69aeaa35b1eeb44cd6d405f77"
|
|
@@ -1557,5 +1581,5 @@
|
|
|
1557
1581
|
}
|
|
1558
1582
|
]
|
|
1559
1583
|
},
|
|
1560
|
-
"signature": "
|
|
1584
|
+
"signature": "d0LkCC5DZB3qm76DXoQbhEW7T3QZ1KJb2TF+GW6M9bDgU4bka053kfLPv8PWnojKVsEqqL0nzX/RLdJc9HsNDg=="
|
|
1561
1585
|
}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,mFAAmF;AACnF,eAAO,MAAM,oBAAoB,EAAE,MACiD,CAAC;AAErF,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7E,cAAc,cAAc,CAAC;AAE7B,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9G,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAClH,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACvE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC1H,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,SAAS,EAAE,aAAa,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,aAAa,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,cAAc,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,aAAa,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,eAAe,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxoB,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,oBAAoB,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC7Z,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACtK,YAAY,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC9K,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAC3H,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACjH,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAClG,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACxP,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvN,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAChF,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EACL,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,SAAS,EACT,qBAAqB,EACrB,iBAAiB,EACjB,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC/E,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClE,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACxG,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAClG,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAClG,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,yBAAyB,EACzB,gCAAgC,EAChC,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACrG,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,iCAAiC,EACjC,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,+BAA+B,EAC/B,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,qBAAqB,EACrB,0BAA0B,EAC1B,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACxN,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChF,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAIrG,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,WAAW,EACX,UAAU,EACV,cAAc,EACd,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EACL,YAAY,EACZ,UAAU,EACV,cAAc,EACd,SAAS,EACT,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,UAAU,EACV,cAAc,EACd,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACnB,cAAc,EACd,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACzH,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACzE,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,UAAU,EACV,aAAa,EACb,UAAU,EACV,WAAW,EACX,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrG,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,WAAW,EACX,YAAY,EACZ,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,UAAU,EACV,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC1B,kCAAkC,GACnC,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,EACzB,4BAA4B,EAC5B,sBAAsB,EACtB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AAIpC,cAAc,oBAAoB,CAAC;AAKnC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -73,4 +73,7 @@ export * from './skills-verify.js';
|
|
|
73
73
|
// from darwin-mode; measurements are dz-native and NEVER fake a verdict (INSUFFICIENT_DATA is a
|
|
74
74
|
// finding, not a pass).
|
|
75
75
|
export * from './compounding.js';
|
|
76
|
+
// Run-process scorecard (feature dz-score, Reading C) — scores the DISCIPLINE of a feature-adr run
|
|
77
|
+
// from its artifacts. Descriptive-only, permanently: it never gates.
|
|
78
|
+
export * from './score.js';
|
|
76
79
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,mFAAmF;AACnF,MAAM,CAAC,MAAM,oBAAoB,GAC9B,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAyB,CAAC,OAAO,CAAC;AAErF,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,cAAc,cAAc,CAAC;AAC7B,iGAAiG;AACjG,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAElH,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEvE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC1H,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,SAAS,EAAE,aAAa,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,aAAa,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,cAAc,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,aAAa,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,eAAe,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExoB,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEtK,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAyB1B,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAC3H,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEjH,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAExP,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEvN,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEhF,OAAO,EACL,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,SAAS,EACT,qBAAqB,EACrB,iBAAiB,EACjB,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAK7C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAExG,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAElG,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,yBAAyB,EACzB,gCAAgC,EAChC,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,iCAAiC,EACjC,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,+BAA+B,EAC/B,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAW3B,OAAO,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACxN,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGhE,4FAA4F;AAC5F,+FAA+F;AAC/F,6CAA6C;AAC7C,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAiBtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EACL,YAAY,EACZ,UAAU,EACV,cAAc,EACd,SAAS,EACT,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAS3B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACnB,cAAc,EACd,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAkBzE,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,WAAW,EACX,YAAY,EACZ,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,UAAU,EACV,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC1B,kCAAkC,GACnC,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,EACzB,4BAA4B,EAC5B,sBAAsB,EACtB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AAYpB,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AAEpC,oGAAoG;AACpG,oGAAoG;AACpG,cAAc,oBAAoB,CAAC;AAEnC,kGAAkG;AAClG,gGAAgG;AAChG,wBAAwB;AACxB,cAAc,kBAAkB,CAAC;AAEjC,mGAAmG;AACnG,qEAAqE;AACrE,cAAc,YAAY,CAAC"}
|
package/dist/score.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `dz score --slug <feature>` — score a feature-adr RUN's process discipline (feature dz-score,
|
|
3
|
+
* Reading C of `features/dz-score/PROPOSAL.md`, chosen by the user 2026-07-28).
|
|
4
|
+
*
|
|
5
|
+
* It scores the PROCESS, not the code: were the ADR's safety properties given a named test? was
|
|
6
|
+
* discrimination proven? did cross-model QE happen and what did it say? was the work verified live?
|
|
7
|
+
* did the READMEs travel in the same change? did the learning loop run?
|
|
8
|
+
*
|
|
9
|
+
* Readings A (repo dashboard) and B (skill scoring) were rejected in the proposal: A invites
|
|
10
|
+
* Goodharting the gates, B would be a fourth scoring surface. C is hard to game — the only way to
|
|
11
|
+
* score well is to actually run the discipline.
|
|
12
|
+
*
|
|
13
|
+
* DESCRIPTIVE-ONLY, permanently: the command never gates, never exits non-zero on a low score.
|
|
14
|
+
* The health-advisor 1.2.0 run is the reference case: its QE report marked the registration
|
|
15
|
+
* criterion "✅ (mechanism)" with no live evidence — this scorecard exists to make that visible.
|
|
16
|
+
*
|
|
17
|
+
* Discriminators were chosen from a SURVEY of the 132 real runs on disk (34/77 ADRs carry a
|
|
18
|
+
* Confirmation section; 31/75 QE reports carry MEASURED markers) — not guessed.
|
|
19
|
+
*
|
|
20
|
+
* PURE: the CLI reads the artifact files; this module only classifies.
|
|
21
|
+
*/
|
|
22
|
+
export type DisciplineVerdict = 'pass' | 'partial' | 'absent';
|
|
23
|
+
export interface DisciplineScore {
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly title: string;
|
|
26
|
+
readonly verdict: DisciplineVerdict;
|
|
27
|
+
/** The line of evidence the verdict rests on — a scorecard must show its work. */
|
|
28
|
+
readonly evidence: string;
|
|
29
|
+
}
|
|
30
|
+
export interface RunScorecard {
|
|
31
|
+
readonly slug: string;
|
|
32
|
+
readonly disciplines: readonly DisciplineScore[];
|
|
33
|
+
/** Extracted cross-model grade, when one exists (e.g. "A−", "C"). */
|
|
34
|
+
readonly qeGrade: string | null;
|
|
35
|
+
readonly passed: number;
|
|
36
|
+
readonly total: number;
|
|
37
|
+
readonly summary: string;
|
|
38
|
+
}
|
|
39
|
+
/** The artifact texts of one run, keyed by RELATIVE path under `features/<slug>/`. */
|
|
40
|
+
export type RunArtifacts = Readonly<Record<string, string>>;
|
|
41
|
+
export declare function extractQeGrade(qeText: string): string | null;
|
|
42
|
+
export declare function scoreRun(slug: string, artifacts: RunArtifacts): RunScorecard;
|
|
43
|
+
export declare function renderScorecard(card: RunScorecard): string;
|
|
44
|
+
//# sourceMappingURL=score.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"score.d.ts","sourceRoot":"","sources":["../src/score.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,SAAS,eAAe,EAAE,CAAC;IACjD,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,sFAAsF;AACtF,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAyC5D,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG5D;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,YAAY,CAmH5E;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAW1D"}
|
package/dist/score.js
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `dz score --slug <feature>` — score a feature-adr RUN's process discipline (feature dz-score,
|
|
3
|
+
* Reading C of `features/dz-score/PROPOSAL.md`, chosen by the user 2026-07-28).
|
|
4
|
+
*
|
|
5
|
+
* It scores the PROCESS, not the code: were the ADR's safety properties given a named test? was
|
|
6
|
+
* discrimination proven? did cross-model QE happen and what did it say? was the work verified live?
|
|
7
|
+
* did the READMEs travel in the same change? did the learning loop run?
|
|
8
|
+
*
|
|
9
|
+
* Readings A (repo dashboard) and B (skill scoring) were rejected in the proposal: A invites
|
|
10
|
+
* Goodharting the gates, B would be a fourth scoring surface. C is hard to game — the only way to
|
|
11
|
+
* score well is to actually run the discipline.
|
|
12
|
+
*
|
|
13
|
+
* DESCRIPTIVE-ONLY, permanently: the command never gates, never exits non-zero on a low score.
|
|
14
|
+
* The health-advisor 1.2.0 run is the reference case: its QE report marked the registration
|
|
15
|
+
* criterion "✅ (mechanism)" with no live evidence — this scorecard exists to make that visible.
|
|
16
|
+
*
|
|
17
|
+
* Discriminators were chosen from a SURVEY of the 132 real runs on disk (34/77 ADRs carry a
|
|
18
|
+
* Confirmation section; 31/75 QE reports carry MEASURED markers) — not guessed.
|
|
19
|
+
*
|
|
20
|
+
* PURE: the CLI reads the artifact files; this module only classifies.
|
|
21
|
+
*/
|
|
22
|
+
function collect(artifacts, predicate) {
|
|
23
|
+
return Object.entries(artifacts)
|
|
24
|
+
.filter(([p]) => predicate(p))
|
|
25
|
+
.map(([, text]) => text)
|
|
26
|
+
.join('\n');
|
|
27
|
+
}
|
|
28
|
+
/** First matching line (trimmed, capped) — the evidence a verdict shows. */
|
|
29
|
+
function evidenceLine(text, re) {
|
|
30
|
+
for (const line of text.split('\n')) {
|
|
31
|
+
if (re.test(line))
|
|
32
|
+
return line.trim().slice(0, 140);
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Like {@link evidenceLine}, but a NEGATED mention is not evidence: "Codex was not used" and
|
|
38
|
+
* "no discrimination proof was performed" both satisfied the plain regexes (Codex QE #1, and its
|
|
39
|
+
* heuristic table). A line whose match is preceded by a negation word is skipped. Heuristic — but
|
|
40
|
+
* the failure mode flips from a silent false pass to a visible miss the shown evidence exposes.
|
|
41
|
+
*/
|
|
42
|
+
const NEGATION_RE = /\b(no|not|never|without|wasn'?t|isn'?t)\b/i;
|
|
43
|
+
function evidenceLinePositive(text, re) {
|
|
44
|
+
for (const line of text.split('\n')) {
|
|
45
|
+
if (!re.test(line))
|
|
46
|
+
continue;
|
|
47
|
+
// Whole-line negation: "Codex was NOT used" carries its negation AFTER the match, so a
|
|
48
|
+
// before-the-match check missed it. The trade is deliberate: a genuine line that happens to
|
|
49
|
+
// contain a negation is SKIPPED (a visible miss the evidence exposes) rather than a negated
|
|
50
|
+
// line being ACCEPTED (a silent false pass).
|
|
51
|
+
if (NEGATION_RE.test(line))
|
|
52
|
+
continue;
|
|
53
|
+
return line.trim().slice(0, 140);
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
// Word-bounded on BOTH sides: "upgrade B-tree" fabricated a B- (Codex QE #1). The lookahead also
|
|
58
|
+
// rejects "Grade B-tree" (letter after the dash) while keeping the real "Grade: A−" formats.
|
|
59
|
+
const GRADE_RE = /(?<![A-Za-z])[Gg]rade[d]?:?\s*\*{0,2}\s*([A-F][+−-]?)(?![A-Za-z-])/;
|
|
60
|
+
export function extractQeGrade(qeText) {
|
|
61
|
+
const m = GRADE_RE.exec(qeText);
|
|
62
|
+
return m?.[1] ?? null;
|
|
63
|
+
}
|
|
64
|
+
export function scoreRun(slug, artifacts) {
|
|
65
|
+
const adrText = collect(artifacts, (p) => p.startsWith('03_adr/'));
|
|
66
|
+
const qeText = collect(artifacts, (p) => p === '08_qe_report.md' || p === '09_fleet_qe_assessment.md');
|
|
67
|
+
const planText = collect(artifacts, (p) => p === '06_implementation_plan.md' || p === '03.5_ideation_report.md');
|
|
68
|
+
const complexityText = collect(artifacts, (p) => p === '00_complexity_assessment.md');
|
|
69
|
+
const manifestText = collect(artifacts, (p) => p.startsWith('07_code_changes/'));
|
|
70
|
+
const allText = collect(artifacts, () => true);
|
|
71
|
+
const disciplines = [];
|
|
72
|
+
const add = (id, title, verdict, evidence) => {
|
|
73
|
+
disciplines.push({ id, title, verdict, evidence });
|
|
74
|
+
};
|
|
75
|
+
// 1. ADR with a Confirmation — a named decision whose load-bearing property names its test.
|
|
76
|
+
if (adrText === '') {
|
|
77
|
+
add('adr-confirmation', 'ADR present, property → named test', 'absent', 'no 03_adr/*.md artifact');
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
const conf = evidenceLine(adrText, /^##+\s*Confirmation/i);
|
|
81
|
+
add('adr-confirmation', 'ADR present, property → named test', conf !== null ? 'pass' : 'partial', conf ?? 'ADR exists but has no Confirmation section — the load-bearing property names no test');
|
|
82
|
+
}
|
|
83
|
+
// 2. Discrimination — proof the test can FAIL (the §42 gate, or an explicit mutation proof).
|
|
84
|
+
const discr = evidenceLinePositive(allText, /discrimination|§42/i) ??
|
|
85
|
+
evidenceLinePositive(allText, /mutation[s]?\s.*(prov|kill)|mutant[s]?\s.*(kill|red)|RED on the old|goes? RED|failed as expected/i);
|
|
86
|
+
add('discrimination', 'the property test is proven able to fail', discr !== null ? 'pass' : 'absent', discr ?? 'no discrimination/§42/mutation-proof evidence in any artifact');
|
|
87
|
+
// 3. Cross-model QE — an independent family reviewed it, and a grade exists.
|
|
88
|
+
const grade = extractQeGrade(qeText);
|
|
89
|
+
if (qeText === '') {
|
|
90
|
+
add('cross-model-qe', 'independent cross-model review with a grade', 'absent', 'no 08_qe_report.md artifact');
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
const crossLine = evidenceLinePositive(qeText, /codex|gpt-|cross-model/i);
|
|
94
|
+
const gradeLine = grade !== null ? evidenceLine(qeText, GRADE_RE) : null;
|
|
95
|
+
add('cross-model-qe', 'independent cross-model review with a grade', crossLine !== null && grade !== null ? 'pass' : 'partial', crossLine !== null
|
|
96
|
+
? grade !== null
|
|
97
|
+
? `${crossLine}${gradeLine !== null && gradeLine !== crossLine ? ` | ${gradeLine}` : ''}`.slice(0, 140)
|
|
98
|
+
: `${crossLine} — but NO parseable grade`.slice(0, 140)
|
|
99
|
+
: 'QE report exists but no (non-negated) cross-model reviewer is named (self-review only)');
|
|
100
|
+
}
|
|
101
|
+
// 4. Live verification — the property was observed, not inferred. The health-advisor 1.2.0 QE
|
|
102
|
+
// report is the cautionary case: "✅ (mechanism)" with no live evidence shipped a dead feature.
|
|
103
|
+
const live = evidenceLine(qeText, /MEASURED|verified live|VERIFIED LIVE|reproducer/i);
|
|
104
|
+
const liveAnywhere = live ?? evidenceLine(allText, /MEASURED|verified live|VERIFIED LIVE|reproducer/i);
|
|
105
|
+
add('live-verification', 'claims verified by running, not by reasoning', live !== null ? 'pass' : liveAnywhere !== null ? 'partial' : 'absent', live ?? liveAnywhere ?? 'no MEASURED / verified-live / reproducer marker anywhere — every claim is inferred');
|
|
106
|
+
// 5. README-first — the docs travelled in the same change.
|
|
107
|
+
const readme = evidenceLine(qeText + '\n' + manifestText, /README/);
|
|
108
|
+
add('readme-first', 'READMEs updated in the same change', readme !== null ? 'pass' : 'absent', readme ?? 'no README mention in the QE report or the change manifest');
|
|
109
|
+
// 6. The learning loop — Step-0 recall folded in, Step-8 lessons taught.
|
|
110
|
+
const recalled = evidenceLine(complexityText + '\n' + allText, /LEARNED_PATTERNS|dz recall|recalled/i);
|
|
111
|
+
const taught = evidenceLine(allText, /lesson[s]? taught|dz teach|taught \(/i);
|
|
112
|
+
add('learning-loop', 'Step-0 recall used; Step-8 lessons taught', recalled !== null && taught !== null ? 'pass' : recalled !== null || taught !== null ? 'partial' : 'absent', recalled !== null && taught !== null
|
|
113
|
+
? `${recalled.slice(0, 68)} | ${taught.slice(0, 68)}`
|
|
114
|
+
: recalled ?? taught ?? 'no recall/teach evidence — the run neither drew on nor fed the learned store');
|
|
115
|
+
// 7. Amendment confirmation — only when amendments EXIST; their absence is not a failure.
|
|
116
|
+
// Born in the PLAN/ideation: a stray "AM-7" in QE prose (e.g. another feature's test name)
|
|
117
|
+
// must not conjure the discipline (caught by the very first dogfood run).
|
|
118
|
+
const plannedAm = [...new Set(planText.match(/AM-\d+/g) ?? [])].sort();
|
|
119
|
+
if (plannedAm.length > 0) {
|
|
120
|
+
// One stray AM-9 in QE must not satisfy AM-1..AM-2 (Codex QE #3): coverage is id-by-id.
|
|
121
|
+
const covered = plannedAm.filter((id) => qeText.includes(id));
|
|
122
|
+
const missing = plannedAm.filter((id) => !qeText.includes(id));
|
|
123
|
+
add('amendment-confirmation', 'amendments carried into QE with confirmation', missing.length === 0 ? 'pass' : covered.length > 0 ? 'partial' : 'partial', missing.length === 0
|
|
124
|
+
? `all planned amendments reach QE: ${plannedAm.join(', ')}`
|
|
125
|
+
: `planned ${plannedAm.join(', ')} — QE never mentions ${missing.join(', ')}`);
|
|
126
|
+
}
|
|
127
|
+
const passed = disciplines.filter((d) => d.verdict === 'pass').length;
|
|
128
|
+
const total = disciplines.length;
|
|
129
|
+
const worst = disciplines.filter((d) => d.verdict === 'absent').map((d) => d.id);
|
|
130
|
+
const summary = `${passed}/${total} disciplines fully evidenced` +
|
|
131
|
+
(grade !== null ? ` · QE grade ${grade}` : ' · no QE grade') +
|
|
132
|
+
(worst.length > 0 ? ` · absent: ${worst.join(', ')}` : '');
|
|
133
|
+
return { slug, disciplines, qeGrade: grade, passed, total, summary };
|
|
134
|
+
}
|
|
135
|
+
const MARK = { pass: '✓', partial: '◐', absent: '✗' };
|
|
136
|
+
export function renderScorecard(card) {
|
|
137
|
+
const out = [];
|
|
138
|
+
out.push(`dz score — ${card.slug} (process scorecard; descriptive-only, never a gate)`);
|
|
139
|
+
out.push('');
|
|
140
|
+
for (const d of card.disciplines) {
|
|
141
|
+
out.push(` ${MARK[d.verdict]} ${d.title}`);
|
|
142
|
+
out.push(` ${d.evidence}`);
|
|
143
|
+
}
|
|
144
|
+
out.push('');
|
|
145
|
+
out.push(` ${card.summary}`);
|
|
146
|
+
return out.join('\n');
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=score.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"score.js","sourceRoot":"","sources":["../src/score.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dzhechkov/harness-core",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.140",
|
|
4
4
|
"description": "Shared harness logic - skill loading, additive apply, and the init/sync/verify/doctor operations.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -32,13 +32,13 @@
|
|
|
32
32
|
"@dzhechkov/adapter-openclaude": "^0.1.0",
|
|
33
33
|
"@dzhechkov/adapter-opencode": "^0.2.0",
|
|
34
34
|
"yaml": "^2.0.0",
|
|
35
|
+
"@dzhechkov/adapter-agents-md": "0.1.1",
|
|
35
36
|
"@dzhechkov/adapter-copilot": "0.1.1",
|
|
36
37
|
"@dzhechkov/adapter-windsurf": "0.1.1",
|
|
37
|
-
"@dzhechkov/
|
|
38
|
-
"@dzhechkov/adapter-agents-md": "0.1.1",
|
|
39
|
-
"@dzhechkov/core": "0.2.14",
|
|
38
|
+
"@dzhechkov/adapter-cursor": "0.1.1",
|
|
40
39
|
"@dzhechkov/adapter-gemini": "0.1.1",
|
|
41
|
-
"@dzhechkov/
|
|
40
|
+
"@dzhechkov/memory": "0.2.9",
|
|
41
|
+
"@dzhechkov/core": "0.2.14"
|
|
42
42
|
},
|
|
43
43
|
"peerDependenciesMeta": {
|
|
44
44
|
"@ruvector/rvf": {
|
package/sbom.json
CHANGED
|
@@ -1055,7 +1055,7 @@
|
|
|
1055
1055
|
"hashes": [
|
|
1056
1056
|
{
|
|
1057
1057
|
"alg": "SHA-256",
|
|
1058
|
-
"content": "
|
|
1058
|
+
"content": "d6a34c903e1dc447559d1cd3188e04fd6da273ce77bd71a916950b3c6cb54bc2"
|
|
1059
1059
|
}
|
|
1060
1060
|
]
|
|
1061
1061
|
},
|
|
@@ -1065,7 +1065,7 @@
|
|
|
1065
1065
|
"hashes": [
|
|
1066
1066
|
{
|
|
1067
1067
|
"alg": "SHA-256",
|
|
1068
|
-
"content": "
|
|
1068
|
+
"content": "cbc342e0e3297d90ed033226292aa2bb738cff1b0734b25be0498e4f03c12811"
|
|
1069
1069
|
}
|
|
1070
1070
|
]
|
|
1071
1071
|
},
|
|
@@ -1075,7 +1075,7 @@
|
|
|
1075
1075
|
"hashes": [
|
|
1076
1076
|
{
|
|
1077
1077
|
"alg": "SHA-256",
|
|
1078
|
-
"content": "
|
|
1078
|
+
"content": "c72a77f95e4b1cb5f72ea50164c4cccad72b8144cce4083acadb7fcdb144032c"
|
|
1079
1079
|
}
|
|
1080
1080
|
]
|
|
1081
1081
|
},
|
|
@@ -1085,7 +1085,7 @@
|
|
|
1085
1085
|
"hashes": [
|
|
1086
1086
|
{
|
|
1087
1087
|
"alg": "SHA-256",
|
|
1088
|
-
"content": "
|
|
1088
|
+
"content": "214013193317769bf5934a811ab300d444cd672f247f3b796d9162a286043a3f"
|
|
1089
1089
|
}
|
|
1090
1090
|
]
|
|
1091
1091
|
},
|
|
@@ -1929,6 +1929,46 @@
|
|
|
1929
1929
|
}
|
|
1930
1930
|
]
|
|
1931
1931
|
},
|
|
1932
|
+
{
|
|
1933
|
+
"type": "file",
|
|
1934
|
+
"name": "dist/score.d.ts",
|
|
1935
|
+
"hashes": [
|
|
1936
|
+
{
|
|
1937
|
+
"alg": "SHA-256",
|
|
1938
|
+
"content": "235e8b11d72281e15c40d10cf1aa66733903cf92d32631f815ec25b92fe40f03"
|
|
1939
|
+
}
|
|
1940
|
+
]
|
|
1941
|
+
},
|
|
1942
|
+
{
|
|
1943
|
+
"type": "file",
|
|
1944
|
+
"name": "dist/score.d.ts.map",
|
|
1945
|
+
"hashes": [
|
|
1946
|
+
{
|
|
1947
|
+
"alg": "SHA-256",
|
|
1948
|
+
"content": "e18658756ba4ce4774ecf6892344a75311a551e1ee2c731a1020a04004e14c72"
|
|
1949
|
+
}
|
|
1950
|
+
]
|
|
1951
|
+
},
|
|
1952
|
+
{
|
|
1953
|
+
"type": "file",
|
|
1954
|
+
"name": "dist/score.js",
|
|
1955
|
+
"hashes": [
|
|
1956
|
+
{
|
|
1957
|
+
"alg": "SHA-256",
|
|
1958
|
+
"content": "75115888ac28a1c612084a09edc53483c389efe5a89da4dc4e645df80e13f476"
|
|
1959
|
+
}
|
|
1960
|
+
]
|
|
1961
|
+
},
|
|
1962
|
+
{
|
|
1963
|
+
"type": "file",
|
|
1964
|
+
"name": "dist/score.js.map",
|
|
1965
|
+
"hashes": [
|
|
1966
|
+
{
|
|
1967
|
+
"alg": "SHA-256",
|
|
1968
|
+
"content": "59e5ff95f4db2dbd1bd80b0887901acf6f2582379bbf0ca51bdcca40d831e2ce"
|
|
1969
|
+
}
|
|
1970
|
+
]
|
|
1971
|
+
},
|
|
1932
1972
|
{
|
|
1933
1973
|
"type": "file",
|
|
1934
1974
|
"name": "dist/session-retro.d.ts",
|
|
@@ -2495,7 +2535,7 @@
|
|
|
2495
2535
|
"hashes": [
|
|
2496
2536
|
{
|
|
2497
2537
|
"alg": "SHA-256",
|
|
2498
|
-
"content": "
|
|
2538
|
+
"content": "50f62b541c15bbb35dd1e3f795fd35a0724ef7906b6eff1d0954468437296acd"
|
|
2499
2539
|
}
|
|
2500
2540
|
]
|
|
2501
2541
|
},
|
|
@@ -2755,7 +2795,7 @@
|
|
|
2755
2795
|
"hashes": [
|
|
2756
2796
|
{
|
|
2757
2797
|
"alg": "SHA-256",
|
|
2758
|
-
"content": "
|
|
2798
|
+
"content": "ed6a797940b4e795eab59ec4cc485a976a8cfd3b0ea2d4cfa0f1d75f485c4b84"
|
|
2759
2799
|
}
|
|
2760
2800
|
]
|
|
2761
2801
|
},
|
|
@@ -2949,6 +2989,16 @@
|
|
|
2949
2989
|
}
|
|
2950
2990
|
]
|
|
2951
2991
|
},
|
|
2992
|
+
{
|
|
2993
|
+
"type": "file",
|
|
2994
|
+
"name": "src/score.ts",
|
|
2995
|
+
"hashes": [
|
|
2996
|
+
{
|
|
2997
|
+
"alg": "SHA-256",
|
|
2998
|
+
"content": "db381274ce3acfce4a5205bbe60a3086ff303ee2d18354c2d981d99a51f76880"
|
|
2999
|
+
}
|
|
3000
|
+
]
|
|
3001
|
+
},
|
|
2952
3002
|
{
|
|
2953
3003
|
"type": "file",
|
|
2954
3004
|
"name": "src/security/boundaries.json",
|
|
@@ -3709,6 +3759,16 @@
|
|
|
3709
3759
|
}
|
|
3710
3760
|
]
|
|
3711
3761
|
},
|
|
3762
|
+
{
|
|
3763
|
+
"type": "file",
|
|
3764
|
+
"name": "test/score.test.ts",
|
|
3765
|
+
"hashes": [
|
|
3766
|
+
{
|
|
3767
|
+
"alg": "SHA-256",
|
|
3768
|
+
"content": "d1928d920156af8851349761791a3779ade1ff0e1f05b829c88d6baad9481d80"
|
|
3769
|
+
}
|
|
3770
|
+
]
|
|
3771
|
+
},
|
|
3712
3772
|
{
|
|
3713
3773
|
"type": "file",
|
|
3714
3774
|
"name": "test/session-06-features.test.ts",
|
package/src/index.ts
CHANGED
|
@@ -326,3 +326,7 @@ export * from './skills-verify.js';
|
|
|
326
326
|
// from darwin-mode; measurements are dz-native and NEVER fake a verdict (INSUFFICIENT_DATA is a
|
|
327
327
|
// finding, not a pass).
|
|
328
328
|
export * from './compounding.js';
|
|
329
|
+
|
|
330
|
+
// Run-process scorecard (feature dz-score, Reading C) — scores the DISCIPLINE of a feature-adr run
|
|
331
|
+
// from its artifacts. Descriptive-only, permanently: it never gates.
|
|
332
|
+
export * from './score.js';
|
package/src/score.ts
ADDED
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `dz score --slug <feature>` — score a feature-adr RUN's process discipline (feature dz-score,
|
|
3
|
+
* Reading C of `features/dz-score/PROPOSAL.md`, chosen by the user 2026-07-28).
|
|
4
|
+
*
|
|
5
|
+
* It scores the PROCESS, not the code: were the ADR's safety properties given a named test? was
|
|
6
|
+
* discrimination proven? did cross-model QE happen and what did it say? was the work verified live?
|
|
7
|
+
* did the READMEs travel in the same change? did the learning loop run?
|
|
8
|
+
*
|
|
9
|
+
* Readings A (repo dashboard) and B (skill scoring) were rejected in the proposal: A invites
|
|
10
|
+
* Goodharting the gates, B would be a fourth scoring surface. C is hard to game — the only way to
|
|
11
|
+
* score well is to actually run the discipline.
|
|
12
|
+
*
|
|
13
|
+
* DESCRIPTIVE-ONLY, permanently: the command never gates, never exits non-zero on a low score.
|
|
14
|
+
* The health-advisor 1.2.0 run is the reference case: its QE report marked the registration
|
|
15
|
+
* criterion "✅ (mechanism)" with no live evidence — this scorecard exists to make that visible.
|
|
16
|
+
*
|
|
17
|
+
* Discriminators were chosen from a SURVEY of the 132 real runs on disk (34/77 ADRs carry a
|
|
18
|
+
* Confirmation section; 31/75 QE reports carry MEASURED markers) — not guessed.
|
|
19
|
+
*
|
|
20
|
+
* PURE: the CLI reads the artifact files; this module only classifies.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
export type DisciplineVerdict = 'pass' | 'partial' | 'absent';
|
|
24
|
+
|
|
25
|
+
export interface DisciplineScore {
|
|
26
|
+
readonly id: string;
|
|
27
|
+
readonly title: string;
|
|
28
|
+
readonly verdict: DisciplineVerdict;
|
|
29
|
+
/** The line of evidence the verdict rests on — a scorecard must show its work. */
|
|
30
|
+
readonly evidence: string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface RunScorecard {
|
|
34
|
+
readonly slug: string;
|
|
35
|
+
readonly disciplines: readonly DisciplineScore[];
|
|
36
|
+
/** Extracted cross-model grade, when one exists (e.g. "A−", "C"). */
|
|
37
|
+
readonly qeGrade: string | null;
|
|
38
|
+
readonly passed: number;
|
|
39
|
+
readonly total: number;
|
|
40
|
+
readonly summary: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** The artifact texts of one run, keyed by RELATIVE path under `features/<slug>/`. */
|
|
44
|
+
export type RunArtifacts = Readonly<Record<string, string>>;
|
|
45
|
+
|
|
46
|
+
function collect(artifacts: RunArtifacts, predicate: (path: string) => boolean): string {
|
|
47
|
+
return Object.entries(artifacts)
|
|
48
|
+
.filter(([p]) => predicate(p))
|
|
49
|
+
.map(([, text]) => text)
|
|
50
|
+
.join('\n');
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** First matching line (trimmed, capped) — the evidence a verdict shows. */
|
|
54
|
+
function evidenceLine(text: string, re: RegExp): string | null {
|
|
55
|
+
for (const line of text.split('\n')) {
|
|
56
|
+
if (re.test(line)) return line.trim().slice(0, 140);
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Like {@link evidenceLine}, but a NEGATED mention is not evidence: "Codex was not used" and
|
|
63
|
+
* "no discrimination proof was performed" both satisfied the plain regexes (Codex QE #1, and its
|
|
64
|
+
* heuristic table). A line whose match is preceded by a negation word is skipped. Heuristic — but
|
|
65
|
+
* the failure mode flips from a silent false pass to a visible miss the shown evidence exposes.
|
|
66
|
+
*/
|
|
67
|
+
const NEGATION_RE = /\b(no|not|never|without|wasn'?t|isn'?t)\b/i;
|
|
68
|
+
function evidenceLinePositive(text: string, re: RegExp): string | null {
|
|
69
|
+
for (const line of text.split('\n')) {
|
|
70
|
+
if (!re.test(line)) continue;
|
|
71
|
+
// Whole-line negation: "Codex was NOT used" carries its negation AFTER the match, so a
|
|
72
|
+
// before-the-match check missed it. The trade is deliberate: a genuine line that happens to
|
|
73
|
+
// contain a negation is SKIPPED (a visible miss the evidence exposes) rather than a negated
|
|
74
|
+
// line being ACCEPTED (a silent false pass).
|
|
75
|
+
if (NEGATION_RE.test(line)) continue;
|
|
76
|
+
return line.trim().slice(0, 140);
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Word-bounded on BOTH sides: "upgrade B-tree" fabricated a B- (Codex QE #1). The lookahead also
|
|
82
|
+
// rejects "Grade B-tree" (letter after the dash) while keeping the real "Grade: A−" formats.
|
|
83
|
+
const GRADE_RE = /(?<![A-Za-z])[Gg]rade[d]?:?\s*\*{0,2}\s*([A-F][+−-]?)(?![A-Za-z-])/;
|
|
84
|
+
|
|
85
|
+
export function extractQeGrade(qeText: string): string | null {
|
|
86
|
+
const m = GRADE_RE.exec(qeText);
|
|
87
|
+
return m?.[1] ?? null;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function scoreRun(slug: string, artifacts: RunArtifacts): RunScorecard {
|
|
91
|
+
const adrText = collect(artifacts, (p) => p.startsWith('03_adr/'));
|
|
92
|
+
const qeText = collect(artifacts, (p) => p === '08_qe_report.md' || p === '09_fleet_qe_assessment.md');
|
|
93
|
+
const planText = collect(artifacts, (p) => p === '06_implementation_plan.md' || p === '03.5_ideation_report.md');
|
|
94
|
+
const complexityText = collect(artifacts, (p) => p === '00_complexity_assessment.md');
|
|
95
|
+
const manifestText = collect(artifacts, (p) => p.startsWith('07_code_changes/'));
|
|
96
|
+
const allText = collect(artifacts, () => true);
|
|
97
|
+
|
|
98
|
+
const disciplines: DisciplineScore[] = [];
|
|
99
|
+
const add = (id: string, title: string, verdict: DisciplineVerdict, evidence: string): void => {
|
|
100
|
+
disciplines.push({ id, title, verdict, evidence });
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
// 1. ADR with a Confirmation — a named decision whose load-bearing property names its test.
|
|
104
|
+
if (adrText === '') {
|
|
105
|
+
add('adr-confirmation', 'ADR present, property → named test', 'absent', 'no 03_adr/*.md artifact');
|
|
106
|
+
} else {
|
|
107
|
+
const conf = evidenceLine(adrText, /^##+\s*Confirmation/i);
|
|
108
|
+
add(
|
|
109
|
+
'adr-confirmation',
|
|
110
|
+
'ADR present, property → named test',
|
|
111
|
+
conf !== null ? 'pass' : 'partial',
|
|
112
|
+
conf ?? 'ADR exists but has no Confirmation section — the load-bearing property names no test',
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// 2. Discrimination — proof the test can FAIL (the §42 gate, or an explicit mutation proof).
|
|
117
|
+
const discr =
|
|
118
|
+
evidenceLinePositive(allText, /discrimination|§42/i) ??
|
|
119
|
+
evidenceLinePositive(allText, /mutation[s]?\s.*(prov|kill)|mutant[s]?\s.*(kill|red)|RED on the old|goes? RED|failed as expected/i);
|
|
120
|
+
add(
|
|
121
|
+
'discrimination',
|
|
122
|
+
'the property test is proven able to fail',
|
|
123
|
+
discr !== null ? 'pass' : 'absent',
|
|
124
|
+
discr ?? 'no discrimination/§42/mutation-proof evidence in any artifact',
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
// 3. Cross-model QE — an independent family reviewed it, and a grade exists.
|
|
128
|
+
const grade = extractQeGrade(qeText);
|
|
129
|
+
if (qeText === '') {
|
|
130
|
+
add('cross-model-qe', 'independent cross-model review with a grade', 'absent', 'no 08_qe_report.md artifact');
|
|
131
|
+
} else {
|
|
132
|
+
const crossLine = evidenceLinePositive(qeText, /codex|gpt-|cross-model/i);
|
|
133
|
+
const gradeLine = grade !== null ? evidenceLine(qeText, GRADE_RE) : null;
|
|
134
|
+
add(
|
|
135
|
+
'cross-model-qe',
|
|
136
|
+
'independent cross-model review with a grade',
|
|
137
|
+
crossLine !== null && grade !== null ? 'pass' : 'partial',
|
|
138
|
+
crossLine !== null
|
|
139
|
+
? grade !== null
|
|
140
|
+
? `${crossLine}${gradeLine !== null && gradeLine !== crossLine ? ` | ${gradeLine}` : ''}`.slice(0, 140)
|
|
141
|
+
: `${crossLine} — but NO parseable grade`.slice(0, 140)
|
|
142
|
+
: 'QE report exists but no (non-negated) cross-model reviewer is named (self-review only)',
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// 4. Live verification — the property was observed, not inferred. The health-advisor 1.2.0 QE
|
|
147
|
+
// report is the cautionary case: "✅ (mechanism)" with no live evidence shipped a dead feature.
|
|
148
|
+
const live = evidenceLine(qeText, /MEASURED|verified live|VERIFIED LIVE|reproducer/i);
|
|
149
|
+
const liveAnywhere = live ?? evidenceLine(allText, /MEASURED|verified live|VERIFIED LIVE|reproducer/i);
|
|
150
|
+
add(
|
|
151
|
+
'live-verification',
|
|
152
|
+
'claims verified by running, not by reasoning',
|
|
153
|
+
live !== null ? 'pass' : liveAnywhere !== null ? 'partial' : 'absent',
|
|
154
|
+
live ?? liveAnywhere ?? 'no MEASURED / verified-live / reproducer marker anywhere — every claim is inferred',
|
|
155
|
+
);
|
|
156
|
+
|
|
157
|
+
// 5. README-first — the docs travelled in the same change.
|
|
158
|
+
const readme = evidenceLine(qeText + '\n' + manifestText, /README/);
|
|
159
|
+
add(
|
|
160
|
+
'readme-first',
|
|
161
|
+
'READMEs updated in the same change',
|
|
162
|
+
readme !== null ? 'pass' : 'absent',
|
|
163
|
+
readme ?? 'no README mention in the QE report or the change manifest',
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
// 6. The learning loop — Step-0 recall folded in, Step-8 lessons taught.
|
|
167
|
+
const recalled = evidenceLine(complexityText + '\n' + allText, /LEARNED_PATTERNS|dz recall|recalled/i);
|
|
168
|
+
const taught = evidenceLine(allText, /lesson[s]? taught|dz teach|taught \(/i);
|
|
169
|
+
add(
|
|
170
|
+
'learning-loop',
|
|
171
|
+
'Step-0 recall used; Step-8 lessons taught',
|
|
172
|
+
recalled !== null && taught !== null ? 'pass' : recalled !== null || taught !== null ? 'partial' : 'absent',
|
|
173
|
+
recalled !== null && taught !== null
|
|
174
|
+
? `${recalled.slice(0, 68)} | ${taught.slice(0, 68)}`
|
|
175
|
+
: recalled ?? taught ?? 'no recall/teach evidence — the run neither drew on nor fed the learned store',
|
|
176
|
+
);
|
|
177
|
+
|
|
178
|
+
// 7. Amendment confirmation — only when amendments EXIST; their absence is not a failure.
|
|
179
|
+
// Born in the PLAN/ideation: a stray "AM-7" in QE prose (e.g. another feature's test name)
|
|
180
|
+
// must not conjure the discipline (caught by the very first dogfood run).
|
|
181
|
+
const plannedAm = [...new Set(planText.match(/AM-\d+/g) ?? [])].sort();
|
|
182
|
+
if (plannedAm.length > 0) {
|
|
183
|
+
// One stray AM-9 in QE must not satisfy AM-1..AM-2 (Codex QE #3): coverage is id-by-id.
|
|
184
|
+
const covered = plannedAm.filter((id) => qeText.includes(id));
|
|
185
|
+
const missing = plannedAm.filter((id) => !qeText.includes(id));
|
|
186
|
+
add(
|
|
187
|
+
'amendment-confirmation',
|
|
188
|
+
'amendments carried into QE with confirmation',
|
|
189
|
+
missing.length === 0 ? 'pass' : covered.length > 0 ? 'partial' : 'partial',
|
|
190
|
+
missing.length === 0
|
|
191
|
+
? `all planned amendments reach QE: ${plannedAm.join(', ')}`
|
|
192
|
+
: `planned ${plannedAm.join(', ')} — QE never mentions ${missing.join(', ')}`,
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const passed = disciplines.filter((d) => d.verdict === 'pass').length;
|
|
197
|
+
const total = disciplines.length;
|
|
198
|
+
const worst = disciplines.filter((d) => d.verdict === 'absent').map((d) => d.id);
|
|
199
|
+
const summary =
|
|
200
|
+
`${passed}/${total} disciplines fully evidenced` +
|
|
201
|
+
(grade !== null ? ` · QE grade ${grade}` : ' · no QE grade') +
|
|
202
|
+
(worst.length > 0 ? ` · absent: ${worst.join(', ')}` : '');
|
|
203
|
+
|
|
204
|
+
return { slug, disciplines, qeGrade: grade, passed, total, summary };
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
const MARK: Record<DisciplineVerdict, string> = { pass: '✓', partial: '◐', absent: '✗' };
|
|
208
|
+
|
|
209
|
+
export function renderScorecard(card: RunScorecard): string {
|
|
210
|
+
const out: string[] = [];
|
|
211
|
+
out.push(`dz score — ${card.slug} (process scorecard; descriptive-only, never a gate)`);
|
|
212
|
+
out.push('');
|
|
213
|
+
for (const d of card.disciplines) {
|
|
214
|
+
out.push(` ${MARK[d.verdict]} ${d.title}`);
|
|
215
|
+
out.push(` ${d.evidence}`);
|
|
216
|
+
}
|
|
217
|
+
out.push('');
|
|
218
|
+
out.push(` ${card.summary}`);
|
|
219
|
+
return out.join('\n');
|
|
220
|
+
}
|