@dzhechkov/p-replicator 1.6.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/.dz-manifest.json +92 -32
  2. package/CHANGELOG.md +176 -0
  3. package/README.md +106 -4
  4. package/package.json +4 -4
  5. package/sbom.json +181 -31
  6. package/src/commands/doctor.js +43 -31
  7. package/src/commands/verify.js +27 -2
  8. package/src/utils.js +27 -0
  9. package/templates/.claude/commands/myinsights.md +22 -5
  10. package/templates/.claude/commands/replicate.md +57 -1
  11. package/templates/.claude/hooks/check-docs-complete.cjs +202 -0
  12. package/templates/.claude/hooks/check-growth-trace.cjs +191 -0
  13. package/templates/.claude/hooks/check-ports.cjs +36 -4
  14. package/templates/.claude/hooks/statusline.cjs +16 -5
  15. package/templates/.claude/rules/replicate-pipeline.md +14 -4
  16. package/templates/.claude/rules/skill-interface-protocol.md +9 -0
  17. package/templates/.claude/skills/brutal-honesty-review/scripts/assess-code.sh +40 -7
  18. package/templates/.claude/skills/brutal-honesty-review/scripts/assess-tests.sh +38 -11
  19. package/templates/.claude/skills/cc-toolkit-generator-enhanced/modules/03-generate-p0.md +6 -4
  20. package/templates/.claude/skills/cc-toolkit-generator-enhanced/modules/08-skill-composition.md +2 -2
  21. package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/ddd-hooks-commands.md +40 -4
  22. package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/feature-lifecycle.md +2 -2
  23. package/templates/.claude/skills/requirements-validator/SKILL.md +52 -0
  24. package/templates/.claude/skills/reverse-engineering-unicorn/modules/01-intelligence.md +4 -4
  25. package/templates/.claude/skills/reverse-engineering-unicorn/modules/02-product-customers.md +2 -2
  26. package/templates/.claude/skills/reverse-engineering-unicorn/modules/025-cjm-prototype.md +9 -1
  27. package/templates/.claude/skills/reverse-engineering-unicorn/modules/03-market-competition.md +3 -3
  28. package/templates/.claude/skills/reverse-engineering-unicorn/modules/04-business-finance.md +3 -3
  29. package/templates/.claude/skills/reverse-engineering-unicorn/modules/05-growth-engine.md +132 -12
  30. package/templates/.claude/skills/reverse-engineering-unicorn/modules/06-playbook-synthesis.md +1 -1
  31. package/templates/.claude/skills/sparc-prd-mini/SKILL.md +9 -9
  32. package/tests/snapshot/baseline.json +25 -23
  33. package/tests/unit/absence-is-not-emptiness.test.js +255 -0
  34. package/tests/unit/assess-scripts.test.js +150 -0
  35. package/tests/unit/check-docs-complete.test.js +292 -0
  36. package/tests/unit/check-growth-trace.test.js +188 -0
  37. package/tests/unit/check-ports.test.js +99 -0
  38. package/tests/unit/generated-guard-templates.test.js +134 -0
  39. package/tests/unit/growth-axes-and-compliance.test.js +169 -0
  40. package/tests/unit/growth-gate-conditional.test.js +122 -0
  41. package/tests/unit/growth-module-b2b-gate.test.js +20 -2
  42. package/tests/unit/growth-requirements-bridge.test.js +127 -0
  43. package/tests/unit/guard-forms.test.js +302 -0
  44. package/tests/unit/insights-docs-tell-the-truth.test.js +84 -0
  45. package/tests/unit/module-copy-identity.test.js +106 -0
  46. package/tests/unit/shipped-suite-context.test.js +142 -0
  47. package/tests/unit/skill-paths-prebaked.test.js +174 -0
  48. package/tests/unit/sync-templates-guard.test.js +31 -1
