@dzhechkov/keysarium 1.5.32 → 1.5.33

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 CHANGED
@@ -9,7 +9,7 @@
9
9
  },
10
10
  {
11
11
  "path": "CHANGELOG.md",
12
- "sha256": "01890b6a0891dd455f7269c25535644de59e88903e216cd02926ba125ffa191c"
12
+ "sha256": "d7ebdc513689fb05fd652691b7446335fedbdc137b4420de3ab9c016f8d3aa15"
13
13
  },
14
14
  {
15
15
  "path": "README.md",
@@ -25,11 +25,11 @@
25
25
  },
26
26
  {
27
27
  "path": "install.sh",
28
- "sha256": "5bf13e556fbf2884c084bbeff61b3ee0f89674426ca87cb4217cd4fc73093228"
28
+ "sha256": "9631575645f93ca8a65aa2f346da7253cd6ffa6394e36c13a2bf0d7eb605387f"
29
29
  },
30
30
  {
31
31
  "path": "package.json",
32
- "sha256": "f2a6d89fc9a9ff1c9d036e21659330ef0d37506487a80e9a0a6425e00e4a701b"
32
+ "sha256": "0869b59a6f7c9dfeb990cf4251d5d8dc7ce12c4b54a1c9a058e5caf12461d11f"
33
33
  },
34
34
  {
35
35
  "path": "scripts/sync-templates.js",
@@ -45,27 +45,27 @@
45
45
  },
46
46
  {
47
47
  "path": "src/commands/doctor.js",
48
- "sha256": "aa3f0b614715729d2c659a5a4ad43d0c8b12dd82c2e5169e5cf2d9bc424cc745"
48
+ "sha256": "c378ac7ea4943fdbddb176abdd5dae04a4680919ddc475e3d1dc1dfb8a696287"
49
49
  },
50
50
  {
51
51
  "path": "src/commands/init.js",
52
- "sha256": "b7994eab0fdbbcafbf5745099de3ca67b347e5df4df1b451288e018fc5af84f1"
52
+ "sha256": "c25118fca72fae774906da099ec4f414fb3ae46694f2c5e5843d73bee0d1b647"
53
53
  },
54
54
  {
55
55
  "path": "src/commands/list.js",
56
- "sha256": "c6cea6cb92e6183102c33eab49e470841139744217a204505931f9789e101d09"
56
+ "sha256": "2f9cf66aca055f18f2149fc551d555e24e0a825c9ea5efa612d6cad05fc354db"
57
57
  },
58
58
  {
59
59
  "path": "src/commands/remove.js",
60
- "sha256": "66188c85752785a3ab4824009db10bd9ba313e4a9ace3e5adb2911c062647eeb"
60
+ "sha256": "ffedc6cd03a694785d8639ce8d0b82a4708c6937650a216a62d5d3d9e0761d74"
61
61
  },
62
62
  {
63
63
  "path": "src/commands/update.js",
64
- "sha256": "7e110f8e5fd12d809454a2320d7c168944156aec652ee00473ff19289911bbf9"
64
+ "sha256": "8fb7a602452c228f2841170f09217f5523bd926f64180f4338348bd3a795bb79"
65
65
  },
66
66
  {
67
67
  "path": "src/utils.js",
68
- "sha256": "1dab19748cc4d43f0f4e54be9f52434411b5e712265d18959b6bec0b1b6b3f7b"
68
+ "sha256": "c1ba04e4cf8ca75ac3e0da779f5361a87e909acc5527ee982b547c71f5cba208"
69
69
  },
70
70
  {
71
71
  "path": "templates/.claude/agents/cjm-variant-worker.md",
@@ -713,7 +713,7 @@
713
713
  },
714
714
  {
715
715
  "path": "templates/docs/continuous-learning-guide.md",
716
- "sha256": "b285f84151b02d3b720d7ef50ac647bcc8ef783248788b7fe95be411f4230ebd"
716
+ "sha256": "06d6b3f2e89c72cffa488aac5569d87f84f42da3a4904c79b2bae4ae6c69fef5"
717
717
  },
718
718
  {
719
719
  "path": "templates/docs/edu-site-generator/01-deployment-guide.md",
@@ -741,7 +741,7 @@
741
741
  },
742
742
  {
743
743
  "path": "templates/docs/feature-adr/01-architecture.md",
744
- "sha256": "42eb0c45b9cc22771c3c15be1acb42988d9033f88a2ed02d0c97fb8fc343d323"
744
+ "sha256": "c403fbadf2086291d729f51a0245a3982bf0f3e9ab98bf18f1078bfbdcc033a3"
745
745
  },
746
746
  {
747
747
  "path": "templates/docs/feature-adr/02-functionality.md",
@@ -749,7 +749,7 @@
749
749
  },
750
750
  {
751
751
  "path": "templates/docs/feature-adr/03-deployment-guide.md",
752
- "sha256": "2b9fae94858efa4a66d56af070c15b2a40b068939b138b9ffd8e0f9abd31b431"
752
+ "sha256": "98b4468359e91c5aebdccef2c53ce49f771a87f43f609a57591fb6968fcbad09"
753
753
  },
754
754
  {
755
755
  "path": "templates/docs/feature-adr/04-admin-guide.md",
@@ -757,7 +757,7 @@
757
757
  },
758
758
  {
759
759
  "path": "templates/docs/feature-adr/05-user-guide.md",
760
- "sha256": "2aabbb52ac0d5d00d14d6f497c7121ecc195f04cadc2fac61a91f4c38d0e3f84"
760
+ "sha256": "da59b505c050e5c4712d8ea507b1c3dcfe475bfa75ab4693dc1d6dc0ba793e6f"
761
761
  },
762
762
  {
763
763
  "path": "templates/docs/feature-adr/06-user-flows.md",
@@ -765,7 +765,7 @@
765
765
  },
766
766
  {
767
767
  "path": "templates/docs/improvement-directions.md",
768
- "sha256": "7660cfcfc5ec4836d22f69ba2f27ea5afdb2239bbb8676d8e2c18a10bee20246"
768
+ "sha256": "df7649c930a622ee7467a3a16765196d27634a0ed9f23da36427da0bed79d2d5"
769
769
  },
770
770
  {
771
771
  "path": "templates/docs/keysarium-core/01-architecture.md",
@@ -773,15 +773,15 @@
773
773
  },
774
774
  {
775
775
  "path": "templates/docs/keysarium-core/02-functionality.md",
776
- "sha256": "c5cb26cf823e317d792f346cd9bcb4f27ff949965556bee50831a8525fecb38a"
776
+ "sha256": "4a768dd2b37b1cb030a4e67a81c269ed46e12327cd6ebb790cbf91e80e6b997b"
777
777
  },
778
778
  {
779
779
  "path": "templates/docs/keysarium-core/03-deployment-guide.md",
780
- "sha256": "e66b0248600e95bec8f1ec8a0bc9321c8c3ab0fa78fa8fbe60f1eeae4775c847"
780
+ "sha256": "c560c3a8adb6b344c305d3376c09657d1f8540e371e26acc9a1165931f98b82d"
781
781
  },
782
782
  {
783
783
  "path": "templates/docs/keysarium-core/04-admin-guide.md",
784
- "sha256": "925e8238e2d2bbce8714ac97dd96bb9bdd9131e22c378065fefd065993b25349"
784
+ "sha256": "6de7defa13889e6583a452a0e5d7d73ab64f8341a08625af5d12d726ebbb8b5b"
785
785
  },
786
786
  {
787
787
  "path": "templates/docs/keysarium-core/05-user-guide.md",
@@ -793,55 +793,55 @@
793
793
  },
794
794
  {
795
795
  "path": "templates/docs/keysarium/01-deployment-guide.md",
796
- "sha256": "4b7ad2a5e24440f95f8ad507bc1fa795a0e2480166b18dfc38edeefeae06c6d2"
796
+ "sha256": "11bcea773e2e84f75ee0c67fd9cce108f15bc94a175aec9f8268c2fe2ede7b9f"
797
797
  },
