@dzhechkov/p-replicator 1.13.1 → 1.13.3

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 (43) hide show
  1. package/.dz-manifest.json +93 -25
  2. package/README.md +19 -1
  3. package/package.json +5 -4
  4. package/sbom.json +194 -24
  5. package/scripts/check-pipeline-gaps.sh +510 -21
  6. package/src/utils.js +2 -0
  7. package/templates/.claude/commands/feature.md +43 -1
  8. package/templates/.claude/commands/replicate.md +9 -1
  9. package/templates/.claude/hooks/check-dangling-refs.cjs +89 -0
  10. package/templates/.claude/hooks/check-docs-complete.cjs +7 -0
  11. package/templates/.claude/hooks/check-review-contract.cjs +205 -0
  12. package/templates/.claude/hooks/statusline.cjs +1 -1
  13. package/templates/.claude/rules/cost-of-detection-ladder.md +37 -4
  14. package/templates/.claude/rules/docker-ports.md +28 -0
  15. package/templates/.claude/rules/feature-lifecycle.md +21 -0
  16. package/templates/.claude/rules/replicate-pipeline.md +5 -4
  17. package/templates/.claude/skills/brutal-honesty-review/resources/assessment-rubrics.md +12 -2
  18. package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/security-patterns-library.md +45 -0
  19. package/templates/.claude/skills/requirements-validator/SKILL.md +18 -5
  20. package/templates/.claude/skills/requirements-validator/references/feature-report-contracts.md +67 -0
  21. package/templates/.claude/skills/requirements-validator/references/scoring-system.md +15 -6
  22. package/tests/e2e/feature-contour.test.js +176 -0
  23. package/tests/fixtures/feature-contour/docs/features/demo-gate/01_specification.md +15 -0
  24. package/tests/fixtures/feature-contour/docs/features/demo-gate/02_pseudocode.md +19 -0
  25. package/tests/fixtures/feature-contour/docs/features/demo-gate/03_architecture.md +3 -0
  26. package/tests/fixtures/feature-contour/docs/features/demo-gate/04_refinement.md +3 -0
  27. package/tests/fixtures/feature-contour/docs/features/demo-gate/05_completion.md +7 -0
  28. package/tests/fixtures/feature-contour/docs/features/demo-gate/review-report.md +11 -0
  29. package/tests/fixtures/feature-contour/docs/features/demo-gate/validation-report.md +10 -0
  30. package/tests/fixtures/feature-contour/tests/demo.test.js +16 -0
  31. package/tests/snapshot/baseline.json +17 -14
  32. package/tests/unit/capture-source-path.test.js +73 -24
  33. package/tests/unit/check-dangling-refs.test.js +91 -0
  34. package/tests/unit/check-review-contract.test.js +181 -0
  35. package/tests/unit/guard-honest-input-meta.test.js +49 -0
  36. package/tests/unit/honest-failure-rules.test.js +40 -3
  37. package/tests/unit/negative-conclusion-gate.test.js +3 -3
  38. package/tests/unit/optional-doc-idiom.test.js +83 -0
  39. package/tests/unit/quote-provenance.test.js +4 -0
  40. package/tests/unit/sync-templates-guard.test.js +46 -3
  41. package/tests/unit/traceability-completion-gate.test.js +267 -0
  42. package/tests/unit/traceability-negative-fixture.test.js +19 -5
  43. package/tests/unit/verdict-vocabulary.test.js +72 -0
package/.dz-manifest.json CHANGED
@@ -21,7 +21,7 @@
21
21
  },
22
22
  {
23
23
  "path": "README.md",
24
- "sha256": "103d3f0520f79080445d07623b70195d7b34cae6d875eb60978aec254aca5c88"
24
+ "sha256": "a70fc43d33972f0472a3fdb6628f79b22c5a4cdd459b5d89bce06e240ca93bf1"
25
25
  },
26
26
  {
27
27
  "path": "README/eng/01_quickstart.md",
@@ -109,11 +109,11 @@
109
109
  },
110
110
  {
111
111
  "path": "package.json",
112
- "sha256": "2bacb5f426c3873d186bf142e95cb72d81a098c35f091a54b80d3d86e97fc1fb"
112
+ "sha256": "09d9074650a09fe7715324b47211685755777381c8219cdecb0bfbc4d562bd0f"
113
113
  },