package/.dz-manifest.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "files": [
6
6
  {
7
7
  "path": "CHANGELOG.md",
8
- "sha256": "837815d5116c5e117c1249a414b7ae81927969d74a3b44685e8dc8a8dd3a6d8e"
8
+ "sha256": "63092c71ea7153d562c26db68f2774f233b7c5d37e78e4e3cdfaa1546c42668d"
9
9
  },
10
10
  {
11
11
  "path": "KNOWN_LIMITATIONS.md",
@@ -21,7 +21,7 @@
21
21
  },
22
22
  {
23
23
  "path": "README.md",
24
- "sha256": "6b863dbfd298c1788097d53a87425030a341684f67bbb5a81a90c192c0c90d22"
24
+ "sha256": "d65437974585200f0db8ef082dfbd0519f61cc29cadf3224732ae7a459a20186"
25
25
  },
26
26
  {
27
27
  "path": "README/eng/01_quickstart.md",
@@ -109,7 +109,7 @@
109
109
  },
110
110
  {
111
111
  "path": "package.json",
112
- "sha256": "8ae12d621050c3a4f992bc853b4ec961af5fbf32bf9c3fee639a182b546992de"
112
+ "sha256": "0cc3dc1f4a07a4e5f3ac3f3a1981dc1766302fbbe3ed5818b04c806d4c476059"
113
113
  },
114
114
  {
115
115
  "path": "src/cli.js",
@@ -117,7 +117,7 @@
117
117
  },
118
118
  {
119
119
  "path": "src/commands/doctor.js",
120
- "sha256": "0cbd703649882cca4e484bf696b384291780ba760b7895a3ed2bdc1005ef2e4c"
120
+ "sha256": "566a8cf554420fbbb734705de283f04d40048ee3eb38f1877304d2cc5e56a47f"
121
121
  },
122
122
  {
123
123
  "path": "src/commands/init.js",
@@ -137,11 +137,11 @@
137
137
  },
138
138
  {
139
139
  "path": "src/commands/verify.js",
140
- "sha256": "e6d56e7471825b1bacd0e9dbc85d6c9428547c08ea604c348247e258a607eca0"
140
+ "sha256": "18f5442af9b3a549dfb284cd0d8aef83ba973bd34a3a04e7c656262baebb0e57"
141
141
  },
142
142
  {
143
143
  "path": "src/utils.js",
144
- "sha256": "ec9d1695f4b0ef2ce0b3ee6908e90900ebac0941a32ea48df673f6cd20fc1387"
144
+ "sha256": "43f6abbf447478bae423bce742cfbdace1725946621925eb2ffb3a3ab5b3379e"
145
145
  },
146
146
  {
147
147
  "path": "templates/.claude/agents/doc-validator.md",
@@ -181,7 +181,7 @@
181
181
  },
182
182
  {
183
183
  "path": "templates/.claude/commands/myinsights.md",
184
- "sha256": "2e73e822384f976383d9c3313940888b9853f1781d2c39a2fb89825f221149dc"
184
+ "sha256": "93258a3340f99a0f14b374746ae2934b01d7cefe06d575434868eb98da2d854a"
185
185
  },
186
186
  {
187
187
  "path": "templates/.claude/commands/next.md",
@@ -193,7 +193,7 @@
193
193
  },
194
194
  {
195
195
  "path": "templates/.claude/commands/replicate.md",
196
- "sha256": "13f5e2ebe109f33b63cbcd75e3cf1b94224ab066aba1b0cb10cf34f668144a8a"
196
+ "sha256": "8862d0dc117815b1c3fc7f6e929996e2458783f1ac443eb70bc2a7ebe63a67c3"
197
197
  },
198
198
  {
199
199
  "path": "templates/.claude/commands/run.md",
@@ -215,9 +215,17 @@
215
215
  "path": "templates/.claude/hooks/autocommit-roadmap.cjs",
216
216
  "sha256": "f4dcc9ffd9a3aed91dd56e011e699fcf8af903cc81594e4ab1ef61e5432a36ad"
217
217
  },
218
+ {
219
+ "path": "templates/.claude/hooks/check-docs-complete.cjs",
220
+ "sha256": "27c05c2adcedc806e395b30b455243193a4fbd0968ce96e415679e1f78db951a"
221
+ },
222
+ {
223
+ "path": "templates/.claude/hooks/check-growth-trace.cjs",
224
+ "sha256": "91994fc109c8440306c9dd3d5eea176c533eb0818fcdb09bac2b309397d9908a"
225
+ },
218
226
  {
219
227
  "path": "templates/.claude/hooks/check-ports.cjs",
220
- "sha256": "e5f2d2bd8899df27c2dfedf76128467becae1868210eb8525a1bad2869a8c78f"
228
+ "sha256": "1813aa60e4d15c5f6ce54a9b3471c3772efe60c332316183c7ad8f5b619f2169"
221
229
  },
222
230
  {
223
231
  "path": "templates/.claude/hooks/session-insights.cjs",
@@ -229,7 +237,7 @@
229
237
  },
230
238
  {
231
239
  "path": "templates/.claude/hooks/statusline.cjs",
232
- "sha256": "1eca683baf67a17874dc5db6dfe38eb11944f550c66f46330bce0f794732245f"
240
+ "sha256": "465190ab21610357094fd6eba188ba9f7086dc5a933568f40a7f7c715ccd6745"
233
241
  },
234
242
  {
235
243
  "path": "templates/.claude/rules/docker-ports.md",
@@ -249,11 +257,11 @@
249
257
  },
250
258
  {
251
259
  "path": "templates/.claude/rules/replicate-pipeline.md",
252
- "sha256": "b65e802d32a1e50bdfcd0cfc79c78e9234eac48a94f0cd1f5647cf4fea6c0162"
260
+ "sha256": "99289f711c34cfddddbef5328b74749fc63d1f74636c6a4e4d61caa202fad05d"
253
261
  },
254
262
  {
255
263
  "path": "templates/.claude/rules/skill-interface-protocol.md",
256
- "sha256": "fe18fcb9217002572f462f3a7f38de22cdd7ba0dd4e906fdcd0c0e8cfed9f2aa"
264
+ "sha256": "7669309b0ae4330bc6cf6b26bd9cfc01d7b99a8e70c1f056a52574430db9378e"
257
265
  },
258
266
  {
259
267
  "path": "templates/.claude/settings.json",
@@ -285,11 +293,11 @@
285
293
  },
286
294
  {
287
295
  "path": "templates/.claude/skills/brutal-honesty-review/scripts/assess-code.sh",
288
- "sha256": "7e9722c1533f1b7d1a9d11a7add13ac12a2a5f0acfc0ed2cdede2bcf0dab788f"
296
+ "sha256": "2b10d2972b1379adde9a68ddf8bcdb399b7d65075e458a54523ffd8d99ddc746"
289
297
  },
290
298
  {
291
299
  "path": "templates/.claude/skills/brutal-honesty-review/scripts/assess-tests.sh",
292
- "sha256": "8c6444bdb5ce97e49223cdaa6b1c58ac8fcec710cd6ee8d56de9bc677379bd88"
300
+ "sha256": "d33e760a0739e9291f6087adf189f01eb7c4a1136d9128390dd6e3ad8eadda6f"
293
301
  },
294
302
  {
295
303
  "path": "templates/.claude/skills/brutal-honesty-review/scripts/validate-config.json",
@@ -309,7 +317,7 @@
309
317
  },
310
318
  {
311
319
  "path": "templates/.claude/skills/cc-toolkit-generator-enhanced/modules/03-generate-p0.md",
312
- "sha256": "b093a5d66663e2dfd6415afef7c7444409f03379f857001b811685ded410038b"
320
+ "sha256": "e1ae2dd69db0d68fe276c1d0e57bd19921bf98fe91fe054716add76338442891"
313
321
  },
314
322
  {
315
323
  "path": "templates/.claude/skills/cc-toolkit-generator-enhanced/modules/04-generate-p1.md",
@@ -329,7 +337,7 @@
329
337
  },
330
338
  {
331
339
  "path": "templates/.claude/skills/cc-toolkit-generator-enhanced/modules/08-skill-composition.md",
332
- "sha256": "1deedef5ee5c7ef1f7fd8a8fb84732d82f872724fc96697bf530c6dbd6d0850a"
340
+ "sha256": "683b254e400414b432827bedf4153a122322125eff053da4ccfeb3a62bab2a77"
333
341
  },
334
342
  {
335
343
  "path": "templates/.claude/skills/cc-toolkit-generator-enhanced/modules/09-cross-project-learning.md",
@@ -369,7 +377,7 @@
369
377
  },
370
378
  {
371
379
  "path": "templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/ddd-hooks-commands.md",
372
- "sha256": "d70a0c4977d322602c35c53bf04880177b5dd8f0de2b339d68a0f55993903745"
380
+ "sha256": "8398f2493434db101476300e514a34bf8124a51eb732cf81923f9a5b5a3d5db4"
373
381
  },
374
382
  {
375
383
  "path": "templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/ddd-skills.md",
@@ -385,7 +393,7 @@
385
393
  },
386
394
  {
387
395
  "path": "templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/feature-lifecycle.md",
388
- "sha256": "c537b47e7a4ff2d692767f4aac130e2ae9b1923782106750218696e87f515feb"
396
+ "sha256": "7b01140a304c060fb085ded8711189ac3f259f999df1cb42380d0274191f1b25"
389
397
  },
390
398
  {
391
399
  "path": "templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/feature-suggestions.md",
@@ -597,7 +605,7 @@
597
605
  },
598
606
  {
599
607
  "path": "templates/.claude/skills/requirements-validator/SKILL.md",
600
- "sha256": "e50c5269ad181966a81c14ef596946cea67cbf4b8f8f648c90fd66ecad948933"
608
+ "sha256": "d2b8e71f4053c642f455a0f245ae18471ab25b7a21e0658f0fe410912a47bf8b"
601
609
  },
602
610
  {
603
611
  "path": "templates/.claude/skills/requirements-validator/assets/templates/bdd-feature-template.feature",
@@ -633,31 +641,31 @@
633
641
  },
634
642
  {
635
643
  "path": "templates/.claude/skills/reverse-engineering-unicorn/modules/01-intelligence.md",
636
- "sha256": "4af16873637c26baba0d30728748108c79f5b96765de08d54fc65fe1008f4280"
644
+ "sha256": "0770bd63a6a1eeb34e873cb101e2ba0cf88d507e9bc03242046eaa837b9f587c"
637
645
  },
638
646
  {
639
647
  "path": "templates/.claude/skills/reverse-engineering-unicorn/modules/02-product-customers.md",
640
- "sha256": "b614e43359ffe88c07d6f45abdb2d3c523fc7779052757ed95bbd31b5ce9408d"
648
+ "sha256": "499bbded50ddd368a62301083e828a42bd0223aa58322b6a952f00086b462972"
641
649
  },
642
650
  {
643
651
  "path": "templates/.claude/skills/reverse-engineering-unicorn/modules/025-cjm-prototype.md",
644
- "sha256": "0ca044b769a70bcc89bdb5af496471b59104428770d49735e8255fc22da48207"
652
+ "sha256": "11e2e101c99d42306ac1d0931475c5a8899e929514e41a393b6173e03856cfc3"
645
653
  },
646
654
  {
647
655
  "path": "templates/.claude/skills/reverse-engineering-unicorn/modules/03-market-competition.md",
648
- "sha256": "6c5c802ee558b5e13c80eb05e64a8197bad34192416df81ea32f3b0e1b04b259"
656
+ "sha256": "7c2e7164463371239d92f28153777e40ee0d6dad293d59886a4cf5b306fa3627"
649
657
  },
650
658
  {
651
659
  "path": "templates/.claude/skills/reverse-engineering-unicorn/modules/04-business-finance.md",
652
- "sha256": "19d25e9fe9a732d963f2359748ef2c7793bd6282183f84b938351feccea88075"
660
+ "sha256": "dd08226391d498a82f111f0da665ea7cea1fa8a97683fab11070f879142727f7"
653
661
  },
654
662
  {
655
663
  "path": "templates/.claude/skills/reverse-engineering-unicorn/modules/05-growth-engine.md",
656
- "sha256": "98e8577aa5a5472574ac9bac590b76a4a3d16f99bc67ebec2b09b604c7c1faab"
664
+ "sha256": "84658390dc7beb590f70164b391ace915e42926660bc1015e4be300752b74a37"
657
665
  },
658
666
  {
659
667
  "path": "templates/.claude/skills/reverse-engineering-unicorn/modules/06-playbook-synthesis.md",
660
- "sha256": "f72841226f929cea2c3a414f74b3f1e933e3952f1b55e6eea38081dd804a87cd"
668
+ "sha256": "3cd76a218aa9f94e0ff8ff2fc257647540674f68df3883f0de5e76e1cea26d9b"
661
669
  },
662
670
  {
663
671
  "path": "templates/.claude/skills/reverse-engineering-unicorn/references/blue-ocean-canvas.md",
@@ -673,7 +681,7 @@
673
681
  },
674
682
  {
675
683
  "path": "templates/.claude/skills/sparc-prd-mini/SKILL.md",
676
- "sha256": "50e829635b828b444487e4b04219518a595dbd4b94f91b66fb03ddf4a7b21712"
684
+ "sha256": "71f97e269e8b1807550a4ef91b2f0ac4dd892a074781504890d33db8f32685d2"
677
685
  },
678
686
  {
679
687
  "path": "templates/.claude/skills/sparc-prd-mini/references/sparc-methodology.md",
@@ -693,7 +701,7 @@
693
701
  },
694
702
  {
695
703
  "path": "tests/snapshot/baseline.json",
696
- "sha256": "cb6c08b5c5fb7ea837fb6c054d1094f8c4878a88ac866ec67a3862f8c7fb2a07"
704
+ "sha256": "333e554a3840fd02e0e230efe4852bb490beded41f6024c65849060780eebdee"
697
705
  },
698
706
  {
699
707
  "path": "tests/snapshot/templates.test.js",
@@ -703,6 +711,10 @@
703
711
  "path": "tests/snapshot/update-baseline.js",
704
712
  "sha256": "1f50d0c2ec86f1c865ee6ed8c59725e57c397d487b7a24baf051dc5d4b294459"
705
713
  },
714
+ {
715
+ "path": "tests/unit/absence-is-not-emptiness.test.js",
716
+ "sha256": "6c7c1c8086461eac16415ebcccea081d3169212826f23e835cf109d741dd6ac3"
717
+ },
706
718
  {
707
719
  "path": "tests/unit/adr-decision-coverage.test.js",
708
720
  "sha256": "34f9bf0700b4c45fb905f606567f2a6d3ba152f8f1db29f479963667b298ede4"
@@ -711,13 +723,25 @@
711
723
  "path": "tests/unit/adr-scanner-contract.test.js",
712
724
  "sha256": "08c8b7d862ae0ddcd72116462458b71d3fe29b09cbaf08fa6a824e22ad6985c8"
713
725
  },
726
+ {
727
+ "path": "tests/unit/assess-scripts.test.js",
728
+ "sha256": "b16b015dc28cd5b1d85a8ec0ae54768af1787d2d26e9e5b495c8f791aaa2043f"
729
+ },
714
730
  {
715
731
  "path": "tests/unit/autocommit-deletion.test.js",
716
732
  "sha256": "87ebe50e164cfa3aeda3d4f04e6b6aa98ab8af44711cbeb94252d770c07ad8ad"
717
733
  },
734
+ {
735
+ "path": "tests/unit/check-docs-complete.test.js",
736
+ "sha256": "2c6f16a61f0876f637ac492d5fb2af1ea35ad00161fd1468446ea0d08cd97f4b"
737
+ },
738
+ {
739
+ "path": "tests/unit/check-growth-trace.test.js",
740
+ "sha256": "733d87fe8eca897fcfc5cad9342d4db2085270c21d0d8866d817a9b9418511c2"
741
+ },
718
742
  {
719
743
  "path": "tests/unit/check-ports.test.js",
720
- "sha256": "72d9eeaa8c47d83fba867722f4b8efc8d079e2d9649e1a20abff46571c2f6f15"
744
+ "sha256": "d8e2e1f22dadb40fbb03ffbd25ed945fa85fe7b5d49fe0f3597cfc3facc2c118"
721
745
  },
722
746
  {
723
747
  "path": "tests/unit/db-port-rule.test.js",
@@ -731,9 +755,29 @@
731
755
  "path": "tests/unit/external-dependency-check.test.js",
732
756
  "sha256": "d85109f8e86648d61fc17d0128e9d4881950a70641c246e667d7e54ffc1f0273"
733
757
  },
758
+ {
759
+ "path": "tests/unit/generated-guard-templates.test.js",
760
+ "sha256": "928ddb625cc1bbc7dd145992c9a37373da93ae314f39391c67ad7ed064e2c940"
761
+ },
762
+ {
763
+ "path": "tests/unit/growth-axes-and-compliance.test.js",
764
+ "sha256": "88e4d8c7ae278c46dfce4d89fcbd1dee49c0b545ebc07e459306bfdc70567048"
765
+ },
766
+ {
767
+ "path": "tests/unit/growth-gate-conditional.test.js",
768
+ "sha256": "bff4149b339294ac822d1a8fe732d21560ea8d70bcb80b10f3491105a4a9b75c"
769
+ },
734
770
  {
735
771
  "path": "tests/unit/growth-module-b2b-gate.test.js",
736
- "sha256": "7bb5b39a637becbea9813744a5d649b19c6bd8a9b18045c971bcfd842852ea84"
772
+ "sha256": "05ce46882984905ba41983c34b8d983e9fa9bf5eb4b1af988841a46e78142098"
773
+ },
774
+ {
775
+ "path": "tests/unit/growth-requirements-bridge.test.js",
776
+ "sha256": "2f560a16f1757df46d5d52e5d29a7aad3e4c327cd07ea9cc69240c7dd1c93f2a"
777
+ },
778
+ {
779
+ "path": "tests/unit/guard-forms.test.js",
780
+ "sha256": "61a219a7748e0b56bc4207eee107815a4b4111fbebd41b68f6d390130506cd42"
737
781
  },
738
782
  {
739
783
  "path": "tests/unit/hooks-project-anchored.test.js",
@@ -743,6 +787,14 @@
743
787
  "path": "tests/unit/hooks-report-failures.test.js",
744
788
  "sha256": "35d3fca74c22e1bc88b6fbb25f172b66a21561a947e2b6e90a366d5a854376b8"
745
789
  },
790
+ {
791
+ "path": "tests/unit/insights-docs-tell-the-truth.test.js",
792
+ "sha256": "d73ebce2f729911cad452897883b3d55d69e19613c7c1fc7c9bcfa3b5569fc1b"
793
+ },
794
+ {
795
+ "path": "tests/unit/module-copy-identity.test.js",
796
+ "sha256": "69a63e511cef4d6cb7ea5669b61746f2fc8af22273bc76539cb304bd27e49de9"
797
+ },
746
798
  {
747
799
  "path": "tests/unit/pipeline-file-ownership.test.js",
748
800
  "sha256": "dd5b6e2ddb3078fb5ccafed6c55a6079bbd20d73fd5c2dacbb988263ceeda806"
@@ -751,6 +803,14 @@
751
803
  "path": "tests/unit/roadmap-one-schema.test.js",
752
804
  "sha256": "3e7ac9dbc9796a791fc95c43b4346c6da2455f3c0ace45bbc440502c5957d3dc"
753
805
  },
806
+ {
807
+ "path": "tests/unit/shipped-suite-context.test.js",
808
+ "sha256": "fd6128505f3272aa7349d21d18a2494eaa8e5e2397ee85047f9828471c99d721"
809
+ },
810
+ {
811
+ "path": "tests/unit/skill-paths-prebaked.test.js",
812
+ "sha256": "efb13ca5d2fa68f3186e5af4142509d260d7cf63c902f59e915110bb550887df"
813
+ },
754
814
  {
755
815
  "path": "tests/unit/sparc-reconciliation.test.js",
756
816
  "sha256": "4020c623cb351d42b3b184d23194d48cf04e4a3ce8d95ff96c4261ade75632c9"
@@ -769,7 +829,7 @@
769
829
  },
770
830
  {
771
831
  "path": "tests/unit/sync-templates-guard.test.js",
772
- "sha256": "75e8e0d0d2dfc16f14c586d399b5c9c075cc3a0494c558fe39d8528516185cfe"
832
+ "sha256": "e4fc7687dcf37d17bf2a059d3248c8c00526c104f6a0f6e104fa9ca6e00039ae"
773
833
  },
774
834
  {
775
835
  "path": "tests/unit/utils.test.js",
@@ -781,5 +841,5 @@
781
841
  }
782
842
  ]