798
798
  {
799
799
  "path": "templates/docs/keysarium/02-admin-guide.md",
800
- "sha256": "77ba7643a354e32694cde2eb977103a2b4442d486c85e0870bd0415bd6fe874d"
800
+ "sha256": "abfe96ab001e649b9c1813f7dffabb016d6fe279a058e9eecd9e57a3468c814a"
801
801
  },
802
802
  {
803
803
  "path": "templates/docs/keysarium/03-user-guide.md",
804
- "sha256": "3263a41ace562613020b40b84236c246f8e64450a6c7ee20f85723a448c9998e"
804
+ "sha256": "1d843e70458b09d535c6b6b33800c7a2de539054966e25bc463d616cc793e62b"
805
805
  },
806
806
  {
807
807
  "path": "templates/docs/keysarium/04-infrastructure-requirements.md",
808
- "sha256": "7176ab09c131afda5cd2fca942c0bf0643bce3231bf13b3a179b45c4d1cae4e1"
808
+ "sha256": "1fb430d68c97fdd03a57119639d299ebcb059b2352e653d179e74fd5c7a614a5"
809
809
  },
810
810
  {
811
811
  "path": "templates/docs/keysarium/05-architecture.md",
812
- "sha256": "849e935cb792f7ad5a0bc63394e5ac60bbe1e687583277677d184ddcf346e781"
812
+ "sha256": "4e167e622ebaffcbfe710d72d47d1c56bd0188de699cdf223cd66bcba2f4b595"
813
813
  },
814
814
  {
815
815
  "path": "templates/docs/keysarium/06-user-flows.md",
816
- "sha256": "0df566069bbece82d6e0bf3df45337cf4aacfe8c4cbfa214b68a04df8f999bf9"
816
+ "sha256": "bff121a07af83343febd0e1715f51b7b8314e31bc21f5c2f3577954b369700b5"
817
817
  },
818
818
  {
819
819
  "path": "templates/docs/skills-bto/01-deployment-guide.md",
820
- "sha256": "05abc33e6586334db5cdcdf97195a217ad5e144b95d5b473606a1b08bf295aaf"
820
+ "sha256": "96f1ab721532bc6b38a2583263e50015721bf7b920432232ad90a236bc85b334"
821
821
  },
822
822
  {
823
823
  "path": "templates/docs/skills-bto/02-admin-guide.md",
824
- "sha256": "ce14efefcc05d341cfd5cf9f34a34146f2400eea94260f7bed5e8573653ef4f6"
824
+ "sha256": "e9fa284257dee51d29f5fa7baf28780aac5d4b4b5e3e0248402877b080a37515"
825
825
  },
826
826
  {
827
827
  "path": "templates/docs/skills-bto/03-user-guide.md",
828
- "sha256": "00404bbe1a05ff3e7d698d1e413b14daef0625419dc1c9f77b5f3e018b976cdc"
828
+ "sha256": "2afa935e95dc2c311e1a84a0067c79458e7fb3bbd8f8f20813115c0a9213c508"
829
829
  },
830
830
  {
831
831
  "path": "templates/docs/skills-bto/04-infrastructure-requirements.md",
832
- "sha256": "68b5785ed34592edf466b22fa3127c5cf24901ce2ffc97325c205c835399691b"
832
+ "sha256": "9396fc706942041e466a1426e6f4bde4606a8f98a2d64c3af46a6959c3f5c25c"
833
833
  },
834
834
  {
835
835
  "path": "templates/docs/skills-bto/05-architecture.md",
836
- "sha256": "526190a993536f73d4a9cae121dfef5957f4d2cb095552cb17490726644f06b9"
836
+ "sha256": "cef86321b722dd7a75e24f8412c17256cc3c148b29a5d22ce24ee35a5e610a7a"
837
837
  },
838
838
  {
839
839
  "path": "templates/docs/skills-bto/06-user-flows.md",
840
- "sha256": "bbee1a851c321b3fa74d5abcef965e737c1bc7060ce2ee4636ec416dc55ab24c"
840
+ "sha256": "ac47e003c42d2a82e95066f89b3a9471bc5ff18bd1c9775376f99d6dab2b24a9"
841
841
  },
842
842
  {
843
843
  "path": "templates/docs/transcript-site-generator/01-deployment-guide.md",
844
- "sha256": "664e1c1b933d9f8467732da7d4bdaa5fbb3e6ca2821c599fe1af070aa8ff6f48"
844
+ "sha256": "ee4227342004cbbfb9db367ce5000a81620cd9e59b1395fbe0711bc611d37d1a"
845
845
  },
846
846
  {
847
847
  "path": "templates/docs/transcript-site-generator/02-admin-guide.md",
@@ -905,7 +905,7 @@
905
905
  },
906
906
  {
907
907
  "path": "templates/lib/platform-templates/opencode.md",
908
- "sha256": "131b2d2343c91ff96f0d0640d73b7382c4363cba036f004eb26c53e53ec11b29"
908
+ "sha256": "d093eb0cc533f0459ce745a9ded5cabafca91a96ab09480bb1f04f0038971bbd"
909
909
  },
910
910
  {
911
911
  "path": "templates/lib/reward-tracker.md",
@@ -921,7 +921,7 @@
921
921
  },
922
922
  {
923
923
  "path": "templates/lib/worker-templates/brain-export.md",
924
- "sha256": "c505155787aac4e131ea19025dc8ec1b4e4e12347c2d32a72ec21f95ef1a2491"
924
+ "sha256": "0949882d82866500f4c03089db34cf029ab2ba12c12c53829cadb3d00a2969a9"
925
925
  },
926
926
  {
927
927
  "path": "templates/lib/worker-templates/consolidate.md",
@@ -941,5 +941,5 @@
941
941
  }
942
942
  ]
943
943
  },
944
- "signature": "pBVcCqXfE/2Cusw5CHnnuv8LxliqTFPh+mzVnMn2Udv4rAUwbjBAfG4nmv2EwI1hFkuBaEac1SQj3tNlXRdsAw=="
944
+ "signature": "Zha9YxKobLgXgBV+tQ7B1xiGPXelkCRa3gSuG0ge7q6Sn7N7SkE9myZ/QGn7heGRXCFV1sbiYPH6Ao4omzHKAg=="
945
945
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dzhechkov/keysarium",
3
- "version": "1.5.32",
3
+ "version": "1.5.33",
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
@@ -25,7 +25,7 @@
25
25
  "hashes": [
26
26
  {
27
27
  "alg": "SHA-256",
28
- "content": "01890b6a0891dd455f7269c25535644de59e88903e216cd02926ba125ffa191c"
28
+ "content": "d7ebdc513689fb05fd652691b7446335fedbdc137b4420de3ab9c016f8d3aa15"
29
29
  }
30
30
  ]
31
31
  },
@@ -65,7 +65,7 @@
65
65
  "hashes": [
66
66
  {
67
67
  "alg": "SHA-256",
68
- "content": "5bf13e556fbf2884c084bbeff61b3ee0f89674426ca87cb4217cd4fc73093228"
68
+ "content": "9631575645f93ca8a65aa2f346da7253cd6ffa6394e36c13a2bf0d7eb605387f"
69
69
  }
70
70
  ]
71
71
  },
@@ -75,7 +75,7 @@
75
75
  "hashes": [
76
76
  {
77
77
  "alg": "SHA-256",
78
- "content": "f2a6d89fc9a9ff1c9d036e21659330ef0d37506487a80e9a0a6425e00e4a701b"
78
+ "content": "0869b59a6f7c9dfeb990cf4251d5d8dc7ce12c4b54a1c9a058e5caf12461d11f"
79
79
  }
80
80
  ]
81
81
  },
@@ -115,7 +115,7 @@
115
115
  "hashes": [
116
116
  {
117
117
  "alg": "SHA-256",
118
- "content": "aa3f0b614715729d2c659a5a4ad43d0c8b12dd82c2e5169e5cf2d9bc424cc745"
118
+ "content": "c378ac7ea4943fdbddb176abdd5dae04a4680919ddc475e3d1dc1dfb8a696287"
119
119
  }
120
120
  ]