114
114
  {
115
115
  "path": "scripts/check-pipeline-gaps.sh",
116
- "sha256": "349dbc45876cd5765ae48ff2224ab7f96d5df01a0d86361866b7740ed3cf4de0"
116
+ "sha256": "06e3dae22c533a81732b9870ae42d6b80b6e8419b3c90e11e1910e2a46888be8"
117
117
  },
118
118
  {
119
119
  "path": "src/cli.js",
@@ -149,7 +149,7 @@
149
149
  },
150
150
  {
151
151
  "path": "src/utils.js",
152
- "sha256": "2ab6ff0a3e15f9a9d5787077628e19936c3c9735b1549b1233ec4a331c2fd3f7"
152
+ "sha256": "90d7b12ca01b7ee2cfee6aac68ca11431fa1a507ddfbac155c5d9802d9d91a1e"
153
153
  },
154
154
  {
155
155
  "path": "templates/.claude/agents/doc-validator.md",
@@ -177,7 +177,7 @@
177
177
  },
178
178
  {
179
179
  "path": "templates/.claude/commands/feature.md",
180
- "sha256": "b2bb83fce09f823a36c943f397d63ff9d9406da1dadc055c4f187f8ff964d1ce"
180
+ "sha256": "6908fa6c8ba770f829378a021d5f7e9a9bc79a15bdd67b278d8c6a765968b291"
181
181
  },
182
182
  {
183
183
  "path": "templates/.claude/commands/go.md",
@@ -201,7 +201,7 @@
201
201
  },
202
202
  {
203
203
  "path": "templates/.claude/commands/replicate.md",
204
- "sha256": "165d7b3c0606be6817893b53cbfc5ca55c7b81cbe35cbdd0dccf8679d702e81a"
204
+ "sha256": "f176d8ec871459b5a8d2111b8527331f34340d6e169da8cc7792953e3e334774"
205
205
  },
206
206
  {
207
207
  "path": "templates/.claude/commands/run.md",
@@ -231,9 +231,13 @@
231
231
  "path": "templates/.claude/hooks/check-canon.cjs",
232
232
  "sha256": "99e6bff9b0078eb2ec23f7df98b7ac06c894f9018eba4a8c358e8f92e5ec7b06"
233
233
  },
234
+ {
235
+ "path": "templates/.claude/hooks/check-dangling-refs.cjs",
236
+ "sha256": "8f012876b1af110a1093319d36a2f84208a15780dbb8abb5a43eb4aeb8f76865"
237
+ },
234
238
  {
235
239
  "path": "templates/.claude/hooks/check-docs-complete.cjs",
236
- "sha256": "27c05c2adcedc806e395b30b455243193a4fbd0968ce96e415679e1f78db951a"
240
+ "sha256": "0f516df0882c9da53d166a1b4e30ff1fc37bd5a2027c7e5fbdab6cba116ca828"
237
241
  },
238
242
  {
239
243
  "path": "templates/.claude/hooks/check-embed-contract.cjs",
@@ -279,6 +283,10 @@
279
283
  "path": "templates/.claude/hooks/check-ports.cjs",
280
284
  "sha256": "2b458cf78367ec7752174f08aa40109b3b6217e405f99a46e18e75e4b69bc87e"
281
285
  },
286
+ {
287
+ "path": "templates/.claude/hooks/check-review-contract.cjs",
288
+ "sha256": "44e32ea31a4a71ceb6eccb0956006519de270eab787a79ab4884978bc04385ab"
289
+ },
282
290
  {
283
291
  "path": "templates/.claude/hooks/check-source-version.cjs",
284
292
  "sha256": "b9dc2eee7403119481ea2c49a94581613f2c134685448736c2734948a638a010"
@@ -301,7 +309,7 @@
301
309
  },
302
310
  {
303
311
  "path": "templates/.claude/hooks/statusline.cjs",
304
- "sha256": "6e30ccdcdbe3c36896b85821f8986077a0e4065fdff3b103d669fac7ad44670e"
312
+ "sha256": "bac385da01dd9f1548d0db48a2acdada5e89a7822a7f0ecfb61cb74ff4cda138"
305
313
  },
306
314
  {
307
315
  "path": "templates/.claude/hooks/write-insight.cjs",
@@ -309,11 +317,11 @@
309
317
  },