783
843
  },
784
- "signature": "2lO/3LnJ6PCrXJW8Hm4PO2SRG0YNFAU8vsA+FjHBfXgNYU91TalTT7tFpIo2uG8wx9qpZWDYfWjGNsiQhvqiBQ=="
844
+ "signature": "ZKPYreIIzuZR6WoZ0J8IBCnwHmSC51tyVihIl3MfZKhVry+nKGokIl0bLu6eKxzGSI0rfDwKfBUPZKHv0iMbDg=="
785
845
  }
package/CHANGELOG.md CHANGED
@@ -5,6 +5,142 @@ All notable changes to `@dzhechkov/p-replicator` are documented here.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.10.0] - 2026-08-27
9
+
10
+ **Every guard in this package can now be shown to fail — and three that could not, now can.**
11
+ MINOR: no pre-shipped contract change, but the exit-code semantics of two shipped scripts changed.
12
+
13
+ ### Fixed — guards that could not refuse
14
+
15
+ - **`check-ports.cjs` resolved one path in two frames of reference.** A relative argument was
16
+ re-applied by docker, so `check-ports.cjs projects/01` reported
17
+ `…/projects/01/projects/01/docker-compose.yml`. Worse, it fired BEFORE docker parsed the file and
18
+ so MASKED real config errors, and the cure it printed was the invocation that SUCCEEDS. Two edits:
19
+ absolutise at the boundary, and delete the `cwd:` override — measured to buy nothing on Compose v2+.
20
+ - **The generated aggregate guard was false-green on 3 of 4 inputs**, and the generator writes it
21
+ into every bootstrapped project. Four declarations minified onto ONE line reported OK; so did a
22
+ missing file; so did an **unsubstituted `{{…}}` placeholder — forever**. Now 0/1/2, counting
23
+ occurrences rather than lines.
24
+ - **`assess-code.sh` and `assess-tests.sh` printed red verdicts and exited 0**, while a nonexistent
25
+ path exited 1 — blindness outranked findings. Now 1 on findings, 2 on could-not-check. Detection
26
+ unchanged.
27
+ - **`verify` and `doctor` were blind to an EMPTY file.** 31 artifacts truncated to zero bytes and
28
+ both reported clean; a zero-byte `settings.json` — no hooks wired at all — got a checkmark.
29
+ Three states now, reported as three.
30
+
31
+ ### Added
32
+
33
+ - **`dz mutation-gate` enrolment** — `test/mutation-registry.json`, six entries, every mutation
34
+ demonstrated red by hand before the registry was trusted. Gate: 6/6 PROVEN.
35
+ - **`tests/unit/guard-forms.test.js`** — a layer-1 refusal of five shell shapes that make a guard
36
+ unable to fail. It caught the aggregate guard, and later confirmed its own fix: inventory 2 → 0.
37
+ - **`check-docs-complete.cjs`** at the Phase 1→2 boundary, with a confidence split: `{{…}}` and
38
+ TODO/TBD/XXX block; bracketed prose is NAMED but never blocks, because it cannot be told from a
39
+ mermaid label — and blocking on it refused every project the bundled skill generates.
40
+
41
+ ### Changed — honesty in shipped documents
42
+
43
+ - `myinsights.md` no longer claims insights are injected "when their tags match the current task".
44
+ The hook runs at `SessionStart`, before anything has been said, so there is no task to match
45
+ against; it injects the three most recent entries. The reason and the consequence are both stated,
46
+ and a test pins the document to the code.
47
+ - The insights carrier now reports THREE states — not started / zero entries / N recorded — in
48
+ `doctor`, `verify` and the statusline. Absent and empty rendering identically is what let 27
49
+ recorded insights become 0 across four real projects with every surface reporting fine.
50
+
51
+ ### Verified differently this time
52
+
53
+ The shipped suite now runs from a TARBALL, not only locally: **288/296 exit 1 → 311/311 exit 0**.
54
+ Two tests are monorepo-only by construction and skip loudly outside it — permitted only because a
55
+ guard asserts they RUN inside, so the skip is provably not taken where it matters.
56
+
57
+ ## [1.9.0] - 2026-08-27
58
+
59
+ **MINOR — hooks 8 → 9** (`check-docs-complete`). After `update`, `doctor` and `verify` expect the new count.
60
+
61
+ ### Added
62
+ - **`check-docs-complete.cjs`** — the cheap question, asked before the expensive one. Phase 2 used to
63
+ launch a swarm of validation agents over whatever Phase 1 produced; existence, emptiness and
64
+ unfilled placeholders are decidable by forty lines. `/replicate` now runs it at the Phase 1→2
65
+ boundary and does not start the swarm on exit 1.
66
+ - **A resume section in `/replicate`** — the three signals that already answer "where did we stop":
67
+ the per-phase commits, this checker, and `verify`. Automated phase detection was deliberately NOT
68
+ added; the reasoning is recorded there so it can be revisited on evidence.
69
+
70
+ ### Changed
71
+ - **`prepublishOnly` now runs the snapshot test before signing.** `tests/` is in `files[]`, so a
72
+ baseline drifted from the templates used to be signed, shipped and wrong — `dz sign` states its own
73
+ limit: tamper-evidence, never truthfulness.
74
+
75
+ ### Honest limit
76
+ The completeness check proves the documents were WRITTEN, not that they are correct. Correctness is
77
+ what the Phase-2 swarm is for. It blocks only on shapes that cannot be anything else (`{{…}}`,
78
+ TODO/TBD/XXX/FIXME); bracketed prose is NAMED as a warning and never blocks, because it cannot be
79
+ told from a mermaid label without understanding the document — and `[GAP: …]` always reaches Phase 2,
80
+ which owns it.
81
+
82
+ ## [1.8.0] - 2026-08-27
83
+
84
+ **MINOR — the ten shipped skills no longer depend on a rewrite rule being read.**
85
+
86
+ ### Changed
87
+ - **Skill paths are pre-baked.** They referenced each other by claude.ai `/mnt/skills/user/<name>/`
88
+ paths and worked only because two rules files tell the model to rewrite them at read time — layer
89
+ 4, silent when it lapses. 27 references now resolve directly.
90
+ - Two skills referenced but NOT shipped (`frontend-design`, `idea2prd-manual`) are declared OPTIONAL
91
+ with a fallback rather than rewritten. A local-looking path that resolves to nothing is worse than
92
+ an obviously foreign one.
93
+ - 56 occurrences are DELIBERATELY preserved: the toolkit generator's own instructions to scan its
94
+ output for unrewritten paths, and the rewrite tables. Rewriting them would blind the self-check.
95
+ - The rewrite rules stay — a skill YOU bring from claude.ai still needs them.
96
+
97
+ ### Fixed
98
+ - `03-generate-p0.md` named `.claude/skills/goap-research/` as an output path two lines under a note
99
+ saying that name is an alias which never exists as a directory.
100
+
101
+ ## [1.7.0] - 2026-08-27
102
+
103
+ **Growth stops being analysis and becomes an obligation.** Two features, both cross-family reviewed
104
+ (grades B and C); artifacts in `features/growth-requirements-bridge/` and
105
+ `features/growth-list-and-compliance/`.
106
+
107
+ **MINOR — the pre-shipped contract changed again.** Hooks 7 → 8 (`check-growth-trace`). After
108
+ `update`, `doctor` and `verify` expect the new count.
109
+
110
+ ### Added
111
+
112
+ - **Phase 0 now writes `docs/product-discovery-brief.md`.** MEASURED before this change: it never
113
+ did. The brief was passed to Phase 1 in conversation and evaporated, so the M5 growth analysis had
114
+ no artifact anything downstream could read. Nothing was ignoring it — there was nothing to ignore.
115
+ - **`Growth Requirements Seed`** in M5: `FR-GROWTH-nnn` DRAFT obligations, each naming its source
116
+ block, carrying that block's confidence verbatim, and now carrying a compliance verdict.
117
+ - **Growth type is two independent axes** — a go-to-market MOTION and a growth LOOP — plus the three
118
+ mechanics the old list omitted (badge/embed, one- and two-sided incentivised referral, network
119
+ effect). `No loop` is a real answer and skips the loop-only output instead of demanding an
120
+ invented flywheel.
121
+ - **A compliance checklist** before any technique becomes a requirement. It cites the norm and where
122
+ to check it, and carries no amount, threshold or statute: those are jurisdiction-specific and go
123
+ stale within a year. A `no` answer is recorded against the requirement and blocks its promotion.
124
+ - **`Growth Traceability`** in `requirements-validator` — CONDITIONAL, scored `+5 / +0 / -10`
125
+ OUTSIDE the 100-point table. A project with no acquisition objective, or one that never ran
126
+ Phase 0, scores `+0` and never a penalty.
127
+ - **`.claude/hooks/check-growth-trace.cjs`** — the deterministic counterpart. Exit `0` traced ·
128
+ `1` analysed then dropped · `2` **the check did not run**. Wired to no event, like `check-ports`.
129
+ - **README:** a usage-scenario section for both deliberately-invoked checks, closing a gap 1.6.0 left
130
+ when `check-ports` shipped without one.
131
+
132
+ ### Fixed
133
+
134
+ - The pipeline rule listed **four** hook files when eight ship, and the components table said
135
+ **Rules 5** when six do — both stale since 1.6.0.
136
+
137
+ ### Honest limits, stated in the shipped artifacts
138
+
139
+ The seed proves an obligation was carried forward, never that it was built. The compliance checklist
140
+ asks its questions and records the answers; it does not establish that anything is lawful. And the
141
+ validator criterion is prose read by a model — layer 3. Only `check-growth-trace.cjs` is
142
+ deterministic, and only when someone runs it.
143
+
8
144
  ## [1.6.0] - 2026-08-27
