@dzhechkov/p-replicator 1.13.1 → 1.13.2

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 (27) hide show
  1. package/.dz-manifest.json +65 -13
  2. package/README.md +19 -1
  3. package/package.json +3 -3
  4. package/sbom.json +142 -12
  5. package/scripts/check-pipeline-gaps.sh +510 -21
  6. package/src/utils.js +1 -0
  7. package/templates/.claude/commands/feature.md +43 -1
  8. package/templates/.claude/hooks/check-review-contract.cjs +205 -0
  9. package/templates/.claude/hooks/statusline.cjs +1 -1
  10. package/templates/.claude/rules/replicate-pipeline.md +4 -3
  11. package/templates/.claude/skills/requirements-validator/SKILL.md +18 -5
  12. package/templates/.claude/skills/requirements-validator/references/feature-report-contracts.md +67 -0
  13. package/templates/.claude/skills/requirements-validator/references/scoring-system.md +15 -6
  14. package/tests/e2e/feature-contour.test.js +176 -0
  15. package/tests/fixtures/feature-contour/docs/features/demo-gate/01_specification.md +15 -0
  16. package/tests/fixtures/feature-contour/docs/features/demo-gate/02_pseudocode.md +19 -0
  17. package/tests/fixtures/feature-contour/docs/features/demo-gate/03_architecture.md +3 -0
  18. package/tests/fixtures/feature-contour/docs/features/demo-gate/04_refinement.md +3 -0
  19. package/tests/fixtures/feature-contour/docs/features/demo-gate/05_completion.md +7 -0
  20. package/tests/fixtures/feature-contour/docs/features/demo-gate/review-report.md +11 -0
  21. package/tests/fixtures/feature-contour/docs/features/demo-gate/validation-report.md +10 -0
  22. package/tests/fixtures/feature-contour/tests/demo.test.js +16 -0
  23. package/tests/snapshot/baseline.json +9 -7
  24. package/tests/unit/check-review-contract.test.js +181 -0
  25. package/tests/unit/honest-failure-rules.test.js +18 -3
  26. package/tests/unit/sync-templates-guard.test.js +46 -3
  27. package/tests/unit/traceability-completion-gate.test.js +267 -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": "c9186f299be209dd8aecd28229225dece4fdb76e6750a0d43c31ae19cbeda387"
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": "86ed569a58e07f5aa2d31f6b932019345bc33abc00f5185601eb1f6ef9ce3815"
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",
@@ -279,6 +279,10 @@
279
279
  "path": "templates/.claude/hooks/check-ports.cjs",
280
280
  "sha256": "2b458cf78367ec7752174f08aa40109b3b6217e405f99a46e18e75e4b69bc87e"
281
281
  },
282
+ {
283
+ "path": "templates/.claude/hooks/check-review-contract.cjs",
284
+ "sha256": "44e32ea31a4a71ceb6eccb0956006519de270eab787a79ab4884978bc04385ab"
285
+ },
282
286
  {
283
287
  "path": "templates/.claude/hooks/check-source-version.cjs",
284
288
  "sha256": "b9dc2eee7403119481ea2c49a94581613f2c134685448736c2734948a638a010"
@@ -301,7 +305,7 @@
301
305
  },
302
306
  {
303
307
  "path": "templates/.claude/hooks/statusline.cjs",
304
- "sha256": "6e30ccdcdbe3c36896b85821f8986077a0e4065fdff3b103d669fac7ad44670e"
308
+ "sha256": "50c08decec3e80ed325f50d7b062fbe0add47e8594002fcc165248492242ab56"
305
309
  },
306
310
  {
307
311
  "path": "templates/.claude/hooks/write-insight.cjs",
@@ -349,7 +353,7 @@
349
353
  },
350
354
  {
351
355
  "path": "templates/.claude/rules/replicate-pipeline.md",
352
- "sha256": "879ca7b6ca9039c7b94f6b9df2eadca9ec5fd0f97da5f468d5ee723f3d47f438"
356
+ "sha256": "13bf073273820addeb87167402495b2f683cefac70a9f6cb07b6e054b1851e0f"
353
357
  },