310
318
  {
311
319
  "path": "templates/.claude/rules/cost-of-detection-ladder.md",
312
- "sha256": "f15309ee8f1494478ff7678380dbe8fc8eecd154be36d57c9090cd17126a07da"
320
+ "sha256": "d2e7da3d56c8d4c6d1aa58e793fa0d5eecd65a5c01be38dfa0dc434273306838"
313
321
  },
314
322
  {
315
323
  "path": "templates/.claude/rules/docker-ports.md",
316
- "sha256": "59eb430f29dd762e8b76ad6d1177fe8b5b250de007856c743387cb88ee157942"
324
+ "sha256": "a9e5bb9a797ea4ef4c0671cee2cbec95f2557f8b9e1d20b84bbcee7ce4c21162"
317
325
  },
318
326
  {
319
327
  "path": "templates/.claude/rules/embeddable-widget.md",
@@ -321,7 +329,7 @@
321
329
  },
322
330
  {
323
331
  "path": "templates/.claude/rules/feature-lifecycle.md",
324
- "sha256": "4e926f84f244feb6824114a0624733738669c93e0508693fa2afa4e9a35c2aa3"
332
+ "sha256": "a7d0adf6bc63b942d3dec339b3ae68972c3dedc0b48a91d27653309c7da7f11f"
325
333
  },
326
334
  {
327
335
  "path": "templates/.claude/rules/git-workflow.md",
@@ -349,7 +357,7 @@
349
357
  },
350
358
  {
351
359
  "path": "templates/.claude/rules/replicate-pipeline.md",
352
- "sha256": "879ca7b6ca9039c7b94f6b9df2eadca9ec5fd0f97da5f468d5ee723f3d47f438"
360
+ "sha256": "9c4bbaa9ac628ec5d4e44d3ace6eec0b5bd602b5dccc5d36f123d73be448f159"
353
361
  },
354
362
  {
355
363
  "path": "templates/.claude/rules/skill-interface-protocol.md",
@@ -377,7 +385,7 @@
377
385
  },
378
386
  {
379
387
  "path": "templates/.claude/skills/brutal-honesty-review/resources/assessment-rubrics.md",
380
- "sha256": "dac09c91c765e2211799cc230738fb72a966f47511edb872306a906e49640cbe"
388
+ "sha256": "b64894e1ddf8b9da7f2f146c737d35215e7281e3d8be10891d4a9b8aa2bd6d07"
381
389
  },
382
390
  {
383
391
  "path": "templates/.claude/skills/brutal-honesty-review/resources/review-template.md",
@@ -461,7 +469,7 @@
461
469
  },
462
470
  {
463
471
  "path": "templates/.claude/skills/cc-toolkit-generator-enhanced/references/security-patterns-library.md",
464
- "sha256": "5f1d650c426cbd2c9536b385306605ea62a5a520ee4566d23ca7254409c672a5"
472
+ "sha256": "4a7fae9ea1870c30b71c923fd5d3626a8926c5e960209fad709f4b8e0534fc80"
465
473
  },
466
474
  {
467
475
  "path": "templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/automation-commands.md",
@@ -717,7 +725,7 @@
717
725
  },
718
726
  {
719
727
  "path": "templates/.claude/skills/requirements-validator/SKILL.md",
720
- "sha256": "d2b8e71f4053c642f455a0f245ae18471ab25b7a21e0658f0fe410912a47bf8b"
728
+ "sha256": "b4b394adf08feee552f39c83331398f119e0d4abf21e683fe4706da438b4a426"
721
729
  },
722
730
  {
723
731
  "path": "templates/.claude/skills/requirements-validator/assets/templates/bdd-feature-template.feature",
@@ -727,13 +735,17 @@
727
735
  "path": "templates/.claude/skills/requirements-validator/references/bdd-patterns.md",
728
736
  "sha256": "04611a8c52c81f3a6d4fc2f9661ebc56159a125b6fb44a4d18b432e2b82de6e3"
729
737
  },
738
+ {
739
+ "path": "templates/.claude/skills/requirements-validator/references/feature-report-contracts.md",
740
+ "sha256": "df263cbce17fb5d9dec6514561c66f6283b3f19e2fc85056f0531bac615be0f1"
741
+ },
730
742
  {
731
743
  "path": "templates/.claude/skills/requirements-validator/references/invest-criteria.md",
732
744
  "sha256": "ac6976adf776b9b60c784e1a0f6a0d96dd3332b16f4c12b72d3e59f9325bb626"
733
745
  },