121
121
  },
@@ -125,7 +125,7 @@
125
125
  "hashes": [
126
126
  {
127
127
  "alg": "SHA-256",
128
- "content": "b7994eab0fdbbcafbf5745099de3ca67b347e5df4df1b451288e018fc5af84f1"
128
+ "content": "c25118fca72fae774906da099ec4f414fb3ae46694f2c5e5843d73bee0d1b647"
129
129
  }
130
130
  ]
131
131
  },
@@ -135,7 +135,7 @@
135
135
  "hashes": [
136
136
  {
137
137
  "alg": "SHA-256",
138
- "content": "c6cea6cb92e6183102c33eab49e470841139744217a204505931f9789e101d09"
138
+ "content": "2f9cf66aca055f18f2149fc551d555e24e0a825c9ea5efa612d6cad05fc354db"
139
139
  }
140
140
  ]
141
141
  },
@@ -145,7 +145,7 @@
145
145
  "hashes": [
146
146
  {
147
147
  "alg": "SHA-256",
148
- "content": "66188c85752785a3ab4824009db10bd9ba313e4a9ace3e5adb2911c062647eeb"
148
+ "content": "ffedc6cd03a694785d8639ce8d0b82a4708c6937650a216a62d5d3d9e0761d74"
149
149
  }
150
150
  ]
151
151
  },
@@ -155,7 +155,7 @@
155
155
  "hashes": [
156
156
  {
157
157
  "alg": "SHA-256",
158
- "content": "7e110f8e5fd12d809454a2320d7c168944156aec652ee00473ff19289911bbf9"
158
+ "content": "8fb7a602452c228f2841170f09217f5523bd926f64180f4338348bd3a795bb79"
159
159
  }
160
160
  ]
161
161
  },
@@ -165,7 +165,7 @@
165
165
  "hashes": [
166
166
  {
167
167
  "alg": "SHA-256",
168
- "content": "1dab19748cc4d43f0f4e54be9f52434411b5e712265d18959b6bec0b1b6b3f7b"
168
+ "content": "c1ba04e4cf8ca75ac3e0da779f5361a87e909acc5527ee982b547c71f5cba208"
169
169
  }
170
170
  ]
171
171
  },
@@ -1785,7 +1785,7 @@
1785
1785
  "hashes": [
1786
1786
  {
1787
1787
  "alg": "SHA-256",
1788
- "content": "b285f84151b02d3b720d7ef50ac647bcc8ef783248788b7fe95be411f4230ebd"
1788
+ "content": "06d6b3f2e89c72cffa488aac5569d87f84f42da3a4904c79b2bae4ae6c69fef5"
1789
1789
  }
1790
1790
  ]
1791
1791
  },
@@ -1855,7 +1855,7 @@
1855
1855
  "hashes": [
1856
1856
  {
1857
1857
  "alg": "SHA-256",
1858
- "content": "42eb0c45b9cc22771c3c15be1acb42988d9033f88a2ed02d0c97fb8fc343d323"
1858
+ "content": "c403fbadf2086291d729f51a0245a3982bf0f3e9ab98bf18f1078bfbdcc033a3"
1859
1859
  }
1860
1860
  ]
1861
1861
  },
@@ -1875,7 +1875,7 @@
1875
1875
  "hashes": [
1876
1876
  {
1877
1877
  "alg": "SHA-256",
1878
- "content": "2b9fae94858efa4a66d56af070c15b2a40b068939b138b9ffd8e0f9abd31b431"
1878
+ "content": "98b4468359e91c5aebdccef2c53ce49f771a87f43f609a57591fb6968fcbad09"
1879
1879
  }
1880
1880
  ]
1881
1881
  },
@@ -1895,7 +1895,7 @@
1895
1895
  "hashes": [
1896
1896
  {
1897
1897
  "alg": "SHA-256",
1898
- "content": "2aabbb52ac0d5d00d14d6f497c7121ecc195f04cadc2fac61a91f4c38d0e3f84"
1898
+ "content": "da59b505c050e5c4712d8ea507b1c3dcfe475bfa75ab4693dc1d6dc0ba793e6f"
1899
1899
  }
1900
1900
  ]
1901
1901
  },
@@ -1915,7 +1915,7 @@
1915
1915
  "hashes": [
1916
1916
  {
1917
1917
  "alg": "SHA-256",
1918
- "content": "7660cfcfc5ec4836d22f69ba2f27ea5afdb2239bbb8676d8e2c18a10bee20246"
1918
+ "content": "df7649c930a622ee7467a3a16765196d27634a0ed9f23da36427da0bed79d2d5"
1919
1919
  }
1920
1920
  ]
1921
1921
  },
@@ -1935,7 +1935,7 @@
1935
1935
  "hashes": [
1936
1936
  {
1937
1937
  "alg": "SHA-256",
1938
- "content": "c5cb26cf823e317d792f346cd9bcb4f27ff949965556bee50831a8525fecb38a"
1938
+ "content": "4a768dd2b37b1cb030a4e67a81c269ed46e12327cd6ebb790cbf91e80e6b997b"
1939
1939
  }
1940
1940
  ]
1941
1941
  },
@@ -1945,7 +1945,7 @@
1945
1945
  "hashes": [
1946
1946
  {
1947
1947
  "alg": "SHA-256",
1948
- "content": "e66b0248600e95bec8f1ec8a0bc9321c8c3ab0fa78fa8fbe60f1eeae4775c847"
1948
+ "content": "c560c3a8adb6b344c305d3376c09657d1f8540e371e26acc9a1165931f98b82d"
1949
1949
  }
1950
1950
  ]
1951
1951
  },
@@ -1955,7 +1955,7 @@
1955
1955
  "hashes": [
1956
1956
  {
1957
1957
  "alg": "SHA-256",
1958
- "content": "925e8238e2d2bbce8714ac97dd96bb9bdd9131e22c378065fefd065993b25349"
1958
+ "content": "6de7defa13889e6583a452a0e5d7d73ab64f8341a08625af5d12d726ebbb8b5b"
1959
1959
  }
1960
1960
  ]
1961
1961
  },
@@ -1985,7 +1985,7 @@
1985
1985
  "hashes": [
1986
1986
  {
1987
1987
  "alg": "SHA-256",
1988
- "content": "4b7ad2a5e24440f95f8ad507bc1fa795a0e2480166b18dfc38edeefeae06c6d2"
1988
+ "content": "11bcea773e2e84f75ee0c67fd9cce108f15bc94a175aec9f8268c2fe2ede7b9f"
1989
1989
  }
1990
1990
  ]
1991
1991
  },
@@ -1995,7 +1995,7 @@
1995
1995
  "hashes": [
1996
1996
  {
1997
1997
  "alg": "SHA-256",
1998
- "content": "77ba7643a354e32694cde2eb977103a2b4442d486c85e0870bd0415bd6fe874d"
1998
+ "content": "abfe96ab001e649b9c1813f7dffabb016d6fe279a058e9eecd9e57a3468c814a"
1999
1999
  }
2000
2000
  ]
2001
2001
  },
@@ -2005,7 +2005,7 @@
2005
2005
  "hashes": [
2006
2006
  {
2007
2007
  "alg": "SHA-256",
2008
- "content": "3263a41ace562613020b40b84236c246f8e64450a6c7ee20f85723a448c9998e"
2008
+ "content": "1d843e70458b09d535c6b6b33800c7a2de539054966e25bc463d616cc793e62b"
2009
2009
  }
2010
2010
  ]
2011
2011
  },
@@ -2015,7 +2015,7 @@
2015
2015
  "hashes": [
2016
2016
  {
2017
2017
  "alg": "SHA-256",
2018
- "content": "7176ab09c131afda5cd2fca942c0bf0643bce3231bf13b3a179b45c4d1cae4e1"
2018
+ "content": "1fb430d68c97fdd03a57119639d299ebcb059b2352e653d179e74fd5c7a614a5"
2019
2019
  }
2020
2020
  ]