354
358
  {
355
359
  "path": "templates/.claude/rules/skill-interface-protocol.md",
@@ -717,7 +721,7 @@
717
721
  },
718
722
  {
719
723
  "path": "templates/.claude/skills/requirements-validator/SKILL.md",
720
- "sha256": "d2b8e71f4053c642f455a0f245ae18471ab25b7a21e0658f0fe410912a47bf8b"
724
+ "sha256": "b4b394adf08feee552f39c83331398f119e0d4abf21e683fe4706da438b4a426"
721
725
  },
722
726
  {
723
727
  "path": "templates/.claude/skills/requirements-validator/assets/templates/bdd-feature-template.feature",
@@ -727,13 +731,17 @@
727
731
  "path": "templates/.claude/skills/requirements-validator/references/bdd-patterns.md",
728
732
  "sha256": "04611a8c52c81f3a6d4fc2f9661ebc56159a125b6fb44a4d18b432e2b82de6e3"
729
733
  },
734
+ {
735
+ "path": "templates/.claude/skills/requirements-validator/references/feature-report-contracts.md",
736
+ "sha256": "df263cbce17fb5d9dec6514561c66f6283b3f19e2fc85056f0531bac615be0f1"
737
+ },
730
738
  {
731
739
  "path": "templates/.claude/skills/requirements-validator/references/invest-criteria.md",
732
740
  "sha256": "ac6976adf776b9b60c784e1a0f6a0d96dd3332b16f4c12b72d3e59f9325bb626"
733
741
  },
734
742
  {
735
743
  "path": "templates/.claude/skills/requirements-validator/references/scoring-system.md",
736
- "sha256": "49afe072f31f5b4f9a33f6b59487244f494b0f5587b6cc10c797c4de59510114"
744
+ "sha256": "72104b74f07e0610f67f00b246b5225a530203bff225bacf7bf384bc6fd21cdf"
737
745
  },
738
746
  {
739
747
  "path": "templates/.claude/skills/requirements-validator/references/smart-criteria.md",
@@ -807,6 +815,10 @@
807
815
  "path": "templates/.claude/skills/sparc-prd-mini/templates/prd.md",
808
816
  "sha256": "7b4497bc76bb421fae7a07ecb46af01e021412180a394a5487a3c3c42dc004b6"
809
817
  },
818
+ {
819
+ "path": "tests/e2e/feature-contour.test.js",
820
+ "sha256": "a6e7c00e86fae150b834234efe34c2837da63b6794117a1bffd5c0de13505fe1"
821
+ },
810
822
  {
811
823
  "path": "tests/e2e/lifecycle.test.js",
812
824
  "sha256": "4c51f9c38396b115a875f397168b82c50312c2b93436b32ae501ac3bd0978fc9"
@@ -815,6 +827,38 @@
815
827
  "path": "tests/e2e/packed-insights-writer.test.js",
816
828
  "sha256": "3477f63db3f531e3c2970b85d784f22d268695030764319457a543b2e9d49758"
817
829
  },
830
+ {
831
+ "path": "tests/fixtures/feature-contour/docs/features/demo-gate/01_specification.md",
832
+ "sha256": "264708a769ad0d07d715420d82278461c5f1b831dd365eaaf6be051db18d47e8"
833
+ },
834
+ {
835
+ "path": "tests/fixtures/feature-contour/docs/features/demo-gate/02_pseudocode.md",
836
+ "sha256": "c8e58b32bdc9df32ad95f4eca2fb8625fe8e39194ad01fbd2a1b4abee6e6d7d4"
837
+ },
838
+ {
839
+ "path": "tests/fixtures/feature-contour/docs/features/demo-gate/03_architecture.md",
840
+ "sha256": "7bebb1ac66f026a0c95afd986b17af60155be99e17d874f260106515b229bd14"
841
+ },
842
+ {
843
+ "path": "tests/fixtures/feature-contour/docs/features/demo-gate/04_refinement.md",
844
+ "sha256": "b7f285a4070bfb8dd47c14be11149412c3df4663b99762a2fc05be24f2fa1b1e"
845
+ },
846
+ {
847
+ "path": "tests/fixtures/feature-contour/docs/features/demo-gate/05_completion.md",
848
+ "sha256": "62eeec7cd3101fa0159c03bd17d5100a86d8ba29a1189cdc06f8b190c01c1dd8"
849
+ },
850
+ {
851
+ "path": "tests/fixtures/feature-contour/docs/features/demo-gate/review-report.md",
852
+ "sha256": "12f8fa21aedeb2f73bdd8ff16f0c28e053693ec11815616181c085a31058436c"
853
+ },
854
+ {
855
+ "path": "tests/fixtures/feature-contour/docs/features/demo-gate/validation-report.md",
856
+ "sha256": "4e1244a874996b522d07b9f23478bbe2416ed34f7b8cedbae460ada07dfd448f"
857
+ },
858
+ {
859
+ "path": "tests/fixtures/feature-contour/tests/demo.test.js",
860
+ "sha256": "812a837075839d3b86367149a60f6e859d7623775788e10adaef53e5b249b20d"
861
+ },
818
862
  {
819
863
  "path": "tests/fixtures/prep-traceability-fixture/docs/features/order-refund/01_specification.md",
820
864
  "sha256": "86e366e17ff16f7dbe161bdd1bf3351212e6bb2bac7a5d2c20616fb9c6fd454a"
@@ -825,7 +869,7 @@
825
869
  },