734
746
  {
735
747
  "path": "templates/.claude/skills/requirements-validator/references/scoring-system.md",
736
- "sha256": "49afe072f31f5b4f9a33f6b59487244f494b0f5587b6cc10c797c4de59510114"
748
+ "sha256": "72104b74f07e0610f67f00b246b5225a530203bff225bacf7bf384bc6fd21cdf"
737
749
  },
738
750
  {
739
751
  "path": "templates/.claude/skills/requirements-validator/references/smart-criteria.md",
@@ -807,6 +819,10 @@
807
819
  "path": "templates/.claude/skills/sparc-prd-mini/templates/prd.md",
808
820
  "sha256": "7b4497bc76bb421fae7a07ecb46af01e021412180a394a5487a3c3c42dc004b6"
809
821
  },
822
+ {
823
+ "path": "tests/e2e/feature-contour.test.js",
824
+ "sha256": "a6e7c00e86fae150b834234efe34c2837da63b6794117a1bffd5c0de13505fe1"
825
+ },
810
826
  {
811
827
  "path": "tests/e2e/lifecycle.test.js",
812
828
  "sha256": "4c51f9c38396b115a875f397168b82c50312c2b93436b32ae501ac3bd0978fc9"
@@ -815,6 +831,38 @@
815
831
  "path": "tests/e2e/packed-insights-writer.test.js",
816
832
  "sha256": "3477f63db3f531e3c2970b85d784f22d268695030764319457a543b2e9d49758"
817
833
  },
834
+ {
835
+ "path": "tests/fixtures/feature-contour/docs/features/demo-gate/01_specification.md",
836
+ "sha256": "264708a769ad0d07d715420d82278461c5f1b831dd365eaaf6be051db18d47e8"
837
+ },
838
+ {
839
+ "path": "tests/fixtures/feature-contour/docs/features/demo-gate/02_pseudocode.md",
840
+ "sha256": "c8e58b32bdc9df32ad95f4eca2fb8625fe8e39194ad01fbd2a1b4abee6e6d7d4"
841
+ },
842
+ {
843
+ "path": "tests/fixtures/feature-contour/docs/features/demo-gate/03_architecture.md",
844
+ "sha256": "7bebb1ac66f026a0c95afd986b17af60155be99e17d874f260106515b229bd14"
845
+ },
846
+ {
847
+ "path": "tests/fixtures/feature-contour/docs/features/demo-gate/04_refinement.md",
848
+ "sha256": "b7f285a4070bfb8dd47c14be11149412c3df4663b99762a2fc05be24f2fa1b1e"
849
+ },
850
+ {
851
+ "path": "tests/fixtures/feature-contour/docs/features/demo-gate/05_completion.md",
852
+ "sha256": "62eeec7cd3101fa0159c03bd17d5100a86d8ba29a1189cdc06f8b190c01c1dd8"
853
+ },
854
+ {
855
+ "path": "tests/fixtures/feature-contour/docs/features/demo-gate/review-report.md",
856
+ "sha256": "12f8fa21aedeb2f73bdd8ff16f0c28e053693ec11815616181c085a31058436c"
857
+ },
858
+ {
859
+ "path": "tests/fixtures/feature-contour/docs/features/demo-gate/validation-report.md",
860
+ "sha256": "4e1244a874996b522d07b9f23478bbe2416ed34f7b8cedbae460ada07dfd448f"
861
+ },
862
+ {
863
+ "path": "tests/fixtures/feature-contour/tests/demo.test.js",
864
+ "sha256": "812a837075839d3b86367149a60f6e859d7623775788e10adaef53e5b249b20d"
865
+ },
818
866
  {
819
867
  "path": "tests/fixtures/prep-traceability-fixture/docs/features/order-refund/01_specification.md",
820
868
  "sha256": "86e366e17ff16f7dbe161bdd1bf3351212e6bb2bac7a5d2c20616fb9c6fd454a"
@@ -825,7 +873,7 @@
825
873
  },
826
874
  {
827
875
  "path": "tests/snapshot/baseline.json",
828
- "sha256": "5eac599ea36b23f93b4f12de64da7ff1daff2df148032cc6fbf146ef8c0f7429"
876
+ "sha256": "31801798e099c5e43e60de29c3487a586fe6b906b2135ea1060861567d36fdfb"
829
877
  },
830
878
  {
831
879
  "path": "tests/snapshot/templates.test.js",
@@ -857,12 +905,16 @@
857
905
  },
