@dzhechkov/keysarium 1.5.33 → 1.5.35
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 +36 -12
- package/README.md +9 -0
- package/package.json +1 -1
- package/sbom.json +71 -11
- package/templates/.claude/skills/edu-site-generator/SKILL.md +2 -2
- package/templates/.claude/skills/explore/SKILL.md +1 -1
- package/templates/.claude/skills/feature-adr/SKILL.md +1 -1
- package/templates/.claude/skills/frontend-design/SKILL.md +1 -1
- package/templates/.claude/skills/goap-research-ed25519/SKILL.md +144 -11
- package/templates/.claude/skills/goap-research-ed25519/scripts/check_report_evidence.py +363 -0
- package/templates/.claude/skills/goap-research-ed25519/scripts/ed25519_verifier.py +297 -4
- package/templates/.claude/skills/goap-research-ed25519/scripts/evidence_fetch.py +277 -0
- package/templates/.claude/skills/goap-research-ed25519/scripts/fixture_legacy_v1_fact.json +21 -0
- package/templates/.claude/skills/goap-research-ed25519/scripts/learning_bridge.py +502 -0
- package/templates/.claude/skills/goap-research-ed25519/scripts/source_tiers.py +170 -0
- package/templates/.claude/skills/goap-research-ed25519/scripts/test_evidence_provenance.py +830 -0
- package/templates/.claude/skills/presentation-storyteller/SKILL.md +1 -1
- package/templates/.claude/skills/problem-solver-enhanced/SKILL.md +1 -1
- package/templates/.claude/skills/reverse-engineering-unicorn/SKILL.md +1 -1
package/.dz-manifest.json
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"path": "README.md",
|
|
16
|
-
"sha256": "
|
|
16
|
+
"sha256": "5f1e61279a3f6b18e7db46adab9860d3cc95ed31926b122bc8508bf445f11117"
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
"path": "README.ru.md",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
"path": "package.json",
|
|
32
|
-
"sha256": "
|
|
32
|
+
"sha256": "206ba50881c8dc2a62ab44af643f314928b52c0b711757f9e1a3d1b0312724bb"
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
"path": "scripts/sync-templates.js",
|
|
@@ -297,7 +297,7 @@
|
|
|
297
297
|
},
|
|
298
298
|
{
|
|
299
299
|
"path": "templates/.claude/skills/edu-site-generator/SKILL.md",
|
|
300
|
-
"sha256": "
|
|
300
|
+
"sha256": "c999b07ed76c289e1433cfea0b59abd8723d9c36455f76dc2fd8a3c6cf064bcf"
|
|
301
301
|
},
|
|
302
302
|
{
|
|
303
303
|
"path": "templates/.claude/skills/edu-site-generator/examples/sample-course-structure.md",
|
|
@@ -353,7 +353,7 @@
|
|
|
353
353
|
},
|
|
354
354
|
{
|
|
355
355
|
"path": "templates/.claude/skills/explore/SKILL.md",
|
|
356
|
-
"sha256": "
|
|
356
|
+
"sha256": "2473e7961845db0d64566cd42627b374d1830664b9e302058a1b1aa466bc7361"
|
|
357
357
|
},
|
|
358
358
|
{
|
|
359
359
|
"path": "templates/.claude/skills/explore/references/questioning-techniques.md",
|
|
@@ -365,7 +365,7 @@
|
|
|
365
365
|
},
|
|
366
366
|
{
|
|
367
367
|
"path": "templates/.claude/skills/feature-adr/SKILL.md",
|
|
368
|
-
"sha256": "
|
|
368
|
+
"sha256": "c422d1e2b50cf7b8bd56cd5d886d96af30d8bf33a468b925396f395ebf32de53"
|
|
369
369
|
},
|
|
370
370
|
{
|
|
371
371
|
"path": "templates/.claude/skills/feature-adr/examples/sample-feature-output.md",
|
|
@@ -505,11 +505,11 @@
|
|
|
505
505
|
},
|
|
506
506
|
{
|
|
507
507
|
"path": "templates/.claude/skills/frontend-design/SKILL.md",
|
|
508
|
-
"sha256": "
|
|
508
|
+
"sha256": "c9e93c1b95b99a9e120b93d7683afa804713f98ce44bf29ba6d24e9ea1b44aee"
|
|
509
509
|
},
|
|
510
510
|
{
|
|
511
511
|
"path": "templates/.claude/skills/goap-research-ed25519/SKILL.md",
|
|
512
|
-
"sha256": "
|
|
512
|
+
"sha256": "95459a1566b2f88b6fb0c1d2f096f7631d698b95fa156afa26444a7c06e76451"
|
|
513
513
|
},
|
|
514
514
|
{
|
|
515
515
|
"path": "templates/.claude/skills/goap-research-ed25519/references/ed25519-verification.md",
|
|
@@ -523,18 +523,42 @@
|
|
|
523
523
|
"path": "templates/.claude/skills/goap-research-ed25519/references/source-evaluation.md",
|
|
524
524
|
"sha256": "d6a19abb6be64dc9e1f539903080029125d2d899da4de3063e75e1afb7e4906f"
|
|
525
525
|
},
|
|
526
|
+
{
|
|
527
|
+
"path": "templates/.claude/skills/goap-research-ed25519/scripts/check_report_evidence.py",
|
|
528
|
+
"sha256": "81dfdb14a868c7d0d72a640cfdf8ae3b2b5a453a17fcc1a3396587f3b488a919"
|
|
529
|
+
},
|
|
526
530
|
{
|
|
527
531
|
"path": "templates/.claude/skills/goap-research-ed25519/scripts/ed25519_verifier.py",
|
|
528
|
-
"sha256": "
|
|
532
|
+
"sha256": "9d0e74bab811a15b5032ec605e66a58081b52129aac873e7402e30b4dc4a2f10"
|
|
533
|
+
},
|
|
534
|
+
{
|
|
535
|
+
"path": "templates/.claude/skills/goap-research-ed25519/scripts/evidence_fetch.py",
|
|
536
|
+
"sha256": "5f4d7cb5d6fb3106d64130b6606582eb55a4f633ef969cf7890b1de1c179345b"
|
|
537
|
+
},
|
|
538
|
+
{
|
|
539
|
+
"path": "templates/.claude/skills/goap-research-ed25519/scripts/fixture_legacy_v1_fact.json",
|
|
540
|
+
"sha256": "e613de4737145cbfb5f349fbf9f1122801ce3508b62c3a18e2e0cba26b9da5b0"
|
|
529
541
|
},
|
|
530
542
|
{
|
|
531
543
|
"path": "templates/.claude/skills/goap-research-ed25519/scripts/goap_planner.py",
|
|
532
544
|
"sha256": "2ec359e1ddc52ca3118144532ed483dcc609e856a04b29bb191b875c60ff4260"
|
|
533
545
|
},
|
|
546
|
+
{
|
|
547
|
+
"path": "templates/.claude/skills/goap-research-ed25519/scripts/learning_bridge.py",
|
|
548
|
+
"sha256": "6980dd654d77e296f1ab20a9b7a7c43741fd4125ee44727183c63587421d5503"
|
|
549
|
+
},
|
|
550
|
+
{
|
|
551
|
+
"path": "templates/.claude/skills/goap-research-ed25519/scripts/source_tiers.py",
|
|
552
|
+
"sha256": "e1aae76fad01693ab35b51466fc4369c04a5ac64230fd307e7b798dc5beeff7a"
|
|
553
|
+
},
|
|
534
554
|
{
|
|
535
555
|
"path": "templates/.claude/skills/goap-research-ed25519/scripts/test_ed25519_verifier.py",
|
|
536
556
|
"sha256": "ea6d888ac53bac3a0fe236c101f90a984edbac044d787d73c8414f1c4fc540d3"
|
|
537
557
|
},
|
|
558
|
+
{
|
|
559
|
+
"path": "templates/.claude/skills/goap-research-ed25519/scripts/test_evidence_provenance.py",
|
|
560
|
+
"sha256": "6825da92d859a299b86bd9bf9910088a95665e0716346e55f0f117d991d25c9b"
|
|
561
|
+
},
|
|
538
562
|
{
|
|
539
563
|
"path": "templates/.claude/skills/knowledge-extractor/SKILL.md",
|
|
540
564
|
"sha256": "56a397fcd376bf3427373b3e74051c6a5de3a9dc3f66a398a58b9329aaca755b"
|
|
@@ -577,7 +601,7 @@
|
|
|
577
601
|
},
|
|
578
602
|
{
|
|
579
603
|
"path": "templates/.claude/skills/presentation-storyteller/SKILL.md",
|
|
580
|
-
"sha256": "
|
|
604
|
+
"sha256": "f6ad6e6020280f17ccc4e7b71b28551310805aa99999b4056ec0ccfead1193d5"
|
|
581
605
|
},
|
|
582
606
|
{
|
|
583
607
|
"path": "templates/.claude/skills/presentation-storyteller/references/example-presentation.md",
|
|
@@ -601,11 +625,11 @@
|
|
|
601
625
|
},
|
|
602
626
|
{
|
|
603
627
|
"path": "templates/.claude/skills/problem-solver-enhanced/SKILL.md",
|
|
604
|
-
"sha256": "
|
|
628
|
+
"sha256": "031378aa2e10c98928e35de07d454135e73550cd0c49f0cd886d53e4208d6b9f"
|
|
605
629
|
},
|
|
606
630
|
{
|
|
607
631
|
"path": "templates/.claude/skills/reverse-engineering-unicorn/SKILL.md",
|
|
608
|
-
"sha256": "
|
|
632
|
+
"sha256": "20d6b667971f9749d091c1d47e2f75df957f259647cbb861ac54174280096c71"
|
|
609
633
|
},
|
|
610
634
|
{
|
|
611
635
|
"path": "templates/.claude/skills/reverse-engineering-unicorn/examples/noom-cjm-example.md",
|
|
@@ -941,5 +965,5 @@
|
|
|
941
965
|
}
|
|
942
966
|
]
|
|
943
967
|
},
|
|
944
|
-
"signature": "
|
|
968
|
+
"signature": "e14W9eecgau7bIlWej75568LWR2BC5IMnjU+T14Tz5Cq/2WOySneuN53xfxl3oFJyCUr+vDAojeq4B1gs7wqDg=="
|
|
945
969
|
}
|
package/README.md
CHANGED
|
@@ -6,6 +6,15 @@ Full 7-phase pipeline for AI case studies, hackathons, and casariums. Provides s
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
+
|
|
10
|
+
> **`goap-research-ed25519` — self-learning (optional, since this release).** When
|
|
11
|
+
> [`@dzhechkov/harness-cli`](https://www.npmjs.com/package/@dzhechkov/harness-cli) is on PATH, the
|
|
12
|
+
> bundled research skill recalls prior METHOD lessons at the start of an investigation and records new
|
|
13
|
+
> ones at four named moments. Without it the skill behaves exactly as before and says so once — it is
|
|
14
|
+
> detected, never required. A guard refuses to record anything shaped like personal data: a method
|
|
15
|
+
> lesson is written in lower case, carries no digits, and holds no identifier. See
|
|
16
|
+
> `skills/goap-research-ed25519/SKILL.md`.
|
|
17
|
+
|
|
9
18
|
## Quick Start
|
|
10
19
|
|
|
11
20
|
```bash
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dzhechkov/keysarium",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.35",
|
|
4
4
|
"description": "AI Case Research Toolkit for Claude Code — full 7-phase pipeline with feature-adr, dream cycles, background workers, multi-platform support, reward learning, and Cloud.ru AI Factory mapping (--ai-factory flag)",
|
|
5
5
|
"main": "src/cli.js",
|
|
6
6
|
"bin": {
|
package/sbom.json
CHANGED
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"hashes": [
|
|
36
36
|
{
|
|
37
37
|
"alg": "SHA-256",
|
|
38
|
-
"content": "
|
|
38
|
+
"content": "5f1e61279a3f6b18e7db46adab9860d3cc95ed31926b122bc8508bf445f11117"
|
|
39
39
|
}
|
|
40
40
|
]
|
|
41
41
|
},
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"hashes": [
|
|
76
76
|
{
|
|
77
77
|
"alg": "SHA-256",
|
|
78
|
-
"content": "
|
|
78
|
+
"content": "206ba50881c8dc2a62ab44af643f314928b52c0b711757f9e1a3d1b0312724bb"
|
|
79
79
|
}
|
|
80
80
|
]
|
|
81
81
|
},
|
|
@@ -745,7 +745,7 @@
|
|
|
745
745
|
"hashes": [
|
|
746
746
|
{
|
|
747
747
|
"alg": "SHA-256",
|
|
748
|
-
"content": "
|
|
748
|
+
"content": "c999b07ed76c289e1433cfea0b59abd8723d9c36455f76dc2fd8a3c6cf064bcf"
|
|
749
749
|
}
|
|
750
750
|
]
|
|
751
751
|
},
|
|
@@ -885,7 +885,7 @@
|
|
|
885
885
|
"hashes": [
|
|
886
886
|
{
|
|
887
887
|
"alg": "SHA-256",
|
|
888
|
-
"content": "
|
|
888
|
+
"content": "2473e7961845db0d64566cd42627b374d1830664b9e302058a1b1aa466bc7361"
|
|
889
889
|
}
|
|
890
890
|
]
|
|
891
891
|
},
|
|
@@ -915,7 +915,7 @@
|
|
|
915
915
|
"hashes": [
|
|
916
916
|
{
|
|
917
917
|
"alg": "SHA-256",
|
|
918
|
-
"content": "
|
|
918
|
+
"content": "c422d1e2b50cf7b8bd56cd5d886d96af30d8bf33a468b925396f395ebf32de53"
|
|
919
919
|
}
|
|
920
920
|
]
|
|
921
921
|
},
|
|
@@ -1265,7 +1265,7 @@
|
|
|
1265
1265
|
"hashes": [
|
|
1266
1266
|
{
|
|
1267
1267
|
"alg": "SHA-256",
|
|
1268
|
-
"content": "
|
|
1268
|
+
"content": "c9e93c1b95b99a9e120b93d7683afa804713f98ce44bf29ba6d24e9ea1b44aee"
|
|
1269
1269
|
}
|
|
1270
1270
|
]
|
|
1271
1271
|
},
|
|
@@ -1275,7 +1275,7 @@
|
|
|
1275
1275
|
"hashes": [
|
|
1276
1276
|
{
|
|
1277
1277
|
"alg": "SHA-256",
|
|
1278
|
-
"content": "
|
|
1278
|
+
"content": "95459a1566b2f88b6fb0c1d2f096f7631d698b95fa156afa26444a7c06e76451"
|
|
1279
1279
|
}
|
|
1280
1280
|
]
|
|
1281
1281
|
},
|
|
@@ -1309,13 +1309,43 @@
|
|
|
1309
1309
|
}
|
|
1310
1310
|
]
|
|
1311
1311
|
},
|
|
1312
|
+
{
|
|
1313
|
+
"type": "file",
|
|
1314
|
+
"name": "templates/.claude/skills/goap-research-ed25519/scripts/check_report_evidence.py",
|
|
1315
|
+
"hashes": [
|
|
1316
|
+
{
|
|
1317
|
+
"alg": "SHA-256",
|
|
1318
|
+
"content": "81dfdb14a868c7d0d72a640cfdf8ae3b2b5a453a17fcc1a3396587f3b488a919"
|
|
1319
|
+
}
|
|
1320
|
+
]
|
|
1321
|
+
},
|
|
1312
1322
|
{
|
|
1313
1323
|
"type": "file",
|
|
1314
1324
|
"name": "templates/.claude/skills/goap-research-ed25519/scripts/ed25519_verifier.py",
|
|
1315
1325
|
"hashes": [
|
|
1316
1326
|
{
|
|
1317
1327
|
"alg": "SHA-256",
|
|
1318
|
-
"content": "
|
|
1328
|
+
"content": "9d0e74bab811a15b5032ec605e66a58081b52129aac873e7402e30b4dc4a2f10"
|
|
1329
|
+
}
|
|
1330
|
+
]
|
|
1331
|
+
},
|
|
1332
|
+
{
|
|
1333
|
+
"type": "file",
|
|
1334
|
+
"name": "templates/.claude/skills/goap-research-ed25519/scripts/evidence_fetch.py",
|
|
1335
|
+
"hashes": [
|
|
1336
|
+
{
|
|
1337
|
+
"alg": "SHA-256",
|
|
1338
|
+
"content": "5f4d7cb5d6fb3106d64130b6606582eb55a4f633ef969cf7890b1de1c179345b"
|
|
1339
|
+
}
|
|
1340
|
+
]
|
|
1341
|
+
},
|
|
1342
|
+
{
|
|
1343
|
+
"type": "file",
|
|
1344
|
+
"name": "templates/.claude/skills/goap-research-ed25519/scripts/fixture_legacy_v1_fact.json",
|
|
1345
|
+
"hashes": [
|
|
1346
|
+
{
|
|
1347
|
+
"alg": "SHA-256",
|
|
1348
|
+
"content": "e613de4737145cbfb5f349fbf9f1122801ce3508b62c3a18e2e0cba26b9da5b0"
|
|
1319
1349
|
}
|
|
1320
1350
|
]
|
|
1321
1351
|
},
|
|
@@ -1329,6 +1359,26 @@
|
|
|
1329
1359
|
}
|
|
1330
1360
|
]
|
|
1331
1361
|
},
|
|
1362
|
+
{
|
|
1363
|
+
"type": "file",
|
|
1364
|
+
"name": "templates/.claude/skills/goap-research-ed25519/scripts/learning_bridge.py",
|
|
1365
|
+
"hashes": [
|
|
1366
|
+
{
|
|
1367
|
+
"alg": "SHA-256",
|
|
1368
|
+
"content": "6980dd654d77e296f1ab20a9b7a7c43741fd4125ee44727183c63587421d5503"
|
|
1369
|
+
}
|
|
1370
|
+
]
|
|
1371
|
+
},
|
|
1372
|
+
{
|
|
1373
|
+
"type": "file",
|
|
1374
|
+
"name": "templates/.claude/skills/goap-research-ed25519/scripts/source_tiers.py",
|
|
1375
|
+
"hashes": [
|
|
1376
|
+
{
|
|
1377
|
+
"alg": "SHA-256",
|
|
1378
|
+
"content": "e1aae76fad01693ab35b51466fc4369c04a5ac64230fd307e7b798dc5beeff7a"
|
|
1379
|
+
}
|
|
1380
|
+
]
|
|
1381
|
+
},
|
|
1332
1382
|
{
|
|
1333
1383
|
"type": "file",
|
|
1334
1384
|
"name": "templates/.claude/skills/goap-research-ed25519/scripts/test_ed25519_verifier.py",
|
|
@@ -1339,6 +1389,16 @@
|
|
|
1339
1389
|
}
|
|
1340
1390
|
]
|
|
1341
1391
|
},
|
|
1392
|
+
{
|
|
1393
|
+
"type": "file",
|
|
1394
|
+
"name": "templates/.claude/skills/goap-research-ed25519/scripts/test_evidence_provenance.py",
|
|
1395
|
+
"hashes": [
|
|
1396
|
+
{
|
|
1397
|
+
"alg": "SHA-256",
|
|
1398
|
+
"content": "6825da92d859a299b86bd9bf9910088a95665e0716346e55f0f117d991d25c9b"
|
|
1399
|
+
}
|
|
1400
|
+
]
|
|
1401
|
+
},
|
|
1342
1402
|
{
|
|
1343
1403
|
"type": "file",
|
|
1344
1404
|
"name": "templates/.claude/skills/knowledge-extractor/SKILL.md",
|
|
@@ -1445,7 +1505,7 @@
|
|
|
1445
1505
|
"hashes": [
|
|
1446
1506
|
{
|
|
1447
1507
|
"alg": "SHA-256",
|
|
1448
|
-
"content": "
|
|
1508
|
+
"content": "f6ad6e6020280f17ccc4e7b71b28551310805aa99999b4056ec0ccfead1193d5"
|
|
1449
1509
|
}
|
|
1450
1510
|
]
|
|
1451
1511
|
},
|
|
@@ -1505,7 +1565,7 @@
|
|
|
1505
1565
|
"hashes": [
|
|
1506
1566
|
{
|
|
1507
1567
|
"alg": "SHA-256",
|
|
1508
|
-
"content": "
|
|
1568
|
+
"content": "031378aa2e10c98928e35de07d454135e73550cd0c49f0cd886d53e4208d6b9f"
|
|
1509
1569
|
}
|
|
1510
1570
|
]
|
|
1511
1571
|
},
|
|
@@ -1515,7 +1575,7 @@
|
|
|
1515
1575
|
"hashes": [
|
|
1516
1576
|
{
|
|
1517
1577
|
"alg": "SHA-256",
|
|
1518
|
-
"content": "
|
|
1578
|
+
"content": "20d6b667971f9749d091c1d47e2f75df957f259647cbb861ac54174280096c71"
|
|
1519
1579
|
}
|
|
1520
1580
|
]
|
|
1521
1581
|
},
|
|
@@ -10,7 +10,7 @@ trust_tier: 1
|
|
|
10
10
|
|
|
11
11
|
# edu-site-generator — Gamified Educational Site Generator
|
|
12
12
|
|
|
13
|
-
<!-- Trust Tier: 1 — Structured | Path to Tier 2: run a BTO evaluation (
|
|
13
|
+
<!-- Trust Tier: 1 — Structured | Path to Tier 2: run a BTO evaluation (see the skills-bto package) -->
|
|
14
14
|
|
|
15
15
|
> Generate a complete gamified educational SPA from documentation/content, optimized for GitHub Pages deployment.
|
|
16
16
|
|
|
@@ -21,7 +21,7 @@ Trigger on:
|
|
|
21
21
|
- "create learning site [topic]"
|
|
22
22
|
- "build educational app [topic]"
|
|
23
23
|
- "gamified site from documentation"
|
|
24
|
-
- `/edu-site [topic or docs path]`
|
|
24
|
+
- `/edu-site-generator [topic or docs path]`
|
|
25
25
|
|
|
26
26
|
## Overview
|
|
27
27
|
|
|
@@ -10,7 +10,7 @@ description: >
|
|
|
10
10
|
provide solutions until task is fully explored.
|
|
11
11
|
trust_tier: 1
|
|
12
12
|
trust_tier_label: "Structured"
|
|
13
|
-
trust_tier_path: "Run a BTO evaluation
|
|
13
|
+
trust_tier_path: "Run a BTO evaluation (see the skills-bto package) to promote to Tier 2"
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
# Explore: Adaptive Task Clarification
|
|
@@ -11,7 +11,7 @@ description: >
|
|
|
11
11
|
"implement feature", "/feature-adr".
|
|
12
12
|
trust_tier: 0
|
|
13
13
|
trust_tier_label: "Advisory"
|
|
14
|
-
trust_tier_path: "Run a BTO evaluation
|
|
14
|
+
trust_tier_path: "Run a BTO evaluation (see the skills-bto package) to promote to Tier 1"
|
|
15
15
|
agentic_qe_version: "7.5.1"
|
|
16
16
|
agentic_qe_source: "https://github.com/proffesor-for-testing/agentic-qe"
|
|
17
17
|
agentic_qe_skills_core: 9
|
|
@@ -4,7 +4,7 @@ description: Create distinctive, production-grade frontend interfaces with high
|
|
|
4
4
|
license: Complete terms in LICENSE.txt
|
|
5
5
|
trust_tier: 0
|
|
6
6
|
trust_tier_label: "Advisory"
|
|
7
|
-
trust_tier_path: "Add references/ directory and run a BTO evaluation
|
|
7
|
+
trust_tier_path: "Add references/ directory and run a BTO evaluation (see the skills-bto package) to promote to Tier 1"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
|
|
@@ -3,7 +3,7 @@ name: goap-research-ed25519
|
|
|
3
3
|
description: GOAP research system with Ed25519 provenance and tamper-evidence under pinned trusted-issuer keys. Use for high-stakes research that needs cited sources, explicit confidence, signed audit trails, or cryptographic proof of who signed a fact. Ed25519 does not prove truthfulness or prevent hallucination.
|
|
4
4
|
trust_tier: 1
|
|
5
5
|
trust_tier_label: "Structured"
|
|
6
|
-
trust_tier_path: "Run a BTO evaluation
|
|
6
|
+
trust_tier_path: "Run a BTO evaluation (see the skills-bto package) to promote to Tier 2"
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# GOAP Research with Ed25519 Provenance
|
|
@@ -28,6 +28,107 @@ Ed25519 provides cryptographic provenance and tamper-evidence under pinned trust
|
|
|
28
28
|
| `SELF_ATTESTED` | Researcher signature verifies against the embedded researcher key | The research record was not altered after self-signing | up to `0.60` |
|
|
29
29
|
| `UNVERIFIED` | Unknown issuer, missing pin, revoked key, key mismatch, malformed key, or invalid signature | No cryptographic provenance | `0.0` |
|
|
30
30
|
|
|
31
|
+
## Evidence Classes — the second, independent axis
|
|
32
|
+
|
|
33
|
+
Trust classes answer **"was this record altered after signing?"**. They say nothing about whether
|
|
34
|
+
anyone opened the source. That second question caused every content error in real operation, so it
|
|
35
|
+
gets its own axis. A fact can be `ISSUER_SIGNED` **and** `ASSERTED` — a cryptographically perfect
|
|
36
|
+
record of something recited from memory. That combination is legal, expressible, and the dangerous one.
|
|
37
|
+
|
|
38
|
+
| Evidence class | Requirement | What it proves | Ceiling |
|
|
39
|
+
|---|---|---|---|
|
|
40
|
+
| `FETCH_VERIFIED` | `evidence_fetch.fetch_source()` performed the request and got a 2xx body | This script issued an HTTP request and received a body with this byte hash on this date | `1.0` |
|
|
41
|
+
| `LISTING_ONLY` | URL known from a listing, or a body supplied by hand, or the fetch failed | The URL is known; nobody opened it through this tool | `0.50` |
|
|
42
|
+
| `ASSERTED` | Stated from model memory, source never opened | Nothing about the source | `0.0` |
|
|
43
|
+
| *(absent)* | Fact predates this axis | Evidence is **unknown** — neither asserted nor verified | no ceiling of its own |
|
|
44
|
+
|
|
45
|
+
**`FETCH_VERIFIED` cannot be self-declared.** It is minted only by `create_fetched_fact()`, which
|
|
46
|
+
requires a `FetchRecord` — the byte hash, HTTP status and date of a request that actually happened.
|
|
47
|
+
The manual constructors (`create_listing_fact`, `create_asserted_fact`) have no way to produce it.
|
|
48
|
+
The restriction lives in the API shape, not in the author's discipline.
|
|
49
|
+
|
|
50
|
+
**Honest scope of `FETCH_VERIFIED`:** it means the bytes were received. It does **not** mean the
|
|
51
|
+
source is authoritative, that the claim follows from it, or that the reader understood it.
|
|
52
|
+
Provenance, not truth.
|
|
53
|
+
|
|
54
|
+
### The report gate
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
python3 scripts/check_report_evidence.py --report report.md --facts facts.json
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
`ASSERTED` claims must not appear in a report at all. `LISTING_ONLY` claims may appear only with a
|
|
61
|
+
visible marker next to the claim. This is an exit code, not advice — exit `1` on violation, exit `2`
|
|
62
|
+
when the inputs cannot be read (a gate that could not evaluate has cleared nothing).
|
|
63
|
+
|
|
64
|
+
## Self-learning (optional — needs `dz` on PATH)
|
|
65
|
+
|
|
66
|
+
The most valuable signal in research is the moment a conclusion turned out to be
|
|
67
|
+
WRONG. `scripts/learning_bridge.py` records those as METHOD lessons in the shared
|
|
68
|
+
`dz` store and replays them at the start of the next investigation.
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
python3 scripts/learning_bridge.py status # is the loop on at all?
|
|
72
|
+
python3 scripts/learning_bridge.py recall "transferrin saturation" # traps already caught
|
|
73
|
+
python3 scripts/learning_bridge.py teach "total testosterone is uninterpretable without SHBG"
|
|
74
|
+
python3 scripts/learning_bridge.py check "<candidate>" # privacy guard alone
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Recall at the START of an investigation** — before interpreting anything, ask what
|
|
78
|
+
this analyte has already fooled us with. **Teach at four moments**, not at random:
|
|
79
|
+
|
|
80
|
+
| Moment | Why it is the signal |
|
|
81
|
+
|---|---|
|
|
82
|
+
| a conclusion was RETRACTED | the single most valuable lesson available |
|
|
83
|
+
| a population check flipped a conclusion | the effect did not transfer, and now we know the shape |
|
|
84
|
+
| a preanalytical finding explained an alarming value | the value was an artifact; the rule generalises |
|
|
85
|
+
| an open question was closed | the answer, not the waiting |
|
|
86
|
+
|
|
87
|
+
**PRIVACY IS AN INVARIANT, NOT A PREFERENCE.** A lesson describes a METHOD, never a
|
|
88
|
+
person. `teach` REFUSES the wrong shape before any store is touched:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
good "a fast lowers total testosterone by roughly a third, LH down, FSH normal"
|
|
92
|
+
bad "testosterone 8.04 nmol/l in this patient turned out to be a fasting artifact"
|
|
93
|
+
bad "John Smith has HIV" — a capitalised word after the first is refused
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
The accepted form has three properties, all checkable: **no digits** (spelled-out
|
|
97
|
+
values count — `eight point zero four` is a value), **no identifiers**, and **lower
|
|
98
|
+
case** after the first word. The last one replaced an attempt to detect names: a name
|
|
99
|
+
is any word, no list of them exists, and the attempt let `John Smith has HIV` through.
|
|
100
|
+
Lower case costs a keystroke and closes that hole. Acronyms are unaffected — a token
|
|
101
|
+
passes if it is fully upper (`SHBG`, `TSH`) or opens lower (`apoB`, `mmHg`); only Title
|
|
102
|
+
Case is refused, because Title Case is the shape of a name. A token mixing letters with
|
|
103
|
+
a long digit run (`ab1234567`, `NCT04368728`) is an identifier and is refused however it
|
|
104
|
+
is punctuated, while a short lab acronym carrying a digit (`hba1c`) is not.
|
|
105
|
+
|
|
106
|
+
Pass `--allow-numbers` when the number IS the knowledge (a guideline threshold) and
|
|
107
|
+
you take responsibility for it. It never waves through a person beside a number.
|
|
108
|
+
|
|
109
|
+
The refusal is not bureaucracy — the method form is the more useful lesson: a reading
|
|
110
|
+
helps once, a rule helps every time. Honest scope: this is a SHAPE detector, not a
|
|
111
|
+
de-identifier. A lower-case sentence that names nobody and quotes no figure can still
|
|
112
|
+
describe one person, and no regular expression can see that. The shape rule plus the
|
|
113
|
+
four METHOD moments is what keeps the store clean; the guard alone is not a guarantee.
|
|
114
|
+
|
|
115
|
+
Without `dz` installed the package behaves exactly as before and says so once. An
|
|
116
|
+
older `dz` does **not** reject `--domain` — it ignores the flag and exits 0 — so recall
|
|
117
|
+
makes ONE call and detects the older CLI by the ABSENCE of the boost note in the
|
|
118
|
+
output, then states that results may mix other domains. A degraded loop that says so
|
|
119
|
+
beats a silent one. A real failure (non-zero exit) is reported as itself: proceeding
|
|
120
|
+
without prior lessons, never as "your CLI is old".
|
|
121
|
+
|
|
122
|
+
## Source Tiers
|
|
123
|
+
|
|
124
|
+
`source_tiers.classify_source(url)` assigns a class ceiling: A `0.90` (guideline bodies, WHO,
|
|
125
|
+
registries) · B `0.80` (peer-reviewed literature) · C `0.60` (preprints, trial registries) ·
|
|
126
|
+
D `0.40` (everything else, including unknown domains). A tier is a claim about the CLASS a domain
|
|
127
|
+
belongs to — it is **not** a cryptographic statement and must never be confused with issuer pinning.
|
|
128
|
+
|
|
129
|
+
`source_tiers.is_stale(source_date, kind)` flags sources past their TTL. A **missing** `source_date`
|
|
130
|
+
is flagged too: freshness that cannot be established is not freshness.
|
|
131
|
+
|
|
31
132
|
## Signed Message
|
|
32
133
|
|
|
33
134
|
`sign_fact()` and `verify_fact()` use the same deterministic JSON message containing:
|
|
@@ -39,6 +140,16 @@ Ed25519 provides cryptographic provenance and tamper-evidence under pinned trust
|
|
|
39
140
|
- `timestamp`
|
|
40
141
|
- optional `research_context` / nonce
|
|
41
142
|
|
|
143
|
+
**Schema v2** additionally covers `evidence_class`, `fetch_date` and `source_date`, plus a
|
|
144
|
+
`"schema": "fact-v2"` self-description marker. Version is chosen by the presence of
|
|
145
|
+
`evidence_class`: legacy facts keep verifying against the six-field v1 message forever.
|
|
146
|
+
|
|
147
|
+
Because the three evidence fields are part of the signed text, **both** tamper directions fail:
|
|
148
|
+
stripping `evidence_class` makes the verifier build the v1 text, which no longer matches the signed
|
|
149
|
+
v2 text; adding it to a legacy fact makes it build the v2 text, which does not match the signed v1
|
|
150
|
+
text. (The marker is self-description and the growth point for a future v3 — it is not itself the
|
|
151
|
+
protection; a discrimination run proved that.)
|
|
152
|
+
|
|
42
153
|
Changing the issuer or moving the source URL after signing invalidates the signature. The code signs the raw canonical message bytes; Ed25519 performs its own internal hashing. Do not pre-hash with SHA-512 before signing.
|
|
43
154
|
|
|
44
155
|
## Pinned Issuers
|
|
@@ -77,25 +188,43 @@ Reordering, substituting, editing, relabeling, or moving a signed fact fails ver
|
|
|
77
188
|
## Confidence Formula
|
|
78
189
|
|
|
79
190
|
```
|
|
80
|
-
confidence =
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
191
|
+
confidence = min(
|
|
192
|
+
trust_ceiling, # UNVERIFIED 0.0 · SELF_ATTESTED 0.60 · ISSUER_SIGNED 0.95
|
|
193
|
+
evidence_ceiling, # FETCH_VERIFIED 1.0 · LISTING_ONLY 0.50 · ASSERTED 0.0 · absent → no cap
|
|
194
|
+
tier_ceiling, # A 0.90 · B 0.80 · C 0.60 · D 0.40
|
|
195
|
+
)
|
|
84
196
|
```
|
|
85
197
|
|
|
198
|
+
The **weakest link decides**, never the average. An `ISSUER_SIGNED` fact that nobody read is capped
|
|
199
|
+
at `0.0` by its evidence class — which is the whole point of the second axis.
|
|
200
|
+
|
|
86
201
|
Invalid signatures are rejected with confidence `0.0`; they are never a recoverable `0.5` penalty.
|
|
87
202
|
|
|
88
203
|
## Research Workflow
|
|
89
204
|
|
|
90
205
|
1. Define the research goal and required evidence threshold.
|
|
91
206
|
2. Configure pinned issuer keys when issuer-grade provenance is required.
|
|
92
|
-
3. Search and
|
|
207
|
+
3. Search and locate candidate sources.
|
|
93
208
|
4. Extract claims and source URLs.
|
|
94
|
-
5.
|
|
95
|
-
|
|
209
|
+
5. **Fetch each source through the tool, not by hand:**
|
|
210
|
+
```python
|
|
211
|
+
from evidence_fetch import fetch_source, FetchRecord
|
|
212
|
+
record = fetch_source(url) # real HTTP, stdlib only
|
|
213
|
+
if isinstance(record, FetchRecord):
|
|
214
|
+
fact = verifier.create_fetched_fact(claim, record, issuer, source_date="2024-03-01")
|
|
215
|
+
else: # offline, 404, oversize, refused scheme…
|
|
216
|
+
fact = verifier.create_listing_fact(claim, url, reason=record.reason)
|
|
217
|
+
```
|
|
218
|
+
A claim you never opened a source for is `verifier.create_asserted_fact(claim)` — record it
|
|
219
|
+
honestly and let the gate refuse it. Never hand-label a class you did not earn.
|
|
220
|
+
6. Add facts to the research ledger; issuer-signed facts only when a pinned issuer key actually
|
|
221
|
+
signed the message.
|
|
96
222
|
7. Verify facts and citation chains.
|
|
97
223
|
8. Cross-check claims through ordinary source evaluation.
|
|
98
|
-
9.
|
|
224
|
+
9. **Run the report gate before delivering:**
|
|
225
|
+
`python3 scripts/check_report_evidence.py --report <report.md> --facts <facts.json>` — exit 0 required.
|
|
226
|
+
10. Report confidence, evidence-class mix, unsigned claims, rejected signatures, and limitations
|
|
227
|
+
explicitly.
|
|
99
228
|
|
|
100
229
|
## Output Expectations
|
|
101
230
|
|
|
@@ -103,10 +232,14 @@ Reports should include:
|
|
|
103
232
|
|
|
104
233
|
- Research objective and GOAP plan executed.
|
|
105
234
|
- Findings with source URLs.
|
|
106
|
-
- Verification status per claim (`ISSUER_SIGNED
|
|
235
|
+
- Verification status per claim on BOTH axes: trust (`ISSUER_SIGNED` / `SELF_ATTESTED` /
|
|
236
|
+
`UNVERIFIED`) and evidence (`FETCH_VERIFIED` / `LISTING_ONLY` / `ASSERTED` / unknown-legacy).
|
|
237
|
+
- The evidence-class mix as a count — the share of `ASSERTED` should be zero.
|
|
238
|
+
- A visible marker next to every `LISTING_ONLY` claim ("source not opened directly — verify").
|
|
107
239
|
- Chain integrity result when citation chains are used.
|
|
108
240
|
- Unsigned and rejected claims.
|
|
109
|
-
- Explicit caveat that cryptographic provenance is not truth verification
|
|
241
|
+
- Explicit caveat that cryptographic provenance is not truth verification, and that
|
|
242
|
+
`FETCH_VERIFIED` means the bytes arrived — not that the source is right.
|
|
110
243
|
|
|
111
244
|
## Implementation
|
|
112
245
|
|