9
145
 
10
146
  **Seventeen features** across two days, from the field-report sweep (PR-003, PR-005+010, PR-008,
@@ -140,6 +276,46 @@ Still open, and it is the owner's call: whether a DELETED target should be auto-
140
276
  features, 235 after the last). Every feature's guard is proven by mutation: apply it, watch a
141
277
  specific assertion go red, restore, watch it pass.
142
278
 
279
+ ## [1.5.19] - 2026-08-25
280
+
281
+ ### Fixed
282
+
283
+ - **The ADR chain was dead for every `/replicate` project.** The scanner required a directory of
284
+ `docs/adr/*.md`, which is the idea2prd-manual shape; a `/replicate` project writes a single
285
+ `docs/ADR.md`, so decisions were recorded and never read. The scanner now accepts both shapes.
286
+
287
+ ## [1.5.18] - 2026-08-25
288
+
289
+ ### Changed
290
+
291
+ - Version bump only, as part of a 51-package publish sweep — signatures re-verified against the
292
+ published tarballs. No behaviour change in this package.
293
+
294
+ ## [1.5.17] - 2026-08-25
295
+
296
+ ### Fixed
297
+
298
+ - Slice-H cross-model QE round 5 in `learning_bridge.py`. Recorded honestly at the time: the finding
299
+ count across five rounds went 11 → 10 → 5 → 3 → 6 and **did not converge**.
300
+
301
+ ## [1.5.16] - 2026-08-25
302
+
303
+ ### Fixed
304
+
305
+ - Slice-H QE round 4: acronym-versus-name confusion, laundered identifiers, and a forgeable probe.
306
+ The acronym test had been wrong in BOTH directions — it accepted `McDonald` and rejected `apoB`,
307
+ an example from this package's own README.
308
+
309
+ ## [1.5.15] - 2026-08-25
310
+
311
+ ### Fixed
312
+
313
+ - Slice-H QE round 3: the `learning_bridge.py` guard became a token allowlist rather than an
314
+ enumeration of bad cases, with evidence-provenance tests added.
315
+
316
+ > These five entries were reconstructed from git history on 2026-08-27 (backlog `2b286239`). They are
317
+ > accurate about what changed and why; they are terser than a contemporaneous entry would have been.
318
+
143
319
  ## [1.5.14] - 2026-07-28