858
906
  {
859
907
  "path": "tests/unit/capture-source-path.test.js",
860
- "sha256": "771ee1bb495fe4a60b2fa58cc8009e52610c38145059532d3e158581fdb66d93"
908
+ "sha256": "cce205634906882d7b8dc9c54dbbfc89abcafe59dd0ff5d0a9ef595e8e1c5356"
861
909
  },
862
910
  {
863
911
  "path": "tests/unit/check-canon.test.js",
864
912
  "sha256": "df1aad467e0ed38471dad55547c1af6115ec9daaa5c40e9142e4ce67fedcb1bf"
865
913
  },
914
+ {
915
+ "path": "tests/unit/check-dangling-refs.test.js",
916
+ "sha256": "8571d325047e0624d273b2058ca55732360ede48e433750a86aa79b3aba9b273"
917
+ },
866
918
  {
867
919
  "path": "tests/unit/check-docs-complete.test.js",
868
920
  "sha256": "2c6f16a61f0876f637ac492d5fb2af1ea35ad00161fd1468446ea0d08cd97f4b"
@@ -915,6 +967,10 @@
915
967
  "path": "tests/unit/check-ports.test.js",
916
968
  "sha256": "fbaf222bdde5fc30835d454de9cd1532a85a371c35108f23798902d20a7e152d"
917
969
  },
970
+ {
971
+ "path": "tests/unit/check-review-contract.test.js",
972
+ "sha256": "75d59bc1b45abc2e1b5723560d79533e0a767e75fc50024c8a13f34540a55e59"
973
+ },
918
974
  {
919
975
  "path": "tests/unit/check-source-version.test.js",
920
976
  "sha256": "c5b457c22585c78fdc081ebe383ea5c24c2e2ef7a9bf04a6531005d791a9521e"
@@ -981,11 +1037,11 @@
981
1037
  },
982
1038
  {
983
1039
  "path": "tests/unit/guard-honest-input-meta.test.js",
984
- "sha256": "b8e6513e09e774b83b2f05ac42d35c4849ef81b58e600e442dd22cf1071d02f3"
1040
+ "sha256": "5996879d9fdf6e194f40b32fff525bf9f257bbfb90719438e21850b15150ded1"
985
1041
  },
986
1042
  {
987
1043
  "path": "tests/unit/honest-failure-rules.test.js",
988
- "sha256": "b8674f0ce01c888b9a0fa5da0ad707c171412c9ac8fc4dcd55d2d5a5ea989438"
1044
+ "sha256": "f42d66af4e430e5915b7e8daec9bb2c9a5df9f43960863443ec0076d99f6ad67"
989
1045
  },
990
1046
  {
991
1047
  "path": "tests/unit/hooks-project-anchored.test.js",
@@ -1017,7 +1073,11 @@
1017
1073
  },
1018
1074
  {
1019
1075
  "path": "tests/unit/negative-conclusion-gate.test.js",
1020
- "sha256": "7ffbcfdf638941511dc78c048d5056812e63af203cdf7c9bc757a22540cca14e"
1076
+ "sha256": "6c6a470d22d12ff46301c4ae61ba7a2563c4ff8a3a2d5b3a84c81c6b8c11b067"
1077
+ },
1078
+ {
1079
+ "path": "tests/unit/optional-doc-idiom.test.js",
1080
+ "sha256": "f25338f5928e9d1cba82cdc88506d46256f2b567d7524f159512cb8e06b21f06"
1021
1081
  },
1022
1082
  {
1023
1083
  "path": "tests/unit/pipeline-file-ownership.test.js",
@@ -1025,7 +1085,7 @@
1025
1085
  },
1026
1086
  {
1027
1087
  "path": "tests/unit/quote-provenance.test.js",
1028
- "sha256": "e9f50ec67b8dde73d609c1df6bbeafa7eaf23f3ae62785362b57d09e3b7e6c70"
1088
+ "sha256": "a6e5416318e22107e728e8800716d4697ff4b8edf00f6fc16019754afe03bbb1"
1029
1089
  },
1030
1090
  {
1031
1091
  "path": "tests/unit/roadmap-one-schema.test.js",
@@ -1057,7 +1117,11 @@
1057
1117
  },