826
870
  {
827
871
  "path": "tests/snapshot/baseline.json",
828
- "sha256": "5eac599ea36b23f93b4f12de64da7ff1daff2df148032cc6fbf146ef8c0f7429"
872
+ "sha256": "2e442fcb5f39de9f94c2284d385368f2e984bb17998556c41ac9f4f676a6134e"
829
873
  },
830
874
  {
831
875
  "path": "tests/snapshot/templates.test.js",
@@ -915,6 +959,10 @@
915
959
  "path": "tests/unit/check-ports.test.js",
916
960
  "sha256": "fbaf222bdde5fc30835d454de9cd1532a85a371c35108f23798902d20a7e152d"
917
961
  },
962
+ {
963
+ "path": "tests/unit/check-review-contract.test.js",
964
+ "sha256": "75d59bc1b45abc2e1b5723560d79533e0a767e75fc50024c8a13f34540a55e59"
965
+ },
918
966
  {
919
967
  "path": "tests/unit/check-source-version.test.js",
920
968
  "sha256": "c5b457c22585c78fdc081ebe383ea5c24c2e2ef7a9bf04a6531005d791a9521e"
@@ -985,7 +1033,7 @@
985
1033
  },
986
1034
  {
987
1035
  "path": "tests/unit/honest-failure-rules.test.js",
988
- "sha256": "b8674f0ce01c888b9a0fa5da0ad707c171412c9ac8fc4dcd55d2d5a5ea989438"
1036
+ "sha256": "176115fafdca146eff0ebf87361fe6d0f26c7c3621cda03da0140ab72ba9f1ac"
989
1037
  },
990
1038
  {
991
1039
  "path": "tests/unit/hooks-project-anchored.test.js",
@@ -1057,7 +1105,11 @@
1057
1105
  },
1058
1106
  {
1059
1107
  "path": "tests/unit/sync-templates-guard.test.js",
1060
- "sha256": "e4fc7687dcf37d17bf2a059d3248c8c00526c104f6a0f6e104fa9ca6e00039ae"
1108
+ "sha256": "a601c25a1b1e697140d76216bcdabb80c86528f7bc81654581dd0c4dc43188d8"
1109
+ },
1110
+ {
1111
+ "path": "tests/unit/traceability-completion-gate.test.js",
1112
+ "sha256": "082c141de9995c1d8bc51857b598d33e4a3f4947c325671283d3c6c70d224397"
1061
1113
  },
1062
1114
  {
1063
1115
  "path": "tests/unit/traceability-machine-ids.test.js",
@@ -1077,5 +1129,5 @@
1077
1129
  }
1078
1130
  ]
1079
1131
  },