144
320
 
145
321
  ### Fixed — Documentation & packaging (package-verification findings)
package/README.md CHANGED
@@ -101,7 +101,7 @@
101
101
 
102
102
  ## 📖 What is p-replicator?
103
103
 
104
- `@dzhechkov/p-replicator` installs a ready-made `.claude/` toolkit into any project: **11 slash commands**, **10 skills**, **4 agents**, **6 rules**, **7 hook scripts**, and a `settings.json` with pre-configured hooks and a multi-line statusline dashboard.
104
+ `@dzhechkov/p-replicator` installs a ready-made `.claude/` toolkit into any project: **11 slash commands**, **10 skills**, **4 agents**, **6 rules**, **9 hook scripts**, and a `settings.json` with pre-configured hooks and a multi-line statusline dashboard.
105
105
 
106
106
  The flagship `/replicate` command takes a project through a **5-phase pipeline**:
107
107
 
@@ -289,8 +289,8 @@ This creates:
289
289
  | **Skills** | 10 | 92 files (880K+ chars — MEASURED via `wc -c` over `templates/.claude/skills`: 880,679). Modular architecture: foundation → composite → master orchestrator |
290
290
  | **Commands** | 11 | `/replicate`, `/harvest`, `/start`, `/plan`, `/feature`, `/go`, `/run`, `/next`, `/myinsights`, `/docs`, `/deploy` |