1058
1118
  {
1059
1119
  "path": "tests/unit/sync-templates-guard.test.js",
1060
- "sha256": "e4fc7687dcf37d17bf2a059d3248c8c00526c104f6a0f6e104fa9ca6e00039ae"
1120
+ "sha256": "a601c25a1b1e697140d76216bcdabb80c86528f7bc81654581dd0c4dc43188d8"
1121
+ },
1122
+ {
1123
+ "path": "tests/unit/traceability-completion-gate.test.js",
1124
+ "sha256": "082c141de9995c1d8bc51857b598d33e4a3f4947c325671283d3c6c70d224397"
1061
1125
  },
1062
1126
  {
1063
1127
  "path": "tests/unit/traceability-machine-ids.test.js",
@@ -1065,7 +1129,7 @@
1065
1129
  },
1066
1130
  {
1067
1131
  "path": "tests/unit/traceability-negative-fixture.test.js",
1068
- "sha256": "abc54e0e00138ecc6d75e0cbc496cbd888cd97b1ed567b7d23557f0674b5c161"
1132
+ "sha256": "f27e812e6ea45e3cc5b21a531e0b3e95517ad7419431ed4fa8dd27628d33faff"
1069
1133
  },
1070
1134
  {
1071
1135
  "path": "tests/unit/utils.test.js",
@@ -1074,8 +1138,12 @@
1074
1138
  {
1075
1139
  "path": "tests/unit/validation-gate-teeth.test.js",
1076
1140
  "sha256": "d4f42a26b67b2fa1dfa8db9984c301a7d7e91657e5e2cdabb1bab307c766138d"
1141
+ },
1142
+ {
1143
+ "path": "tests/unit/verdict-vocabulary.test.js",
1144
+ "sha256": "55982f29de66852d085b561195b495d348a649079f5799658de3b43b697d0532"
1077
1145
  }
1078
1146
  ]
1079
1147
  },
1080
- "signature": "TssEwAMj9F/eOsspomZ1REWHcGRYm7uFGTXFm3zJCJKm42duzyzK/KAOdG0XjEqEESRo51vveq8jklxEu0wmAQ=="
1148
+ "signature": "DsIFOeT4ntNvUrhbFwpDHt7FDAAAq0dlLrVkPqSmxOmk8sER5xd7d2L7OvMEeaFFzfobe6IYFNtJlv5ISvtiCA=="
1081
1149
  }
package/README.md CHANGED
@@ -256,6 +256,24 @@ EOF
256
256
 
257
257
  Full recipe: see [User Guide](./README/eng/02_user_guide.md#feature-workflow-in-an-existing-project-mode-2) ([RU](./README/ru/02_user_guide.md#feature-workflow-в-существующем-проекте-mode-2)).
258
258
 
259
+ ### Three traceability gates
260
+
261
+ Byte-level formats of the three reports (`validation-report.md`, `05_completion.md`, `review-report.md`) live in `templates/.claude/skills/requirements-validator/references/feature-report-contracts.md`; `/feature` names them per phase, the gates below enforce them. The shared `brutal-honesty-review` skill stays byte-identical to its canonical copy — the specification contract is a `/feature` obligation, not a change to the generic reviewer.
262
+
263
+ `/feature` refuses silent traceability loss at validation, implementation, and review. The
264
+ requirements score also has a `Traceability = 0` blocking floor: without a `## Criterion scenarios`
265
+ table mapping every AC id to a named scenario, a high average cannot advance the story.
266
+
267
+ | Check | Command | Expected pass | Example named gap |
268
+ |---|---|---|---|
269
+ | Machine-key traceability and the scoring floor's input | `bash "$CHECK_PIPELINE_GAPS" "${CLAUDE_PROJECT_DIR:-.}" --traceability` | `PASS traceability: 3 AC ids mapped to 3 scenarios` | `GAP AC-checkout-2: no named scenario in 02_pseudocode.md` |
270
+ | Validation report is bound to the current specification bytes | `bash "$CHECK_PIPELINE_GAPS" "${CLAUDE_PROJECT_DIR:-.}" --report-revision` | `PASS report-revision: validation-report.md matches 01_specification.md` | `GAP report-revision: validation=4f27c19c9b20 specification=8ab35d68e021` |
271
+ | Every criterion names a real test file and title | `bash "$CHECK_PIPELINE_GAPS" "${CLAUDE_PROJECT_DIR:-.}" --completion` | `PASS completion: 3 AC ids covered by tests` | `GAP AC-checkout-2: test title not found in tests/checkout.test.js` |
272
+ | Review discloses its family and answers the exact specification revision | `node "${CLAUDE_PROJECT_DIR:-.}/.claude/hooks/check-review-contract.cjs" "${CLAUDE_PROJECT_DIR:-.}" "checkout"` | `PASS review-contract feature=checkout AC-ids=3 rows=3` | `GAP AC-checkout-2 has no Spec conformance row` |
273
+
274
+ All four commands use the same fail-closed convention: exit `0` passes, exit `1` prints every named
275
+ gap, and exit `2` means the inputs could not be established. Neither non-zero result is a warning.
276
+
259
277
  ---
260
278
 
261
279
  ## 📦 Installation
@@ -592,7 +610,7 @@ npx @dzhechkov/p-replicator verify
592
610
 
593
611
  The command checks:
594
612
 
595
- - **Pre-shipped contract** (must-have): 10 skills + 11 commands + 4 agents + 13 rules + settings.json + 24 hooks
613
+ - **Pre-shipped contract** (must-have): 10 skills + 11 commands + 4 agents + 13 rules + settings.json + 25 hooks
596
614
  - **Post-/replicate hints** (advisory): CLAUDE.md, project-specific agents, feature-roadmap.json, security rules, etc.
597
615
 
598
616
  **Exit codes:**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dzhechkov/p-replicator",
3
- "version": "1.13.1",
3
+ "version": "1.13.3",
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": {
@@ -73,11 +73,12 @@
73
73
  "access": "public"
74
74
  },