1080
- "signature": "TssEwAMj9F/eOsspomZ1REWHcGRYm7uFGTXFm3zJCJKm42duzyzK/KAOdG0XjEqEESRo51vveq8jklxEu0wmAQ=="
1132
+ "signature": "3K1btPFoe+6u7Nk2opxXnAGF/NbPIv3vow6HbjRyiaCvDUVAUf/KLukvcH9uxbz9eZlTilznynFrRLZmEpj5Dw=="
1081
1133
  }
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.2",
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,8 +73,8 @@
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/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/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",
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/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",
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",
package/sbom.json CHANGED
@@ -55,7 +55,7 @@
55
55
  "hashes": [
56
56
  {
57
57
  "alg": "SHA-256",
58
- "content": "103d3f0520f79080445d07623b70195d7b34cae6d875eb60978aec254aca5c88"
58
+ "content": "a70fc43d33972f0472a3fdb6628f79b22c5a4cdd459b5d89bce06e240ca93bf1"
59
59
  }
60
60
  ]
61
61
  },
@@ -279,7 +279,7 @@
279
279
  },
280
280
  {
281
281
  "name": "dz:canonical-json-sha256-v2",
282
- "value": "2bacb5f426c3873d186bf142e95cb72d81a098c35f091a54b80d3d86e97fc1fb"
282
+ "value": "c9186f299be209dd8aecd28229225dece4fdb76e6750a0d43c31ae19cbeda387"
283
283
  }
284
284
  ]
285
285
  },
@@ -289,7 +289,7 @@
289
289
  "hashes": [
290
290
  {
291
291
  "alg": "SHA-256",
292
- "content": "349dbc45876cd5765ae48ff2224ab7f96d5df01a0d86361866b7740ed3cf4de0"
292
+ "content": "06e3dae22c533a81732b9870ae42d6b80b6e8419b3c90e11e1910e2a46888be8"
293
293
  }
294
294
  ]
295
295
  },
@@ -379,7 +379,7 @@
379
379
  "hashes": [
380
380
  {
381
381
  "alg": "SHA-256",
382
- "content": "2ab6ff0a3e15f9a9d5787077628e19936c3c9735b1549b1233ec4a331c2fd3f7"
382
+ "content": "86ed569a58e07f5aa2d31f6b932019345bc33abc00f5185601eb1f6ef9ce3815"
383
383
  }
384
384
  ]
385
385
  },
@@ -449,7 +449,7 @@
449
449
  "hashes": [
450
450
  {
451
451
  "alg": "SHA-256",
452
- "content": "b2bb83fce09f823a36c943f397d63ff9d9406da1dadc055c4f187f8ff964d1ce"
452
+ "content": "6908fa6c8ba770f829378a021d5f7e9a9bc79a15bdd67b278d8c6a765968b291"
453
453
  }
454
454
  ]
455
455
  },
@@ -703,6 +703,16 @@
703
703
  }
704
704
  ]
705
705
  },
706
+ {
707
+ "type": "file",
708
+ "name": "templates/.claude/hooks/check-review-contract.cjs",
709
+ "hashes": [
710
+ {
711
+ "alg": "SHA-256",
712
+ "content": "44e32ea31a4a71ceb6eccb0956006519de270eab787a79ab4884978bc04385ab"
713
+ }
714
+ ]
715
+ },
706
716
  {
707
717
  "type": "file",
708
718
  "name": "templates/.claude/hooks/check-source-version.cjs",
@@ -759,7 +769,7 @@
759
769
  "hashes": [
760
770
  {
761
771
  "alg": "SHA-256",
762
- "content": "6e30ccdcdbe3c36896b85821f8986077a0e4065fdff3b103d669fac7ad44670e"
772
+ "content": "50c08decec3e80ed325f50d7b062fbe0add47e8594002fcc165248492242ab56"
763
773
  }
764
774
  ]
765
775
  },
@@ -879,7 +889,7 @@
879
889
  "hashes": [
880
890
  {
881
891
  "alg": "SHA-256",
882
- "content": "879ca7b6ca9039c7b94f6b9df2eadca9ec5fd0f97da5f468d5ee723f3d47f438"
892
+ "content": "13bf073273820addeb87167402495b2f683cefac70a9f6cb07b6e054b1851e0f"
883
893
  }
884
894
  ]
885
895
  },