2021
2021
  },
@@ -2025,7 +2025,7 @@
2025
2025
  "hashes": [
2026
2026
  {
2027
2027
  "alg": "SHA-256",
2028
- "content": "849e935cb792f7ad5a0bc63394e5ac60bbe1e687583277677d184ddcf346e781"
2028
+ "content": "4e167e622ebaffcbfe710d72d47d1c56bd0188de699cdf223cd66bcba2f4b595"
2029
2029
  }
2030
2030
  ]
2031
2031
  },
@@ -2035,7 +2035,7 @@
2035
2035
  "hashes": [
2036
2036
  {
2037
2037
  "alg": "SHA-256",
2038
- "content": "0df566069bbece82d6e0bf3df45337cf4aacfe8c4cbfa214b68a04df8f999bf9"
2038
+ "content": "bff121a07af83343febd0e1715f51b7b8314e31bc21f5c2f3577954b369700b5"
2039
2039
  }
2040
2040
  ]
2041
2041
  },
@@ -2045,7 +2045,7 @@
2045
2045
  "hashes": [
2046
2046
  {
2047
2047
  "alg": "SHA-256",
2048
- "content": "05abc33e6586334db5cdcdf97195a217ad5e144b95d5b473606a1b08bf295aaf"
2048
+ "content": "96f1ab721532bc6b38a2583263e50015721bf7b920432232ad90a236bc85b334"
2049
2049
  }
2050
2050
  ]
2051
2051
  },
@@ -2055,7 +2055,7 @@
2055
2055
  "hashes": [
2056
2056
  {
2057
2057
  "alg": "SHA-256",
2058
- "content": "ce14efefcc05d341cfd5cf9f34a34146f2400eea94260f7bed5e8573653ef4f6"
2058
+ "content": "e9fa284257dee51d29f5fa7baf28780aac5d4b4b5e3e0248402877b080a37515"
2059
2059
  }
2060
2060
  ]
2061
2061
  },
@@ -2065,7 +2065,7 @@
2065
2065
  "hashes": [
2066
2066
  {
2067
2067
  "alg": "SHA-256",
2068
- "content": "00404bbe1a05ff3e7d698d1e413b14daef0625419dc1c9f77b5f3e018b976cdc"
2068
+ "content": "2afa935e95dc2c311e1a84a0067c79458e7fb3bbd8f8f20813115c0a9213c508"
2069
2069
  }
2070
2070
  ]
2071
2071
  },
@@ -2075,7 +2075,7 @@
2075
2075
  "hashes": [
2076
2076
  {
2077
2077
  "alg": "SHA-256",
2078
- "content": "68b5785ed34592edf466b22fa3127c5cf24901ce2ffc97325c205c835399691b"
2078
+ "content": "9396fc706942041e466a1426e6f4bde4606a8f98a2d64c3af46a6959c3f5c25c"
2079
2079
  }
2080
2080
  ]
2081
2081
  },
@@ -2085,7 +2085,7 @@
2085
2085
  "hashes": [
2086
2086
  {
2087
2087
  "alg": "SHA-256",
2088
- "content": "526190a993536f73d4a9cae121dfef5957f4d2cb095552cb17490726644f06b9"
2088
+ "content": "cef86321b722dd7a75e24f8412c17256cc3c148b29a5d22ce24ee35a5e610a7a"
2089
2089
  }
2090
2090
  ]
2091
2091
  },
@@ -2095,7 +2095,7 @@
2095
2095
  "hashes": [
2096
2096
  {
2097
2097
  "alg": "SHA-256",
2098
- "content": "bbee1a851c321b3fa74d5abcef965e737c1bc7060ce2ee4636ec416dc55ab24c"
2098
+ "content": "ac47e003c42d2a82e95066f89b3a9471bc5ff18bd1c9775376f99d6dab2b24a9"
2099
2099
  }
2100
2100
  ]
2101
2101
  },
@@ -2105,7 +2105,7 @@
2105
2105
  "hashes": [
2106
2106
  {
2107
2107
  "alg": "SHA-256",
2108
- "content": "664e1c1b933d9f8467732da7d4bdaa5fbb3e6ca2821c599fe1af070aa8ff6f48"
2108
+ "content": "ee4227342004cbbfb9db367ce5000a81620cd9e59b1395fbe0711bc611d37d1a"
2109
2109
  }
2110
2110
  ]
2111
2111
  },
@@ -2265,7 +2265,7 @@
2265
2265
  "hashes": [
2266
2266
  {
2267
2267
  "alg": "SHA-256",
2268
- "content": "131b2d2343c91ff96f0d0640d73b7382c4363cba036f004eb26c53e53ec11b29"
2268
+ "content": "d093eb0cc533f0459ce745a9ded5cabafca91a96ab09480bb1f04f0038971bbd"
2269
2269
  }
2270
2270
  ]
2271
2271
  },
@@ -2305,7 +2305,7 @@
2305
2305
  "hashes": [
2306
2306
  {
2307
2307
  "alg": "SHA-256",
2308
- "content": "c505155787aac4e131ea19025dc8ec1b4e4e12347c2d32a72ec21f95ef1a2491"
2308
+ "content": "0949882d82866500f4c03089db34cf029ab2ba12c12c53829cadb3d00a2969a9"
2309
2309
  }
2310
2310
  ]
2311
2311
  },
@@ -5,7 +5,7 @@ const path = require('path');
5
5
  const {
6
6
  green, red, yellow, cyan, bold, dim,
7
7
  info, success, warn, error: logError,
8
- fileExists, readJSON, readManifest,
8
+ fileExists, readJSON, readManifest, getTemplateFileNames,
9
9
  MANIFEST_FILE,
10
10
  } = require('../utils');
11
11
 
@@ -60,7 +60,7 @@ function checkFilesExist(manifest, targetDir) {
60
60
  return {
61
61
  passed: false,
62
62
  detail: `${missing.length} file(s) missing: ${missing.slice(0, 5).join(', ')}${missing.length > 5 ? '...' : ''}`,
63
- fix: `Run ${cyan('@dzhechkov/keysarium update')} to restore missing files.`,
63
+ fix: `Run ${cyan('npx @dzhechkov/keysarium update')} to restore missing files.`,
64
64
  };
65
65
  });
66
66
  }
@@ -76,7 +76,7 @@ function checkClaudeMd(targetDir) {
76
76
  return {
77
77
  passed: false,
78
78
  detail: 'CLAUDE.md not found',
79
- fix: `Run ${cyan('@dzhechkov/keysarium update')} or ${cyan('@dzhechkov/keysarium init --force')} to restore.`,
79
+ fix: `Run ${cyan('npx @dzhechkov/keysarium update')} or ${cyan('npx @dzhechkov/keysarium init --force')} to restore.`,
80
80
  };
81
81
  }
82
82
 
@@ -117,7 +117,7 @@ function checkSkillsComplete(targetDir) {
117
117
  return {
118
118
  passed: false,
119
119
  detail: '.claude/skills/ directory not found',
120
- fix: `Run ${cyan('@dzhechkov/keysarium update')} to restore skills.`,
120
+ fix: `Run ${cyan('npx @dzhechkov/keysarium update')} to restore skills.`,
121
121
  };
122
122
  }
123
123
 
@@ -165,141 +165,100 @@ function checkSkillsComplete(targetDir) {
165
165
  }
166
166
 
167
167
  /**
168
- * Check 4: All 11 command .md files are present.
168
+ * Shared body for the "every shipped <thing>.md is installed" checks.
169
+ *
170
+ * The expected list is DERIVED from the package's own templates/ tree, never hardcoded —
171
+ * a command or rule added to templates/ is named-checked on the next run with no edit here.
172
+ * (Regression this guards: the lists used to be frozen at a legacy 11-command / 7-rule
173
+ * subset, so `doctor` reported "All 11 command files present" on a 19-command install and
174
+ * newer files like feature-adr.md / dream.md / reward-learning.md were never named.)
169
175
  */