75
75
  "scripts": {
76
- "test": "node --test tests/unit/honest-failure-rules.test.js tests/unit/generator-swarm-contract.test.js tests/unit/check-swarm-receipts.test.js tests/unit/check-embed-contract.test.js tests/unit/check-model-cost.test.js tests/unit/check-canon.test.js tests/unit/check-file-ownership.test.js tests/unit/check-source-version.test.js tests/unit/check-handoff-manifest.test.js tests/unit/check-external-deps.test.js tests/unit/check-metric-source.test.js tests/unit/negative-conclusion-gate.test.js tests/unit/check-webhook-contract.test.js tests/unit/check-job-contract.test.js tests/unit/detection-ladder-contract.test.js tests/unit/detection-ladder-registry.test.js 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/insights-dz-delegation.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/doctor-insight-flow.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/check-look-trace.test.js tests/unit/check-look-origin.test.js tests/unit/quote-provenance.test.js tests/unit/guard-honest-input-meta.test.js tests/unit/look-phase-contract.test.js tests/unit/capture-source-path.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/unit/absence-is-not-emptiness.test.js tests/unit/guard-forms.test.js tests/unit/generated-guard-templates.test.js tests/unit/shipped-suite-context.test.js tests/unit/assess-scripts.test.js tests/unit/insights-docs-tell-the-truth.test.js tests/unit/insights-writer.test.js tests/unit/check-pipeline-gaps.test.js tests/unit/traceability-machine-ids.test.js tests/unit/traceability-negative-fixture.test.js tests/e2e/lifecycle.test.js tests/e2e/packed-insights-writer.test.js tests/snapshot/templates.test.js",
77
- "test:unit": "node --test tests/unit/honest-failure-rules.test.js tests/unit/generator-swarm-contract.test.js tests/unit/check-swarm-receipts.test.js tests/unit/check-embed-contract.test.js tests/unit/check-model-cost.test.js tests/unit/check-canon.test.js tests/unit/check-file-ownership.test.js tests/unit/check-source-version.test.js tests/unit/check-handoff-manifest.test.js tests/unit/check-external-deps.test.js tests/unit/check-metric-source.test.js tests/unit/negative-conclusion-gate.test.js tests/unit/check-webhook-contract.test.js tests/unit/check-job-contract.test.js tests/unit/detection-ladder-contract.test.js tests/unit/detection-ladder-registry.test.js 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/insights-dz-delegation.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/doctor-insight-flow.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/check-look-trace.test.js tests/unit/check-look-origin.test.js tests/unit/quote-provenance.test.js tests/unit/guard-honest-input-meta.test.js tests/unit/look-phase-contract.test.js tests/unit/capture-source-path.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/unit/absence-is-not-emptiness.test.js tests/unit/guard-forms.test.js tests/unit/generated-guard-templates.test.js tests/unit/shipped-suite-context.test.js tests/unit/assess-scripts.test.js tests/unit/insights-docs-tell-the-truth.test.js tests/unit/insights-writer.test.js tests/unit/check-pipeline-gaps.test.js tests/unit/traceability-machine-ids.test.js tests/unit/traceability-negative-fixture.test.js",
76
+ "test": "node --test tests/unit/honest-failure-rules.test.js tests/unit/generator-swarm-contract.test.js tests/unit/check-swarm-receipts.test.js tests/unit/check-embed-contract.test.js tests/unit/check-model-cost.test.js tests/unit/check-canon.test.js tests/unit/check-file-ownership.test.js tests/unit/check-source-version.test.js tests/unit/check-handoff-manifest.test.js tests/unit/check-external-deps.test.js tests/unit/check-metric-source.test.js tests/unit/negative-conclusion-gate.test.js tests/unit/check-webhook-contract.test.js tests/unit/check-job-contract.test.js tests/unit/detection-ladder-contract.test.js tests/unit/detection-ladder-registry.test.js 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/insights-dz-delegation.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/doctor-insight-flow.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/check-look-trace.test.js tests/unit/check-look-origin.test.js tests/unit/quote-provenance.test.js tests/unit/guard-honest-input-meta.test.js tests/unit/look-phase-contract.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/unit/check-review-contract.test.js tests/unit/absence-is-not-emptiness.test.js tests/unit/guard-forms.test.js tests/unit/generated-guard-templates.test.js tests/unit/shipped-suite-context.test.js tests/unit/assess-scripts.test.js tests/unit/insights-docs-tell-the-truth.test.js tests/unit/insights-writer.test.js tests/unit/check-pipeline-gaps.test.js tests/unit/traceability-machine-ids.test.js tests/unit/traceability-completion-gate.test.js tests/unit/traceability-negative-fixture.test.js tests/e2e/lifecycle.test.js tests/e2e/feature-contour.test.js tests/e2e/packed-insights-writer.test.js tests/snapshot/templates.test.js tests/unit/optional-doc-idiom.test.js tests/unit/verdict-vocabulary.test.js tests/unit/check-dangling-refs.test.js test/mutation-registry-freshness.test.js",
77
+ "test:unit": "node --test tests/unit/honest-failure-rules.test.js tests/unit/generator-swarm-contract.test.js tests/unit/check-swarm-receipts.test.js tests/unit/check-embed-contract.test.js tests/unit/check-model-cost.test.js tests/unit/check-canon.test.js tests/unit/check-file-ownership.test.js tests/unit/check-source-version.test.js tests/unit/check-handoff-manifest.test.js tests/unit/check-external-deps.test.js tests/unit/check-metric-source.test.js tests/unit/negative-conclusion-gate.test.js tests/unit/check-webhook-contract.test.js tests/unit/check-job-contract.test.js tests/unit/detection-ladder-contract.test.js tests/unit/detection-ladder-registry.test.js 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/insights-dz-delegation.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/doctor-insight-flow.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/check-look-trace.test.js tests/unit/check-look-origin.test.js tests/unit/quote-provenance.test.js tests/unit/guard-honest-input-meta.test.js tests/unit/look-phase-contract.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/unit/check-review-contract.test.js tests/unit/absence-is-not-emptiness.test.js tests/unit/guard-forms.test.js tests/unit/generated-guard-templates.test.js tests/unit/shipped-suite-context.test.js tests/unit/assess-scripts.test.js tests/unit/insights-docs-tell-the-truth.test.js tests/unit/insights-writer.test.js tests/unit/check-pipeline-gaps.test.js tests/unit/traceability-machine-ids.test.js tests/unit/traceability-completion-gate.test.js tests/unit/traceability-negative-fixture.test.js tests/unit/optional-doc-idiom.test.js tests/unit/verdict-vocabulary.test.js tests/unit/check-dangling-refs.test.js",
78
78
  "test:e2e": "node --test tests/e2e/lifecycle.test.js tests/e2e/packed-insights-writer.test.js",
79
79
  "test:snapshot": "node --test tests/snapshot/templates.test.js",
80
80
  "test:doctor": "node bin/cli.js doctor",
81
- "snapshot:baseline": "node tests/snapshot/update-baseline.js"
81
+ "snapshot:baseline": "node tests/snapshot/update-baseline.js",
82
+ "test:browser": "node --test tests/unit/capture-source-path.test.js"
82
83
  }
83
84
  }