@@ -1799,7 +1809,7 @@
1799
1809
  "hashes": [
1800
1810
  {
1801
1811
  "alg": "SHA-256",
1802
- "content": "d2b8e71f4053c642f455a0f245ae18471ab25b7a21e0658f0fe410912a47bf8b"
1812
+ "content": "b4b394adf08feee552f39c83331398f119e0d4abf21e683fe4706da438b4a426"
1803
1813
  }
1804
1814
  ]
1805
1815
  },
@@ -1823,6 +1833,16 @@
1823
1833
  }
1824
1834
  ]
1825
1835
  },
1836
+ {
1837
+ "type": "file",
1838
+ "name": "templates/.claude/skills/requirements-validator/references/feature-report-contracts.md",
1839
+ "hashes": [
1840
+ {
1841
+ "alg": "SHA-256",
1842
+ "content": "df263cbce17fb5d9dec6514561c66f6283b3f19e2fc85056f0531bac615be0f1"
1843
+ }
1844
+ ]
1845
+ },
1826
1846
  {
1827
1847
  "type": "file",
1828
1848
  "name": "templates/.claude/skills/requirements-validator/references/invest-criteria.md",
@@ -1839,7 +1859,7 @@
1839
1859
  "hashes": [
1840
1860
  {
1841
1861
  "alg": "SHA-256",
1842
- "content": "49afe072f31f5b4f9a33f6b59487244f494b0f5587b6cc10c797c4de59510114"
1862
+ "content": "72104b74f07e0610f67f00b246b5225a530203bff225bacf7bf384bc6fd21cdf"
1843
1863
  }
1844
1864
  ]
1845
1865
  },
@@ -2023,6 +2043,16 @@
2023
2043
  }
2024
2044
  ]
2025
2045
  },
2046
+ {
2047
+ "type": "file",
2048
+ "name": "tests/e2e/feature-contour.test.js",
2049
+ "hashes": [
2050
+ {
2051
+ "alg": "SHA-256",
2052
+ "content": "a6e7c00e86fae150b834234efe34c2837da63b6794117a1bffd5c0de13505fe1"
2053
+ }
2054
+ ]
2055
+ },
2026
2056
  {
2027
2057
  "type": "file",
2028
2058
  "name": "tests/e2e/lifecycle.test.js",
@@ -2043,6 +2073,86 @@
2043
2073
  }
2044
2074
  ]
2045
2075
  },
