@dzhechkov/p-replicator 1.6.0 → 1.9.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.
- package/.dz-manifest.json +59 -23
- package/CHANGELOG.md +127 -0
- package/README.md +106 -4
- package/package.json +4 -4
- package/sbom.json +112 -22
- package/src/utils.js +2 -0
- package/templates/.claude/commands/replicate.md +57 -1
- package/templates/.claude/hooks/check-docs-complete.cjs +174 -0
- package/templates/.claude/hooks/check-growth-trace.cjs +191 -0
- package/templates/.claude/hooks/statusline.cjs +1 -1
- package/templates/.claude/rules/replicate-pipeline.md +14 -4
- package/templates/.claude/rules/skill-interface-protocol.md +9 -0
- package/templates/.claude/skills/cc-toolkit-generator-enhanced/modules/03-generate-p0.md +6 -4
- package/templates/.claude/skills/cc-toolkit-generator-enhanced/modules/08-skill-composition.md +2 -2
- package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/feature-lifecycle.md +2 -2
- package/templates/.claude/skills/requirements-validator/SKILL.md +52 -0
- package/templates/.claude/skills/reverse-engineering-unicorn/modules/01-intelligence.md +4 -4
- package/templates/.claude/skills/reverse-engineering-unicorn/modules/02-product-customers.md +2 -2
- package/templates/.claude/skills/reverse-engineering-unicorn/modules/025-cjm-prototype.md +9 -1
- package/templates/.claude/skills/reverse-engineering-unicorn/modules/03-market-competition.md +3 -3
- package/templates/.claude/skills/reverse-engineering-unicorn/modules/04-business-finance.md +3 -3
- package/templates/.claude/skills/reverse-engineering-unicorn/modules/05-growth-engine.md +132 -12
- package/templates/.claude/skills/reverse-engineering-unicorn/modules/06-playbook-synthesis.md +1 -1
- package/templates/.claude/skills/sparc-prd-mini/SKILL.md +9 -9
- package/tests/snapshot/baseline.json +20 -18
- package/tests/unit/check-docs-complete.test.js +249 -0
- package/tests/unit/check-growth-trace.test.js +188 -0
- package/tests/unit/growth-axes-and-compliance.test.js +169 -0
- package/tests/unit/growth-gate-conditional.test.js +122 -0
- package/tests/unit/growth-module-b2b-gate.test.js +20 -2
- package/tests/unit/growth-requirements-bridge.test.js +127 -0
- package/tests/unit/module-copy-identity.test.js +76 -0
- package/tests/unit/skill-paths-prebaked.test.js +174 -0
package/.dz-manifest.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"files": [
|
|
6
6
|
{
|
|
7
7
|
"path": "CHANGELOG.md",
|
|
8
|
-
"sha256": "
|
|
8
|
+
"sha256": "57b20e3bfd20ed2a97f783d77af52bb6c74ceff5466cacb20ddb058c0a344c48"
|
|
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": "
|
|
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": "
|
|
112
|
+
"sha256": "195281e31da3a3e5ecde1b7087ec5904f35d8f2639e6270f2d8ae685adcfa0c5"
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
115
|
"path": "src/cli.js",
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
143
|
"path": "src/utils.js",
|
|
144
|
-
"sha256": "
|
|
144
|
+
"sha256": "d4fc297e21682290c15aa64499190ee49b7aa62e69d527c2b5332fffad02f401"
|
|
145
145
|
},
|
|
146
146
|
{
|
|
147
147
|
"path": "templates/.claude/agents/doc-validator.md",
|
|
@@ -193,7 +193,7 @@
|
|
|
193
193
|
},
|
|
194
194
|
{
|
|
195
195
|
"path": "templates/.claude/commands/replicate.md",
|
|
196
|
-
"sha256": "
|
|
196
|
+
"sha256": "8862d0dc117815b1c3fc7f6e929996e2458783f1ac443eb70bc2a7ebe63a67c3"
|
|
197
197
|
},
|
|
198
198
|
{
|
|
199
199
|
"path": "templates/.claude/commands/run.md",
|
|
@@ -215,6 +215,14 @@
|
|
|
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": "13eca8ab8f18325031ca707baa2f7068f8c05484f8e4b12d4129a1023cc7a478"
|
|
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
228
|
"sha256": "e5f2d2bd8899df27c2dfedf76128467becae1868210eb8525a1bad2869a8c78f"
|
|
@@ -229,7 +237,7 @@
|
|
|
229
237
|
},
|
|
230
238
|
{
|
|
231
239
|
"path": "templates/.claude/hooks/statusline.cjs",
|
|
232
|
-
"sha256": "
|
|
240
|
+
"sha256": "948edf98ccabaa4e2dc59078435fb444639aa740baa08967d3a78067e4de3416"
|
|
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": "
|
|
260
|
+
"sha256": "99289f711c34cfddddbef5328b74749fc63d1f74636c6a4e4d61caa202fad05d"
|
|
253
261
|
},
|
|
254
262
|
{
|
|
255
263
|
"path": "templates/.claude/rules/skill-interface-protocol.md",
|
|
256
|
-
"sha256": "
|
|
264
|
+
"sha256": "7669309b0ae4330bc6cf6b26bd9cfc01d7b99a8e70c1f056a52574430db9378e"
|
|
257
265
|
},
|
|
258
266
|
{
|
|
259
267
|
"path": "templates/.claude/settings.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": "
|
|
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": "
|
|
340
|
+
"sha256": "683b254e400414b432827bedf4153a122322125eff053da4ccfeb3a62bab2a77"
|
|
333
341
|
},
|
|
334
342
|
{
|
|
335
343
|
"path": "templates/.claude/skills/cc-toolkit-generator-enhanced/modules/09-cross-project-learning.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": "
|
|
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": "
|
|
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": "
|
|
644
|
+
"sha256": "0770bd63a6a1eeb34e873cb101e2ba0cf88d507e9bc03242046eaa837b9f587c"
|
|
637
645
|
},
|
|
638
646
|
{
|
|
639
647
|
"path": "templates/.claude/skills/reverse-engineering-unicorn/modules/02-product-customers.md",
|
|
640
|
-
"sha256": "
|
|
648
|
+
"sha256": "499bbded50ddd368a62301083e828a42bd0223aa58322b6a952f00086b462972"
|
|
641
649
|
},
|
|
642
650
|
{
|
|
643
651
|
"path": "templates/.claude/skills/reverse-engineering-unicorn/modules/025-cjm-prototype.md",
|
|
644
|
-
"sha256": "
|
|
652
|
+
"sha256": "11e2e101c99d42306ac1d0931475c5a8899e929514e41a393b6173e03856cfc3"
|
|
645
653
|
},
|
|
646
654
|
{
|
|
647
655
|
"path": "templates/.claude/skills/reverse-engineering-unicorn/modules/03-market-competition.md",
|
|
648
|
-
"sha256": "
|
|
656
|
+
"sha256": "7c2e7164463371239d92f28153777e40ee0d6dad293d59886a4cf5b306fa3627"
|
|
649
657
|
},
|
|
650
658
|
{
|
|
651
659
|
"path": "templates/.claude/skills/reverse-engineering-unicorn/modules/04-business-finance.md",
|
|
652
|
-
"sha256": "
|
|
660
|
+
"sha256": "dd08226391d498a82f111f0da665ea7cea1fa8a97683fab11070f879142727f7"
|
|
653
661
|
},
|
|
654
662
|
{
|
|
655
663
|
"path": "templates/.claude/skills/reverse-engineering-unicorn/modules/05-growth-engine.md",
|
|
656
|
-
"sha256": "
|
|
664
|
+
"sha256": "84658390dc7beb590f70164b391ace915e42926660bc1015e4be300752b74a37"
|
|
657
665
|
},
|
|
658
666
|
{
|
|
659
667
|
"path": "templates/.claude/skills/reverse-engineering-unicorn/modules/06-playbook-synthesis.md",
|
|
660
|
-
"sha256": "
|
|
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": "
|
|
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": "
|
|
704
|
+
"sha256": "0d5af8aadd98bf1f5f07a02b9d6d7a5dd243d4263a5b03de1a249fdaa5111a56"
|
|
697
705
|
},
|
|
698
706
|
{
|
|
699
707
|
"path": "tests/snapshot/templates.test.js",
|
|
@@ -715,6 +723,14 @@
|
|
|
715
723
|
"path": "tests/unit/autocommit-deletion.test.js",
|
|
716
724
|
"sha256": "87ebe50e164cfa3aeda3d4f04e6b6aa98ab8af44711cbeb94252d770c07ad8ad"
|
|
717
725
|
},
|
|
726
|
+
{
|
|
727
|
+
"path": "tests/unit/check-docs-complete.test.js",
|
|
728
|
+
"sha256": "0dbc15c1077c9c02766cfa9b1eb357b30b59639f2fa91003e44e3c6485da3e7b"
|
|
729
|
+
},
|
|
730
|
+
{
|
|
731
|
+
"path": "tests/unit/check-growth-trace.test.js",
|
|
732
|
+
"sha256": "733d87fe8eca897fcfc5cad9342d4db2085270c21d0d8866d817a9b9418511c2"
|
|
733
|
+
},
|
|
718
734
|
{
|
|
719
735
|
"path": "tests/unit/check-ports.test.js",
|
|
720
736
|
"sha256": "72d9eeaa8c47d83fba867722f4b8efc8d079e2d9649e1a20abff46571c2f6f15"
|
|
@@ -731,9 +747,21 @@
|
|
|
731
747
|
"path": "tests/unit/external-dependency-check.test.js",
|
|
732
748
|
"sha256": "d85109f8e86648d61fc17d0128e9d4881950a70641c246e667d7e54ffc1f0273"
|
|
733
749
|
},
|
|
750
|
+
{
|
|
751
|
+
"path": "tests/unit/growth-axes-and-compliance.test.js",
|
|
752
|
+
"sha256": "88e4d8c7ae278c46dfce4d89fcbd1dee49c0b545ebc07e459306bfdc70567048"
|
|
753
|
+
},
|
|
754
|
+
{
|
|
755
|
+
"path": "tests/unit/growth-gate-conditional.test.js",
|
|
756
|
+
"sha256": "bff4149b339294ac822d1a8fe732d21560ea8d70bcb80b10f3491105a4a9b75c"
|
|
757
|
+
},
|
|
734
758
|
{
|
|
735
759
|
"path": "tests/unit/growth-module-b2b-gate.test.js",
|
|
736
|
-
"sha256": "
|
|
760
|
+
"sha256": "05ce46882984905ba41983c34b8d983e9fa9bf5eb4b1af988841a46e78142098"
|
|
761
|
+
},
|
|
762
|
+
{
|
|
763
|
+
"path": "tests/unit/growth-requirements-bridge.test.js",
|
|
764
|
+
"sha256": "2f560a16f1757df46d5d52e5d29a7aad3e4c327cd07ea9cc69240c7dd1c93f2a"
|
|
737
765
|
},
|
|
738
766
|
{
|
|
739
767
|
"path": "tests/unit/hooks-project-anchored.test.js",
|
|
@@ -743,6 +771,10 @@
|
|
|
743
771
|
"path": "tests/unit/hooks-report-failures.test.js",
|
|
744
772
|
"sha256": "35d3fca74c22e1bc88b6fbb25f172b66a21561a947e2b6e90a366d5a854376b8"
|
|
745
773
|
},
|
|
774
|
+
{
|
|
775
|
+
"path": "tests/unit/module-copy-identity.test.js",
|
|
776
|
+
"sha256": "a1269ad9f68a38faa7710fc63ce850feacb2304996b85ef38237b222815a3532"
|
|
777
|
+
},
|
|
746
778
|
{
|
|
747
779
|
"path": "tests/unit/pipeline-file-ownership.test.js",
|
|
748
780
|
"sha256": "dd5b6e2ddb3078fb5ccafed6c55a6079bbd20d73fd5c2dacbb988263ceeda806"
|
|
@@ -751,6 +783,10 @@
|
|
|
751
783
|
"path": "tests/unit/roadmap-one-schema.test.js",
|
|
752
784
|
"sha256": "3e7ac9dbc9796a791fc95c43b4346c6da2455f3c0ace45bbc440502c5957d3dc"
|
|
753
785
|
},
|
|
786
|
+
{
|
|
787
|
+
"path": "tests/unit/skill-paths-prebaked.test.js",
|
|
788
|
+
"sha256": "efb13ca5d2fa68f3186e5af4142509d260d7cf63c902f59e915110bb550887df"
|
|
789
|
+
},
|
|
754
790
|
{
|
|
755
791
|
"path": "tests/unit/sparc-reconciliation.test.js",
|
|
756
792
|
"sha256": "4020c623cb351d42b3b184d23194d48cf04e4a3ce8d95ff96c4261ade75632c9"
|
|
@@ -781,5 +817,5 @@
|
|
|
781
817
|
}
|
|
782
818
|
]
|
|
783
819
|
},
|
|
784
|
-
"signature": "
|
|
820
|
+
"signature": "OMtz2uZJ+oSOZn3pdPDukLfw/5FD68SgFh/weBKRMzNGQyuBjh7L0durZEyaLu1T0pbbQ+WTQ1eEAi48cGCjBg=="
|
|
785
821
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,93 @@ 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.9.0] - 2026-08-27
|
|
9
|
+
|
|
10
|
+
**MINOR — hooks 8 → 9** (`check-docs-complete`). After `update`, `doctor` and `verify` expect the new count.
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **`check-docs-complete.cjs`** — the cheap question, asked before the expensive one. Phase 2 used to
|
|
14
|
+
launch a swarm of validation agents over whatever Phase 1 produced; existence, emptiness and
|
|
15
|
+
unfilled placeholders are decidable by forty lines. `/replicate` now runs it at the Phase 1→2
|
|
16
|
+
boundary and does not start the swarm on exit 1.
|
|
17
|
+
- **A resume section in `/replicate`** — the three signals that already answer "where did we stop":
|
|
18
|
+
the per-phase commits, this checker, and `verify`. Automated phase detection was deliberately NOT
|
|
19
|
+
added; the reasoning is recorded there so it can be revisited on evidence.
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
- **`prepublishOnly` now runs the snapshot test before signing.** `tests/` is in `files[]`, so a
|
|
23
|
+
baseline drifted from the templates used to be signed, shipped and wrong — `dz sign` states its own
|
|
24
|
+
limit: tamper-evidence, never truthfulness.
|
|
25
|
+
|
|
26
|
+
### Honest limit
|
|
27
|
+
The completeness check proves the documents were WRITTEN, not that they are correct. Correctness is
|
|
28
|
+
what the Phase-2 swarm is for. It blocks only on shapes that cannot be anything else (`{{…}}`,
|
|
29
|
+
TODO/TBD/XXX/FIXME); bracketed prose is NAMED as a warning and never blocks, because it cannot be
|
|
30
|
+
told from a mermaid label without understanding the document — and `[GAP: …]` always reaches Phase 2,
|
|
31
|
+
which owns it.
|
|
32
|
+
|
|
33
|
+
## [1.8.0] - 2026-08-27
|
|
34
|
+
|
|
35
|
+
**MINOR — the ten shipped skills no longer depend on a rewrite rule being read.**
|
|
36
|
+
|
|
37
|
+
### Changed
|
|
38
|
+
- **Skill paths are pre-baked.** They referenced each other by claude.ai `/mnt/skills/user/<name>/`
|
|
39
|
+
paths and worked only because two rules files tell the model to rewrite them at read time — layer
|
|
40
|
+
4, silent when it lapses. 27 references now resolve directly.
|
|
41
|
+
- Two skills referenced but NOT shipped (`frontend-design`, `idea2prd-manual`) are declared OPTIONAL
|
|
42
|
+
with a fallback rather than rewritten. A local-looking path that resolves to nothing is worse than
|
|
43
|
+
an obviously foreign one.
|
|
44
|
+
- 56 occurrences are DELIBERATELY preserved: the toolkit generator's own instructions to scan its
|
|
45
|
+
output for unrewritten paths, and the rewrite tables. Rewriting them would blind the self-check.
|
|
46
|
+
- The rewrite rules stay — a skill YOU bring from claude.ai still needs them.
|
|
47
|
+
|
|
48
|
+
### Fixed
|
|
49
|
+
- `03-generate-p0.md` named `.claude/skills/goap-research/` as an output path two lines under a note
|
|
50
|
+
saying that name is an alias which never exists as a directory.
|
|
51
|
+
|
|
52
|
+
## [1.7.0] - 2026-08-27
|
|
53
|
+
|
|
54
|
+
**Growth stops being analysis and becomes an obligation.** Two features, both cross-family reviewed
|
|
55
|
+
(grades B and C); artifacts in `features/growth-requirements-bridge/` and
|
|
56
|
+
`features/growth-list-and-compliance/`.
|
|
57
|
+
|
|
58
|
+
**MINOR — the pre-shipped contract changed again.** Hooks 7 → 8 (`check-growth-trace`). After
|
|
59
|
+
`update`, `doctor` and `verify` expect the new count.
|
|
60
|
+
|
|
61
|
+
### Added
|
|
62
|
+
|
|
63
|
+
- **Phase 0 now writes `docs/product-discovery-brief.md`.** MEASURED before this change: it never
|
|
64
|
+
did. The brief was passed to Phase 1 in conversation and evaporated, so the M5 growth analysis had
|
|
65
|
+
no artifact anything downstream could read. Nothing was ignoring it — there was nothing to ignore.
|
|
66
|
+
- **`Growth Requirements Seed`** in M5: `FR-GROWTH-nnn` DRAFT obligations, each naming its source
|
|
67
|
+
block, carrying that block's confidence verbatim, and now carrying a compliance verdict.
|
|
68
|
+
- **Growth type is two independent axes** — a go-to-market MOTION and a growth LOOP — plus the three
|
|
69
|
+
mechanics the old list omitted (badge/embed, one- and two-sided incentivised referral, network
|
|
70
|
+
effect). `No loop` is a real answer and skips the loop-only output instead of demanding an
|
|
71
|
+
invented flywheel.
|
|
72
|
+
- **A compliance checklist** before any technique becomes a requirement. It cites the norm and where
|
|
73
|
+
to check it, and carries no amount, threshold or statute: those are jurisdiction-specific and go
|
|
74
|
+
stale within a year. A `no` answer is recorded against the requirement and blocks its promotion.
|
|
75
|
+
- **`Growth Traceability`** in `requirements-validator` — CONDITIONAL, scored `+5 / +0 / -10`
|
|
76
|
+
OUTSIDE the 100-point table. A project with no acquisition objective, or one that never ran
|
|
77
|
+
Phase 0, scores `+0` and never a penalty.
|
|
78
|
+
- **`.claude/hooks/check-growth-trace.cjs`** — the deterministic counterpart. Exit `0` traced ·
|
|
79
|
+
`1` analysed then dropped · `2` **the check did not run**. Wired to no event, like `check-ports`.
|
|
80
|
+
- **README:** a usage-scenario section for both deliberately-invoked checks, closing a gap 1.6.0 left
|
|
81
|
+
when `check-ports` shipped without one.
|
|
82
|
+
|
|
83
|
+
### Fixed
|
|
84
|
+
|
|
85
|
+
- The pipeline rule listed **four** hook files when eight ship, and the components table said
|
|
86
|
+
**Rules 5** when six do — both stale since 1.6.0.
|
|
87
|
+
|
|
88
|
+
### Honest limits, stated in the shipped artifacts
|
|
89
|
+
|
|
90
|
+
The seed proves an obligation was carried forward, never that it was built. The compliance checklist
|
|
91
|
+
asks its questions and records the answers; it does not establish that anything is lawful. And the
|
|
92
|
+
validator criterion is prose read by a model — layer 3. Only `check-growth-trace.cjs` is
|
|
93
|
+
deterministic, and only when someone runs it.
|
|
94
|
+
|
|
8
95
|
## [1.6.0] - 2026-08-27
|
|
9
96
|
|
|
10
97
|
**Seventeen features** across two days, from the field-report sweep (PR-003, PR-005+010, PR-008,
|
|
@@ -140,6 +227,46 @@ Still open, and it is the owner's call: whether a DELETED target should be auto-
|
|
|
140
227
|
features, 235 after the last). Every feature's guard is proven by mutation: apply it, watch a
|
|
141
228
|
specific assertion go red, restore, watch it pass.
|
|
142
229
|
|
|
230
|
+
## [1.5.19] - 2026-08-25
|
|
231
|
+
|
|
232
|
+
### Fixed
|
|
233
|
+
|
|
234
|
+
- **The ADR chain was dead for every `/replicate` project.** The scanner required a directory of
|
|
235
|
+
`docs/adr/*.md`, which is the idea2prd-manual shape; a `/replicate` project writes a single
|
|
236
|
+
`docs/ADR.md`, so decisions were recorded and never read. The scanner now accepts both shapes.
|
|
237
|
+
|
|
238
|
+
## [1.5.18] - 2026-08-25
|
|
239
|
+
|
|
240
|
+
### Changed
|
|
241
|
+
|
|
242
|
+
- Version bump only, as part of a 51-package publish sweep — signatures re-verified against the
|
|
243
|
+
published tarballs. No behaviour change in this package.
|
|
244
|
+
|
|
245
|
+
## [1.5.17] - 2026-08-25
|
|
246
|
+
|
|
247
|
+
### Fixed
|
|
248
|
+
|
|
249
|
+
- Slice-H cross-model QE round 5 in `learning_bridge.py`. Recorded honestly at the time: the finding
|
|
250
|
+
count across five rounds went 11 → 10 → 5 → 3 → 6 and **did not converge**.
|
|
251
|
+
|
|
252
|
+
## [1.5.16] - 2026-08-25
|
|
253
|
+
|
|
254
|
+
### Fixed
|
|
255
|
+
|
|
256
|
+
- Slice-H QE round 4: acronym-versus-name confusion, laundered identifiers, and a forgeable probe.
|
|
257
|
+
The acronym test had been wrong in BOTH directions — it accepted `McDonald` and rejected `apoB`,
|
|
258
|
+
an example from this package's own README.
|
|
259
|
+
|
|
260
|
+
## [1.5.15] - 2026-08-25
|
|
261
|
+
|
|
262
|
+
### Fixed
|
|
263
|
+
|
|
264
|
+
- Slice-H QE round 3: the `learning_bridge.py` guard became a token allowlist rather than an
|
|
265
|
+
enumeration of bad cases, with evidence-provenance tests added.
|
|
266
|
+
|
|
267
|
+
> These five entries were reconstructed from git history on 2026-08-27 (backlog `2b286239`). They are
|
|
268
|
+
> accurate about what changed and why; they are terser than a contemporaneous entry would have been.
|
|
269
|
+
|
|
143
270
|
## [1.5.14] - 2026-07-28
|
|
144
271
|
|
|
145
272
|
### 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**, **
|
|
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** |
|
|
293
|
-
| **Hooks** |
|
|
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 +
|
|
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:**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dzhechkov/p-replicator",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"description": "P-Replicator — Claude Code toolkit for AI-assisted product development (Vibe Coding). Full /replicate pipeline, 10 modular skills (880K+ chars), /harvest knowledge extraction, swarm agents, quality gates, security patterns, cross-project learning.",
|
|
5
5
|
"main": "src/cli.js",
|
|
6
6
|
"bin": {
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
"sbom.json"
|
|
20
20
|
],
|
|
21
21
|
"scripts": {
|
|
22
|
-
"prepublishOnly": "node ../../../scripts/prepublish-gate.mjs",
|
|
23
|
-
"test": "node --test tests/unit/utils.test.js tests/unit/adr-scanner-contract.test.js tests/unit/sparc-reconciliation.test.js tests/unit/pipeline-file-ownership.test.js tests/unit/validation-gate-teeth.test.js tests/unit/hooks-project-anchored.test.js tests/unit/statusline-two-roots.test.js tests/unit/external-dependency-check.test.js tests/unit/spec-pseudocode-traceability.test.js tests/unit/sync-templates-guard.test.js tests/unit/db-port-rule.test.js tests/unit/roadmap-one-schema.test.js tests/unit/hooks-report-failures.test.js tests/unit/growth-module-b2b-gate.test.js tests/unit/detect-parse-anchor.test.js tests/unit/statusline-honest-labels.test.js tests/unit/autocommit-deletion.test.js tests/unit/check-ports.test.js tests/unit/adr-decision-coverage.test.js tests/e2e/lifecycle.test.js tests/snapshot/templates.test.js",
|
|
24
|
-
"test:unit": "node --test tests/unit/utils.test.js tests/unit/adr-scanner-contract.test.js tests/unit/sparc-reconciliation.test.js tests/unit/pipeline-file-ownership.test.js tests/unit/validation-gate-teeth.test.js tests/unit/hooks-project-anchored.test.js tests/unit/statusline-two-roots.test.js tests/unit/external-dependency-check.test.js tests/unit/spec-pseudocode-traceability.test.js tests/unit/sync-templates-guard.test.js tests/unit/db-port-rule.test.js tests/unit/roadmap-one-schema.test.js tests/unit/hooks-report-failures.test.js tests/unit/growth-module-b2b-gate.test.js tests/unit/detect-parse-anchor.test.js tests/unit/statusline-honest-labels.test.js tests/unit/autocommit-deletion.test.js tests/unit/check-ports.test.js tests/unit/adr-decision-coverage.test.js",
|
|
22
|
+
"prepublishOnly": "node --test tests/snapshot/templates.test.js && node ../../../scripts/prepublish-gate.mjs",
|
|
23
|
+
"test": "node --test tests/unit/utils.test.js tests/unit/adr-scanner-contract.test.js tests/unit/sparc-reconciliation.test.js tests/unit/pipeline-file-ownership.test.js tests/unit/validation-gate-teeth.test.js tests/unit/hooks-project-anchored.test.js tests/unit/statusline-two-roots.test.js tests/unit/external-dependency-check.test.js tests/unit/spec-pseudocode-traceability.test.js tests/unit/sync-templates-guard.test.js tests/unit/db-port-rule.test.js tests/unit/roadmap-one-schema.test.js tests/unit/hooks-report-failures.test.js tests/unit/growth-module-b2b-gate.test.js tests/unit/detect-parse-anchor.test.js tests/unit/statusline-honest-labels.test.js tests/unit/autocommit-deletion.test.js tests/unit/check-ports.test.js tests/unit/adr-decision-coverage.test.js tests/unit/growth-requirements-bridge.test.js tests/unit/check-growth-trace.test.js tests/unit/growth-gate-conditional.test.js tests/unit/module-copy-identity.test.js tests/unit/growth-axes-and-compliance.test.js tests/unit/skill-paths-prebaked.test.js tests/unit/check-docs-complete.test.js tests/e2e/lifecycle.test.js tests/snapshot/templates.test.js",
|
|
24
|
+
"test:unit": "node --test tests/unit/utils.test.js tests/unit/adr-scanner-contract.test.js tests/unit/sparc-reconciliation.test.js tests/unit/pipeline-file-ownership.test.js tests/unit/validation-gate-teeth.test.js tests/unit/hooks-project-anchored.test.js tests/unit/statusline-two-roots.test.js tests/unit/external-dependency-check.test.js tests/unit/spec-pseudocode-traceability.test.js tests/unit/sync-templates-guard.test.js tests/unit/db-port-rule.test.js tests/unit/roadmap-one-schema.test.js tests/unit/hooks-report-failures.test.js tests/unit/growth-module-b2b-gate.test.js tests/unit/detect-parse-anchor.test.js tests/unit/statusline-honest-labels.test.js tests/unit/autocommit-deletion.test.js tests/unit/check-ports.test.js tests/unit/adr-decision-coverage.test.js tests/unit/growth-requirements-bridge.test.js tests/unit/check-growth-trace.test.js tests/unit/growth-gate-conditional.test.js tests/unit/module-copy-identity.test.js tests/unit/growth-axes-and-compliance.test.js tests/unit/skill-paths-prebaked.test.js tests/unit/check-docs-complete.test.js",
|
|
25
25
|
"test:e2e": "node --test tests/e2e/lifecycle.test.js",
|
|
26
26
|
"test:snapshot": "node --test tests/snapshot/templates.test.js",
|
|
27
27
|
"test:doctor": "node bin/cli.js doctor",
|