170
- function checkCommandsPresent(targetDir) {
171
- return check('Commands present', () => {
172
- const commandsDir = path.join(targetDir, '.claude', 'commands');
173
- const expectedCommands = [
174
- 'casarium.md',
175
- 'new-research.md',
176
- 'parallel-research.md',
177
- 'discovery.md',
178
- 'explore-case.md',
179
- 'research.md',
180
- 'cjm-prototype.md',
181
- 'solve.md',
182
- 'architecture-phase.md',
183
- 'presentation.md',
184
- 'harvest.md',
185
- ];
186
-
187
- if (!fileExists(commandsDir)) {
188
- return {
189
- passed: false,
190
- detail: '.claude/commands/ directory not found',
191
- fix: `Run ${cyan('@dzhechkov/keysarium update')} to restore commands.`,
192
- };
193
- }
176
+ function checkComponentFilesPresent(targetDir, opts) {
177
+ const { checkName, componentKey, dirParts, noun } = opts;
194
178
 
195
- const missing = [];
196
- for (const cmd of expectedCommands) {
197
- if (!fileExists(path.join(commandsDir, cmd))) {
198
- missing.push(cmd);
199
- }
200
- }
179
+ return check(checkName, () => {
180
+ const dir = path.join(targetDir, ...dirParts);
181
+ const relDir = dirParts.join('/') + '/';
182
+ const expected = getTemplateFileNames(componentKey);
201
183
 
202
- if (missing.length === 0) {
184
+ if (expected.length === 0) {
203
185
  return {
204
- passed: true,
205
- detail: `All ${expectedCommands.length} command files present`,
186
+ passed: false,
187
+ detail: `Cannot read the shipped ${noun} list from the package templates/ tree`,
188
+ fix: 'Reinstall the package: the templates/ directory is missing or unreadable.',
206
189
  };
207
190
  }
208
191
 
209
- return {
210
- passed: false,
211
- detail: `Missing ${missing.length} command(s): ${missing.join(', ')}`,
212
- fix: `Run ${cyan('@dzhechkov/keysarium update')} to restore missing commands.`,
213
- };
214
- });
215
- }
216
-
217
- /**
218
- * Check 5: All 7 rule .md files are present.
219
- */
220
- function checkRulesPresent(targetDir) {
221
- return check('Rules present', () => {
222
- const rulesDir = path.join(targetDir, '.claude', 'rules');
223
- const expectedRules = [
224
- 'agent-swarm.md',
225
- 'anti-patterns.md',
226
- 'checkpoint-protocol.md',
227
- 'domain-specific.md',
228
- 'file-conventions.md',
229
- 'modular-reuse.md',
230
- 'research-quality.md',
231
- ];
232
-
233
- if (!fileExists(rulesDir)) {
192
+ if (!fileExists(dir)) {
234
193
  return {
235
194
  passed: false,
236
- detail: '.claude/rules/ directory not found',
237
- fix: `Run ${cyan('@dzhechkov/keysarium update')} to restore rules.`,
195
+ detail: `${relDir} directory not found`,
196
+ fix: `Run ${cyan('npx @dzhechkov/keysarium update')} to restore ${noun}s.`,
238
197
  };
239
198
  }
240
199
 
241
- const missing = [];
242
- for (const rule of expectedRules) {
243
- if (!fileExists(path.join(rulesDir, rule))) {
244
- missing.push(rule);
245
- }
246
- }
200
+ const missing = expected.filter((name) => !fileExists(path.join(dir, name)));
247
201
 
248
202
  if (missing.length === 0) {
249
203
  return {
250
204
  passed: true,
251
- detail: `All ${expectedRules.length} rule files present`,
205
+ detail: `All ${expected.length} ${noun} files present`,
252
206
  };
253
207
  }
254
208
 
255
209
  return {
256
210
  passed: false,
257
- detail: `Missing ${missing.length} rule(s): ${missing.join(', ')}`,
258
- fix: `Run ${cyan('@dzhechkov/keysarium update')} to restore missing rules.`,
211
+ detail: `Missing ${missing.length}/${expected.length} ${noun}(s): ${missing.slice(0, 5).join(', ')}${missing.length > 5 ? '...' : ''}`,
212
+ fix: `Run ${cyan('npx @dzhechkov/keysarium update')} to restore missing ${noun}s.`,
259
213
  };
260
214
  });
261
215
  }
262
216
 
263
217
  /**
264
- * Check 6: All 5 agent .md files are present.
218
+ * Check 4: every shipped command .md file is present.
265
219
  */
266
- function checkAgentsPresent(targetDir) {
267
- return check('Agents present', () => {
268
- const agentsDir = path.join(targetDir, '.claude', 'agents');
269
-
270
- if (!fileExists(agentsDir)) {
271
- return {
272
- passed: false,
273
- detail: '.claude/agents/ directory not found',
274
- fix: `Run ${cyan('@dzhechkov/keysarium update')} to restore agents.`,
275
- };
276
- }
277
-
278
- let entries;
279
- try {
280
- entries = fs.readdirSync(agentsDir);
281
- } catch {
282
- return {
283
- passed: false,
284
- detail: 'Cannot read .claude/agents/ directory',
285
- fix: 'Check directory permissions.',
286
- };
287
- }
220
+ function checkCommandsPresent(targetDir) {
221
+ return checkComponentFilesPresent(targetDir, {
222
+ checkName: 'Commands present',
223
+ componentKey: 'commands',
224
+ dirParts: ['.claude', 'commands'],
225
+ noun: 'command',
226
+ });
227
+ }
288
228
 
289
- const mdFiles = entries.filter((e) => e.endsWith('.md'));
229
+ /**
230
+ * Check 5: every shipped rule .md file is present.
231
+ */
232
+ function checkRulesPresent(targetDir) {
233
+ return checkComponentFilesPresent(targetDir, {
234
+ checkName: 'Rules present',
235
+ componentKey: 'rules',
236
+ dirParts: ['.claude', 'rules'],
237
+ noun: 'rule',
238
+ });
239
+ }
290
240
 
291
- if (mdFiles.length >= 5) {
292
- return {
293
- passed: true,
294
- detail: `${mdFiles.length} agent file(s) present`,
295
- };
296
- }
241
+ /**
242
+ * Check 5b: every shipped governance shard is present.
243
+ */
244
+ function checkShardsPresent(targetDir) {
245
+ return checkComponentFilesPresent(targetDir, {
246
+ checkName: 'Shards present',
247
+ componentKey: 'shards',
248
+ dirParts: ['.claude', 'shards'],
249
+ noun: 'shard',
250
+ });
251
+ }
297
252
 
298
- return {
299
- passed: false,
300
- detail: `Only ${mdFiles.length}/5 agent files found`,
301
- fix: `Run ${cyan('@dzhechkov/keysarium update')} to restore missing agent templates.`,
302
- };
253
+ /**
254
+ * Check 6: every shipped agent template .md file is present.
255
+ */
256
+ function checkAgentsPresent(targetDir) {
257
+ return checkComponentFilesPresent(targetDir, {
258
+ checkName: 'Agents present',
259
+ componentKey: 'agents',
260
+ dirParts: ['.claude', 'agents'],
261
+ noun: 'agent',
303
262
  });
304
263
  }
305
264
 
@@ -314,7 +273,7 @@ function checkSettingsValid(targetDir) {
314
273
  return {
315
274
  passed: false,
316
275
  detail: '.claude/settings.json not found',
317
- fix: `Run ${cyan('@dzhechkov/keysarium update')} to restore settings.`,
276
+ fix: `Run ${cyan('npx @dzhechkov/keysarium update')} to restore settings.`,
318
277
  };
319
278
  }
320
279
 
@@ -390,7 +349,7 @@ async function run(options) {
390
349
  // ── a) Check manifest exists ───────────────────────────────────────────
391
350
  if (!fileExists(manifestPath)) {
392
351
  logError('Keysarium is not installed in this directory.');
393
- info(`Run ${cyan('@dzhechkov/keysarium init')} to install.`);
352
+ info(`Run ${cyan('npx @dzhechkov/keysarium init')} to install.`);
394
353
  process.exit(1);
395
354
  }
396
355
 
@@ -411,6 +370,7 @@ async function run(options) {
411
370
  checkSkillsComplete(targetDir),
412
371
  checkCommandsPresent(targetDir),
413
372
  checkRulesPresent(targetDir),
373
+ checkShardsPresent(targetDir),
414
374
  checkAgentsPresent(targetDir),
415
375
  checkSettingsValid(targetDir),
416
376
  checkResearchDir(targetDir),
@@ -90,7 +90,7 @@ async function run(options) {
90
90
  if (fileExists(manifestPath)) {
91
91
  if (!force) {
92
92
  warn('Keysarium is already installed in this directory.');
93
- info(`Run ${cyan('@dzhechkov/keysarium update')} to update, or use ${yellow('--force')} to overwrite.`);
93
+ info(`Run ${cyan('npx @dzhechkov/keysarium update')} to update, or use ${yellow('--force')} to overwrite.`);
94
94
  process.exit(1);
95
95
  }
96
96
  warn('Existing installation found — overwriting (--force).');
@@ -65,7 +65,7 @@ async function run(options) {
65
65
  // ── a) Read manifest ───────────────────────────────────────────────────
66
66
  if (!fileExists(manifestPath)) {
67
67
  warn('Keysarium is not installed in this directory.');
68
- info(`Run ${cyan('@dzhechkov/keysarium init')} to install.`);
68
+ info(`Run ${cyan('npx @dzhechkov/keysarium init')} to install.`);
69
69
  process.exit(1);
70
70
  }
71
71
 
@@ -187,7 +187,7 @@ async function run(options) {
187
187
  console.log(` ${dim('-')} ${skippedCount} file(s) already missing (skipped)`);
188
188
  }
189
189
  console.log('');
190
- info(`To reinstall, run: ${cyan('@dzhechkov/keysarium init')}`);
190
+ info(`To reinstall, run: ${cyan('npx @dzhechkov/keysarium init')}`);
191
191
  console.log('');
192
192
 
193
193
  process.exit(0);
@@ -30,7 +30,7 @@ async function run(options) {
30
30
  // ── a) Read existing manifest ───────────────────────────────────────────
31
31
  if (!fileExists(manifestPath)) {
32
32
  logError('Keysarium is not installed in this directory.');
33
- info(`Run ${cyan('@dzhechkov/keysarium init')} to install.`);
33
+ info(`Run ${cyan('npx @dzhechkov/keysarium init')} to install.`);
34
34
  process.exit(1);
35
35
  }
36
36
 
package/src/utils.js CHANGED
@@ -250,19 +250,105 @@ function getTemplatesDir() {
250
250
  // Component definitions
251
251
  // ===========================================================================
252
252
 
253
- const COMPONENTS = {
254
- skills: { src: '.claude/skills', label: 'Skills (8 skill packs)', group: 'core' },
255
- commands: { src: '.claude/commands', label: 'Commands (13 slash commands)', group: 'core' },
256
- rules: { src: '.claude/rules', label: 'Rules (10 auto-loaded rules)', group: 'core' },
257
- shards: { src: '.claude/shards', label: 'Shards (7 context shards)', group: 'core' },
258
- agents: { src: '.claude/agents', label: 'Agent templates (5 swarm configs)', group: 'core' },
259
- hooks: { src: '.claude/settings.json', label: 'Hooks configuration', group: 'core', isFile: true },
260
- lib: { src: 'lib', label: 'Library modules (4 modules)', group: 'extended' },
261
- docs: { src: 'docs', label: 'Documentation (12 guides)', group: 'docs' },
262
- claude_md: { src: 'CLAUDE.md', label: 'Master instructions', group: 'core', isFile: true },
263
- harvest: { src: 'TOOLKIT_HARVEST.md', label: 'Knowledge harvest tracker', group: 'core', isFile: true },
253
+ /**
254
+ * Count the units a component contributes, by inspecting the real templates/ tree.
255
+ *
256
+ * `countMode` decides what a "unit" is:
257
+ * 'dirs' — immediate subdirectories (one skill pack = one directory)
258
+ * 'files' — every file, recursively (lib/, docs/ ship nested files)
259
+ * 'md' — immediate *.md files (one command / rule / shard / agent = one file)
260
+ *
261
+ * Returns null when the count cannot be determined (missing dir, unreadable),
262
+ * so callers can degrade to a bare label instead of printing a wrong number.
263
+ */
264
+ function countTemplateUnits(comp) {
265
+ if (comp.isFile) return null;
266
+
267
+ const srcPath = path.join(getTemplatesDir(), comp.src);
268
+
269
+ try {
270
+ if (!fs.statSync(srcPath).isDirectory()) return null;
271
+ } catch {
272
+ return null;
273
+ }
274
+
275
+ try {
276
+ if (comp.countMode === 'files') {
277
+ return getRelativePaths(srcPath).length;
278
+ }
279
+
280
+ const entries = fs.readdirSync(srcPath, { withFileTypes: true });
281
+
282
+ if (comp.countMode === 'dirs') {
283
+ return entries.filter((e) => e.isDirectory()).length;
284
+ }
285
+
286
+ // default: 'md'
287
+ return entries.filter((e) => e.isFile() && e.name.endsWith('.md')).length;
288
+ } catch {
289
+ return null;
290
+ }
291
+ }
292
+
293
+ /**
294
+ * Component definitions.
295
+ *
296
+ * IMPORTANT: `label` is a COMPUTED getter — the parenthetical count is read from the
297
+ * shipped templates/ tree at access time, never hardcoded. Adding a command / rule /
298
+ * skill to templates/ changes what `init`, `init --dry-run` and `list` print, with no
299
+ * source edit. (Regression this guards: the labels used to be frozen strings reading
300
+ * "8 skill packs / 13 slash commands / 10 rules / 7 shards / 4 modules" long after the
301
+ * tree had grown past all five numbers.)
302
+ */
303
+ const COMPONENT_SPECS = {
304
+ skills: { src: '.claude/skills', name: 'Skills', unit: 'skill packs', countMode: 'dirs', group: 'core' },
305
+ commands: { src: '.claude/commands', name: 'Commands', unit: 'slash commands', countMode: 'md', group: 'core' },
306
+ rules: { src: '.claude/rules', name: 'Rules', unit: 'auto-loaded rules', countMode: 'md', group: 'core' },
307
+ shards: { src: '.claude/shards', name: 'Shards', unit: 'context shards', countMode: 'md', group: 'core' },
308
+ agents: { src: '.claude/agents', name: 'Agent templates', unit: 'swarm configs', countMode: 'md', group: 'core' },
309
+ hooks: { src: '.claude/settings.json', name: 'Hooks configuration', group: 'core', isFile: true },
310
+ lib: { src: 'lib', name: 'Library modules', unit: 'modules', countMode: 'files', group: 'extended' },
311
+ docs: { src: 'docs', name: 'Documentation', unit: 'guides', countMode: 'files', group: 'docs' },
312
+ claude_md: { src: 'CLAUDE.md', name: 'Master instructions', group: 'core', isFile: true },
313
+ harvest: { src: 'TOOLKIT_HARVEST.md', name: 'Knowledge harvest tracker', group: 'core', isFile: true },
264
314
  };
265
315
 
316
+ /**
317
+ * The shipped `*.md` filenames for a directory component, read from templates/.
318
+ *
319
+ * This is the single source of truth for "what SHOULD be installed" — `doctor` derives its
320
+ * named checks from it, so a new command/rule/shard is named-checked the moment it lands in
321
+ * templates/, with no second list to keep in sync. Returns [] when templates/ is unreadable.
322
+ */
323
+ function getTemplateFileNames(componentKey) {
324
+ const comp = COMPONENT_SPECS[componentKey];
325
+ if (!comp || comp.isFile) return [];
326
+
327
+ try {
328
+ return fs
329
+ .readdirSync(path.join(getTemplatesDir(), comp.src), { withFileTypes: true })
330
+ .filter((e) => e.isFile() && e.name.endsWith('.md'))
331
+ .map((e) => e.name)
332
+ .sort();
333
+ } catch {
334
+ return [];
335
+ }
336
+ }
337
+
338
+ const COMPONENTS = {};
339
+ for (const [key, spec] of Object.entries(COMPONENT_SPECS)) {
340
+ const comp = Object.assign({}, spec);
341
+ Object.defineProperty(comp, 'label', {
342
+ enumerable: true,
343
+ get() {
344
+ const n = countTemplateUnits(this);
345
+ if (n === null || !this.unit) return this.name;
346
+ return `${this.name} (${n} ${this.unit})`;
347
+ },
348
+ });
349
+ COMPONENTS[key] = comp;
350
+ }
351
+
266
352
  // ===========================================================================
267
353
  // Exports
268
354
  // ===========================================================================
@@ -306,4 +392,6 @@ module.exports = {
306
392
 
307
393
  // Components
308
394
  COMPONENTS,
395
+ countTemplateUnits,
396
+ getTemplateFileNames,
309
397
  };
@@ -511,7 +511,7 @@ Checkpoint ответы ──→ .keysarium/memory/{domain}/ ←── memory_
511
511
  │ ↓ │
512
512
  │ Если score стабильно ≥ 7.0 на 3+ кейсах: │
513
513
  │ ↓ │
514
- │ Contribute back → PR в product-keysarium-2026 │
514
+ │ Contribute back → PR в dz-harness-hub │
515
515
  └─────────────────────────────────────────────────────────┘
516
516
  ```
517
517
 
@@ -539,8 +539,8 @@ Checkpoint ответы ──→ .keysarium/memory/{domain}/ ←── memory_
539
539
 
540
540
  **3. Contribute back (если вы — мейнтейнер пакета):**
541
541
  ```bash
542
- # В репозитории product-keysarium-2026:
543
- cp <your-project>/.claude/skills/<name>/ packages/dz-keysarium/skills/<name>/
542
+ # В репозитории dz-harness-hub:
543
+ cp <your-project>/.claude/skills/<name>/ packages/@dzhechkov/keysarium/skills/<name>/
544
544
  # + обновить trust tier в .claude/rules/trust-tiers.md
545
545
  # + обновить SKILL.md frontmatter (bto_score, bto_date)
546
546
  # + commit + publish
@@ -568,7 +568,7 @@ BTO оптимизация модифицирует файлы скилла **in
568
568
 
569
569
  - **Не экспортируйте reward data для улучшения скилла** — reward data влияет на выбор подхода в runtime, а не на содержимое скилла
570
570
  - **Не копируйте `.keysarium/memory/` между проектами** — используйте `/brain-export` + `/brain-import`
571
- - **Не модифицируйте core протоколы** (`lib/*.md`, `packages/dz-keysarium-core/`) — если нужно изменить протокол, это архитектурное решение, не результат обучения
571
+ - **Не модифицируйте core протоколы** (`lib/*.md`, `packages/@dzhechkov/keysarium-core/`) — если нужно изменить протокол, это архитектурное решение, не результат обучения
572
572
 
573
573
  ---
574
574
 
@@ -549,7 +549,7 @@ Feature-adr -- это отдельный pipeline. Он **не использу
549
549
  ### 11.1 Структура пакета
550
550
 
551
551
  ```
552
- packages/dz-feature-adr/
552
+ packages/@dzhechkov/skills-feature-adr/
553
553
  ├── package.json ← @dzhechkov/skills-feature-adr v1.0.0
554
554
  ├── bin/
555
555
  │ └── cli.js ← Entry point (#!/usr/bin/env node)
@@ -80,8 +80,8 @@ npx @dzhechkov/skills-feature-adr init
80
80
  Для разработки и модификации:
81
81
 
82
82
  ```bash
83
- git clone https://github.com/dzhechko/product-keysarium-2026.git
84
- cd product-keysarium-2026/packages/dz-feature-adr
83
+ git clone https://github.com/djd1m/dz-harness-hub.git
84
+ cd dz-harness-hub/packages/@dzhechkov/skills-feature-adr
85
85
  npm link
86
86
  ```
87
87
 
@@ -139,7 +139,7 @@ npx @dzhechkov/keysarium brain merge brain1 brain2 # Слияние из нес
139
139
  {
140
140
  "version": "1.0",
141
141
  "exported_at": "2026-03-01T12:00:00Z",
142
- "source_project": "product-keysarium-2026",
142
+ "source_project": "dz-harness-hub",
143
143
  "patterns": [...],
144
144
  "bto_evaluations": [...],
145
145
  "harvest_data": [...],
@@ -130,12 +130,12 @@ pip install cryptography pynacl
130
130
 
131
131
  ```bash
132
132
  # Клонирование по HTTPS
133
- git clone https://github.com/<your-org>/product-keysarium-2026.git
134
- cd product-keysarium-2026
133
+ git clone https://github.com/djd1m/dz-harness-hub.git
134
+ cd dz-harness-hub
135
135
 
136
136
  # Либо по SSH (если настроены SSH-ключи)
137
- git clone git@github.com:<your-org>/product-keysarium-2026.git
138
- cd product-keysarium-2026
137
+ git clone git@github.com:djd1m/dz-harness-hub.git
138
+ cd dz-harness-hub
139
139
  ```
140
140
 
141
141
  ### 2.2. Проверка структуры
@@ -221,7 +221,7 @@ export CLAUDE_MODEL="claude-opus-4-20250514"
221
221
 
222
222
  ```bash
223
223
  # Перейдите в директорию проекта
224
- cd product-keysarium-2026
224
+ cd dz-harness-hub
225
225
 
226
226
  # Запустите Claude Code
227
227
  claude
@@ -238,7 +238,7 @@ claude
238
238
 
239
239
  ```bash
240
240
  # 1. Запустите Claude Code в директории проекта
241
- cd product-keysarium-2026
241
+ cd dz-harness-hub
242
242
  claude
243
243
 
244
244
  # 2. В интерфейсе Claude Code выполните:
@@ -324,7 +324,7 @@ rm -rf researches/test/
324
324
 
325
325
  ```bash
326
326
  # Запустите Claude Code
327
- cd product-keysarium-2026
327
+ cd dz-harness-hub
328
328
  claude
329
329
 
330
330
  # Запустите полный пайплайн
@@ -425,7 +425,7 @@ researches/bank_kc_automation/
425
425
  ### Пример файла .env
426
426
 
427
427
  ```bash
428
- # /home/user/product-keysarium-2026/.env
428
+ # /home/user/dz-harness-hub/.env
429
429
  # Этот файл НЕ коммитится в git
430
430
 
431
431
  ANTHROPIC_API_KEY=sk-ant-api03-ваш-ключ-здесь
@@ -487,7 +487,7 @@ npm config set https-proxy "http://corporate-proxy.example.com:8080"
487
487
  ### 8.1. Обновление из основного репозитория
488
488
 
489
489
  ```bash
490
- cd product-keysarium-2026
490
+ cd dz-harness-hub
491
491
 
492
492
  # Получить последние изменения
493
493
  git fetch origin
@@ -563,19 +563,19 @@ nano .claude/commands/casarium.md
563
563
 
564
564
  ```bash
565
565
  # === Пользователь 1 (Алиса) ===
566
- git clone https://github.com/<org>/product-keysarium-2026.git ~/alice-keysarium
566
+ git clone https://github.com/djd1m/dz-harness-hub.git ~/alice-keysarium
567
567
  cd ~/alice-keysarium
568
568
  export ANTHROPIC_API_KEY="sk-ant-alice-key"
569
569
  claude
570
570
 
571
571
  # === Пользователь 2 (Борис) ===
572
- git clone https://github.com/<org>/product-keysarium-2026.git ~/boris-keysarium
572
+ git clone https://github.com/djd1m/dz-harness-hub.git ~/boris-keysarium
573
573
  cd ~/boris-keysarium
574
574
  export ANTHROPIC_API_KEY="sk-ant-boris-key"
575
575
  claude
576
576
 
577
577
  # === Пользователь 3 (Вера) ===
578
- git clone https://github.com/<org>/product-keysarium-2026.git ~/vera-keysarium
578
+ git clone https://github.com/djd1m/dz-harness-hub.git ~/vera-keysarium
579
579
  cd ~/vera-keysarium
580
580
  export ANTHROPIC_API_KEY="sk-ant-vera-key"
581
581
  claude
@@ -660,7 +660,7 @@ curl -s https://api.anthropic.com/v1/messages \
660
660
  # Проблема: /casarium не распознаётся
661
661
  # Убедитесь, что вы в корневой директории проекта
662
662
  pwd
663
- # Должен быть: /path/to/product-keysarium-2026
663
+ # Должен быть: /path/to/dz-harness-hub
664
664
 
665
665
  # Проверьте наличие файлов команд
666
666
  ls .claude/commands/
@@ -760,8 +760,8 @@ nvm install 20
760
760
  npm install -g @anthropic-ai/claude-code
761
761
 
762
762
  # 5. Клонируйте репозиторий и работайте как в Linux
763
- git clone https://github.com/<org>/product-keysarium-2026.git
764
- cd product-keysarium-2026
763
+ git clone https://github.com/djd1m/dz-harness-hub.git
764
+ cd dz-harness-hub
765
765
  export ANTHROPIC_API_KEY="sk-ant-ваш-ключ"
766
766
  claude
767
767
  ```
@@ -773,7 +773,7 @@ claude
773
773
  ```bash
774
774
  # Полная установка за 5 минут:
775
775
  npm install -g @anthropic-ai/claude-code # 1. Установка CLI
776
- git clone <repo-url> && cd product-keysarium-2026 # 2. Клонирование
776
+ git clone <repo-url> && cd dz-harness-hub # 2. Клонирование
777
777
  export ANTHROPIC_API_KEY="sk-ant-ваш-ключ" # 3. API-ключ
778
778
  claude # 4. Запуск
779
779
  /new-research test # 5. Проверка
@@ -583,7 +583,7 @@ touch .claude/rules/my-rule.md
583
583
  "hooks": [
584
584
  {
585
585
  "type": "command",
586
- "command": "cd /home/user/product-keysarium-2026 && git add researches/"
586
+ "command": "cd /home/user/dz-harness-hub && git add researches/"
587
587
  }
588
588
  ]
589
589
  }
@@ -455,8 +455,8 @@ nvm install 20
455
455
  npm install -g @anthropic-ai/claude-code
456
456
 
457
457
  # 7. Клонирование и работа
458
- git clone https://github.com/<org>/product-keysarium-2026.git
459
- cd product-keysarium-2026
458
+ git clone https://github.com/djd1m/dz-harness-hub.git
459
+ cd dz-harness-hub
460
460
  export ANTHROPIC_API_KEY="sk-ant-ваш-ключ"
461
461
  claude
462
462
  ```
@@ -576,7 +576,7 @@ claude
576
576
  ### 9.2. Gitpod
577
577
 
578
578
  ```bash
579
- # 1. Откройте: https://gitpod.io/#https://github.com/<org>/product-keysarium-2026
579
+ # 1. Откройте: https://gitpod.io/#https://github.com/djd1m/dz-harness-hub
580
580
  # 2. В терминале Gitpod:
581
581
 
582
582
  npm install -g @anthropic-ai/claude-code
@@ -618,8 +618,8 @@ nvm use 20
618
618
  npm install -g @anthropic-ai/claude-code
619
619
 
620
620
  # Клонирование репозитория
621
- git clone https://github.com/<org>/product-keysarium-2026.git
622
- cd product-keysarium-2026
621
+ git clone https://github.com/djd1m/dz-harness-hub.git
622
+ cd dz-harness-hub
623
623
 
624
624
  # API-ключ (рекомендуется через AWS Secrets Manager)
625
625
  export ANTHROPIC_API_KEY="sk-ant-ваш-ключ"
@@ -962,6 +962,6 @@ jobs:
962
962
  ### Быстрая проверка (1 минута)
963
963
 
964
964
  ```bash
965
- cd product-keysarium-2026
965
+ cd dz-harness-hub
966
966
  node --version && git --version && claude --version && echo "ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:+SET}" && echo "Всё готово!"
967
967
  ```
@@ -136,8 +136,8 @@ npm install @dzhechkov/skills-feature-adr @dzhechkov/keysarium-core
136
136
  Если вам нужна последняя версия из исходников:
137
137
 
138
138
  ```bash
139
- git clone https://github.com/dzhechko/product-keysarium-2026.git
140
- cd product-keysarium-2026/packages/dz-keysarium-core/
139
+ git clone https://github.com/djd1m/dz-harness-hub.git
140
+ cd dz-harness-hub/packages/@dzhechkov/keysarium-core/
141
141
 
142
142
  # Проверка содержимого
143
143
  ls -la
@@ -408,7 +408,7 @@ find node_modules/@dzhechkov/keysarium-core -name "*.md" | wc -l
408
408
  # Ожидаемый результат: 19
409
409
 
410
410
  # Или при установке из git:
411
- find packages/dz-keysarium-core -name "*.md" | wc -l
411
+ find packages/@dzhechkov/keysarium-core -name "*.md" | wc -l
412
412
  # Ожидаемый результат: 19
413
413
  ```
414
414
 
@@ -569,12 +569,12 @@ cat .keysarium/memory/config.json | grep '"version"'
569
569
  ### 7.4. Обновление из Git
570
570
 
571
571
  ```bash
572
- cd product-keysarium-2026
572
+ cd dz-harness-hub
573
573
  git fetch origin
574
574
  git pull origin main
575
575
 
576
576
  # Проверка обновлений в core
577
- git log --oneline -5 -- packages/dz-keysarium-core/
577
+ git log --oneline -5 -- packages/@dzhechkov/keysarium-core/
578
578
  ```
579
579
 
580
580
  ---
@@ -31,12 +31,12 @@
31
31
 
32
32
  ```bash
33
33
  # Перечислить все файлы core-пакета
34
- ls packages/dz-keysarium-core/governance/
35
- ls packages/dz-keysarium-core/memory/
36
- ls packages/dz-keysarium-core/orchestration/
37
- ls packages/dz-keysarium-core/verification/
38
- ls packages/dz-keysarium-core/trust-tiers/
39
- ls packages/dz-keysarium-core/platform/
34
+ ls packages/@dzhechkov/keysarium-core/governance/
35
+ ls packages/@dzhechkov/keysarium-core/memory/
36
+ ls packages/@dzhechkov/keysarium-core/orchestration/
37
+ ls packages/@dzhechkov/keysarium-core/verification/
38
+ ls packages/@dzhechkov/keysarium-core/trust-tiers/
39
+ ls packages/@dzhechkov/keysarium-core/platform/
40
40
  ```
41
41
 
42
42
  Ожидаемые файлы по модулям:
@@ -15,7 +15,7 @@ Create `.opencode/config.yaml` with the following structure:
15
15
  ```yaml
16
16
  # OpenCode configuration for {project name}
17
17
  # Generated from .claude/ directory by /init-platform
18
- # Source: product-keysarium-2026
18
+ # Source: dz-harness-hub
19
19
 
20
20
  project:
21
21
  name: "{project name from CLAUDE.md}"
@@ -99,7 +99,7 @@ Write `{OUTPUT_DIR}/output/brain-export-{YYYYMMDD}.json`:
99
99
  "version": "1.0",
100
100
  "format": "keysarium-brain",
101
101
  "exported_at": "{ISO8601 timestamp}",
102
- "source_project": "product-keysarium-2026",
102
+ "source_project": "dz-harness-hub",
103
103
  "worker_id": "{WORKER_ID}",
104
104
  "skills": [
105
105
  {