2076
+ {
2077
+ "type": "file",
2078
+ "name": "tests/fixtures/feature-contour/docs/features/demo-gate/01_specification.md",
2079
+ "hashes": [
2080
+ {
2081
+ "alg": "SHA-256",
2082
+ "content": "264708a769ad0d07d715420d82278461c5f1b831dd365eaaf6be051db18d47e8"
2083
+ }
2084
+ ]
2085
+ },
2086
+ {
2087
+ "type": "file",
2088
+ "name": "tests/fixtures/feature-contour/docs/features/demo-gate/02_pseudocode.md",
2089
+ "hashes": [
2090
+ {
2091
+ "alg": "SHA-256",
2092
+ "content": "c8e58b32bdc9df32ad95f4eca2fb8625fe8e39194ad01fbd2a1b4abee6e6d7d4"
2093
+ }
2094
+ ]
2095
+ },
2096
+ {
2097
+ "type": "file",
2098
+ "name": "tests/fixtures/feature-contour/docs/features/demo-gate/03_architecture.md",
2099
+ "hashes": [
2100
+ {
2101
+ "alg": "SHA-256",
2102
+ "content": "7bebb1ac66f026a0c95afd986b17af60155be99e17d874f260106515b229bd14"
2103
+ }
2104
+ ]
2105
+ },
2106
+ {
2107
+ "type": "file",
2108
+ "name": "tests/fixtures/feature-contour/docs/features/demo-gate/04_refinement.md",
2109
+ "hashes": [
2110
+ {
2111
+ "alg": "SHA-256",
2112
+ "content": "b7f285a4070bfb8dd47c14be11149412c3df4663b99762a2fc05be24f2fa1b1e"
2113
+ }
2114
+ ]
2115
+ },
2116
+ {
2117
+ "type": "file",
2118
+ "name": "tests/fixtures/feature-contour/docs/features/demo-gate/05_completion.md",
2119
+ "hashes": [
2120
+ {
2121
+ "alg": "SHA-256",
2122
+ "content": "62eeec7cd3101fa0159c03bd17d5100a86d8ba29a1189cdc06f8b190c01c1dd8"
2123
+ }
2124
+ ]
2125
+ },
2126
+ {
2127
+ "type": "file",
2128
+ "name": "tests/fixtures/feature-contour/docs/features/demo-gate/review-report.md",
2129
+ "hashes": [
2130
+ {
2131
+ "alg": "SHA-256",
2132
+ "content": "12f8fa21aedeb2f73bdd8ff16f0c28e053693ec11815616181c085a31058436c"
2133
+ }
2134
+ ]
2135
+ },
2136
+ {
2137
+ "type": "file",
2138
+ "name": "tests/fixtures/feature-contour/docs/features/demo-gate/validation-report.md",
2139
+ "hashes": [
2140
+ {
2141
+ "alg": "SHA-256",
2142
+ "content": "4e1244a874996b522d07b9f23478bbe2416ed34f7b8cedbae460ada07dfd448f"
2143
+ }
2144
+ ]
2145
+ },
2146
+ {
2147
+ "type": "file",
2148
+ "name": "tests/fixtures/feature-contour/tests/demo.test.js",
2149
+ "hashes": [
2150
+ {
2151
+ "alg": "SHA-256",
2152
+ "content": "812a837075839d3b86367149a60f6e859d7623775788e10adaef53e5b249b20d"
2153
+ }
2154
+ ]
2155
+ },
2046
2156
  {
2047
2157
  "type": "file",
2048
2158
  "name": "tests/fixtures/prep-traceability-fixture/docs/features/order-refund/01_specification.md",
@@ -2069,7 +2179,7 @@
2069
2179
  "hashes": [
2070
2180
  {
2071
2181
  "alg": "SHA-256",
2072
- "content": "5eac599ea36b23f93b4f12de64da7ff1daff2df148032cc6fbf146ef8c0f7429"
2182
+ "content": "2e442fcb5f39de9f94c2284d385368f2e984bb17998556c41ac9f4f676a6134e"
2073
2183
  }
2074
2184
  ]
2075
2185
  },
@@ -2293,6 +2403,16 @@
2293
2403
  }
2294
2404
  ]
2295
2405
  },
2406
+ {
2407
+ "type": "file",
2408
+ "name": "tests/unit/check-review-contract.test.js",
2409
+ "hashes": [
2410
+ {
2411
+ "alg": "SHA-256",
2412
+ "content": "75d59bc1b45abc2e1b5723560d79533e0a767e75fc50024c8a13f34540a55e59"
2413
+ }
2414
+ ]
2415
+ },
2296
2416
  {
2297
2417
  "type": "file",
2298
2418
  "name": "tests/unit/check-source-version.test.js",
@@ -2469,7 +2589,7 @@
2469
2589
  "hashes": [
2470
2590
  {
2471
2591
  "alg": "SHA-256",
2472
- "content": "b8674f0ce01c888b9a0fa5da0ad707c171412c9ac8fc4dcd55d2d5a5ea989438"
2592
+ "content": "176115fafdca146eff0ebf87361fe6d0f26c7c3621cda03da0140ab72ba9f1ac"
2473
2593
  }
2474
2594
  ]
2475
2595
  },
@@ -2649,7 +2769,17 @@
2649
2769
  "hashes": [
2650
2770
  {
2651
2771
  "alg": "SHA-256",
2652
- "content": "e4fc7687dcf37d17bf2a059d3248c8c00526c104f6a0f6e104fa9ca6e00039ae"
2772
+ "content": "a601c25a1b1e697140d76216bcdabb80c86528f7bc81654581dd0c4dc43188d8"
2773
+ }
2774
+ ]
2775
+ },
2776
+ {
2777
+ "type": "file",
2778
+ "name": "tests/unit/traceability-completion-gate.test.js",
2779
+ "hashes": [
2780
+ {
2781
+ "alg": "SHA-256",
2782
+ "content": "082c141de9995c1d8bc51857b598d33e4a3f4947c325671283d3c6c70d224397"
2653
2783
  }
2654
2784
  ]
2655
2785
  },