291
291
  | **Agents** | 4 | `replicate-coordinator`, `product-discoverer`, `doc-validator`, `harvest-coordinator` |
292
- | **Rules** | 5 | `replicate-pipeline`, `skill-interface-protocol`, `git-workflow`, `insights-capture`, `feature-lifecycle` |
293
- | **Hooks** | 7 | `session-insights`, `autocommit-{roadmap,insights,plans}`, `statusline`, `state-update`, `check-ports` (cross-platform Node) |
292
+ | **Rules** | 6 | `replicate-pipeline`, `skill-interface-protocol`, `git-workflow`, `insights-capture`, `feature-lifecycle`, `docker-ports` |
293
+ | **Hooks** | 9 | `session-insights`, `autocommit-{roadmap,insights,plans}`, `statusline`, `state-update`, `check-ports`, `check-growth-trace`, `check-docs-complete` (cross-platform Node) |
294
294
  | **Settings** | 1 | `settings.json` with statusLine + SessionStart + Stop hooks pre-configured |
295
295
 
296
296
  After running `/replicate`, the toolkit also generates **project-specific** artifacts:
@@ -306,6 +306,108 @@ After running `/replicate`, the toolkit also generates **project-specific** arti
306
306
 
307
307
  ---
308
308
 
309
+ ## 📈 Growth: from analysis to obligation
310
+
311
+ Phase 0's M5 module used to end as analysis — and the analysis had nowhere to go, because the Product
312
+ Discovery Brief was never written to disk at all. Since 1.7.0:
313
+
314
+ - Phase 0 writes `docs/product-discovery-brief.md`.
315
+ - M5 emits a **Growth Requirements Seed**: `FR-GROWTH-nnn` DRAFT obligations, each naming the
316
+ analysis block it came from and carrying that block's confidence verbatim.
317
+ - Growth type is **two independent choices** — a go-to-market MOTION and a growth LOOP. The old
318
+ single list forced one pick across both, which made "sales-led company running a referral loop"
319
+ unsayable. `No loop` is a real answer and skips the loop-only output.
320
+ - A **compliance checklist** runs before a technique becomes a requirement. It names the norm and
321
+ where to check it, never an amount or a statute — those go stale and are jurisdiction-specific.
322
+ A `no` answer blocks that requirement's promotion.
323
+ - Phase 2's validator gains a **conditional** `Growth Traceability` criterion: `+5` traced, `+0` not
324
+ applicable, `-10` applicable but dropped. It scores outside the 100-point table, and a project with
325
+ no acquisition objective — or one that never ran Phase 0 — scores `+0`, never a penalty.
326
+
327
+ What none of this proves: that anything was built, or that copying a competitor's move is lawful.
328
+
329
+ ## 🔎 The three deliberate checks
330
+
331
+ Six of the nine hook scripts run themselves. Three do not: they are utilities you invoke when you want
332
+ an answer, and they are wired to no event on purpose. A hook of this package is **non-blocking by
333
+ contract** — it can print, never refuse — so a check that must be able to say "no" cannot be one.
334
+
335
+ Both answer with **three** exit codes, and the third is the one that matters:
336
+
337
+ | Code | Meaning |
338
+ |:---:|---|
339
+ | `0` | the rule holds |
340
+ | `1` | the rule is violated — the offender is named |
341
+ | `2` | **the check did not run** — it could not look, and says so |
342
+
343
+ A checker that answers "clean" when it could not look turns an unknown into a reassurance. That is
344
+ why a missing config, a missing docker, or a missing brief is `2` and never `0`.
345
+
346
+ ### `check-ports.cjs` — no database faces the internet
347
+
348
+ ```bash
349
+ node .claude/hooks/check-ports.cjs .
350
+ ```
351
+
352
+ ```
353
+ ❌ Правило №0 нарушено (.claude/rules/docker-ports.md):
354
+ • db: порт 5432 → 5432 (без адреса — значит все интерфейсы) — хранилище опубликовано наружу.
355
+ Убрать ports: целиком, либо привязать к 127.0.0.1
356
+ ```
357
+
358
+ Reads the normalised config (`docker compose config`), so the short port form and `extends` are
359
+ already resolved. Catches `network_mode: host` and services published beside a reverse-proxy too.
360
+ A loopback bind (`127.0.0.1:` or `[::1]:`) is legal and passes — that exception is part of the rule.
361
+
362
+ **When to run it:** after writing or editing `docker-compose.yml`, and before any deploy.
363
+
364
+ ### `check-docs-complete.cjs` — the cheap question, before the swarm
365
+
366
+ ```bash
367
+ node .claude/hooks/check-docs-complete.cjs .
368
+ ```
369
+
370
+ ```
371
+ ❌ документы Фазы 1 не готовы к валидации (1):
372
+ • PRD.md: пуст или почти пуст (5 симв., порог 200)
373
+ Рой валидации запускать рано: он потратит агентов на то, что видно отсюда.
374
+ ```
375
+
376
+ Phase 2 launches a swarm of validation agents over whatever Phase 1 produced. Existence, emptiness
377
+ and unfilled placeholders are decidable by forty lines of code — this asks them first, so the swarm
378
+ is spent on testability and completeness rather than on discovering an empty file.
379
+
380
+ `docs/ADR.md` and `docs/C4_Diagrams.md` stay optional, as `/replicate` itself declares them. A
381
+ markdown link is not a placeholder.
382
+
383
+ **When to run it:** at the Phase 1 → Phase 2 boundary. `/replicate` now runs it there for you.
384
+
385
+ **What it does NOT prove:** that the documents are correct. That is what the swarm is for.
386
+
387
+ ### `check-growth-trace.cjs` — the growth analysis was not analysed and dropped
388
+
389
+ ```bash
390
+ node .claude/hooks/check-growth-trace.cjs .
391
+ ```
392
+
393
+ ```
394
+ ❌ часть требований по росту потеряна (1 из 2):
395
+ • FR-GROWTH-002
396
+ Каждое надо либо перенести в docs/Specification.md, либо отклонить С ПРИЧИНОЙ — молча уронить нельзя.
397
+ ```
398
+
399
+ Phase 0's M5 module emits a `Growth Requirements Seed` table of `FR-GROWTH-nnn` draft obligations
400
+ into `docs/product-discovery-brief.md`. This asks whether they survived into `docs/Specification.md`.
401
+ A conscious rejection **with a reason written down** passes; a silent drop does not.
402
+
403
+ `docs/product-discovery-brief.md` absent is `2`, not `0` — it means Phase 0 never ran (the
404
+ `--from-docs` entry skips it), which is not the same as having nothing to trace.
405
+
406
+ **When to run it:** at the Phase 1 → Phase 2 boundary, before the validation pass.
407
+
408
+ **What it does NOT prove:** that anything was built, or that copying a competitor's growth move is
409
+ lawful. It proves an obligation was carried forward, nothing more.
410
+
309
411
  ## ✅ Verify the install
310
412
 
311
413
  After `/replicate`, run:
@@ -316,7 +418,7 @@ npx @dzhechkov/p-replicator verify
316
418
 
317
419
  The command checks:
318
420
 
319
- - **Pre-shipped contract** (must-have): 10 skills + 11 commands + 4 agents + 6 rules + settings.json + 7 hooks
421
+ - **Pre-shipped contract** (must-have): 10 skills + 11 commands + 4 agents + 6 rules + settings.json + 9 hooks
320
422
  - **Post-/replicate hints** (advisory): CLAUDE.md, project-specific agents, feature-roadmap.json, security rules, etc.
321
423
 
322
424
  **Exit codes:**