@dzhechkov/p-replicator 1.12.0 → 1.13.1

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 (106) hide show
  1. package/.dz-manifest.json +225 -61
  2. package/CHANGELOG.md +148 -1
  3. package/LICENSE +21 -0
  4. package/MULTIPLATFORM_ROADMAP.md +1 -1
  5. package/README/eng/01_quickstart.md +2 -2
  6. package/README/eng/02_user_guide.md +1 -1
  7. package/README/eng/03_admin_guide.md +2 -2
  8. package/README/eng/05_architecture.md +1 -1
  9. package/README/eng/README.md +2 -1
  10. package/README/ru/01_quickstart.md +2 -2
  11. package/README/ru/02_user_guide.md +1 -1
  12. package/README/ru/03_admin_guide.md +2 -2
  13. package/README/ru/05_architecture.md +1 -1
  14. package/README/ru/README.md +2 -1
  15. package/README/ru/html/index.html +8 -8
  16. package/README.md +132 -9
  17. package/bin/cli.js +0 -0
  18. package/package.json +10 -11
  19. package/sbom.json +470 -60
  20. package/scripts/check-pipeline-gaps.sh +0 -0
  21. package/src/commands/init.js +1 -1
  22. package/src/rule-components.json +5 -1
  23. package/src/utils.js +32 -3
  24. package/templates/.claude/agents/product-discoverer.md +38 -0
  25. package/templates/.claude/agents/replicate-coordinator.md +11 -1
  26. package/templates/.claude/commands/feature.md +29 -5
  27. package/templates/.claude/commands/go.md +6 -8
  28. package/templates/.claude/commands/harvest.md +5 -7
  29. package/templates/.claude/commands/replicate.md +169 -44
  30. package/templates/.claude/commands/start.md +28 -7
  31. package/templates/.claude/hooks/capture-source-path.cjs +795 -0
  32. package/templates/.claude/hooks/check-canon.cjs +493 -0
  33. package/templates/.claude/hooks/check-embed-contract.cjs +374 -0
  34. package/templates/.claude/hooks/check-external-deps.cjs +288 -0
  35. package/templates/.claude/hooks/check-file-ownership.cjs +424 -0
  36. package/templates/.claude/hooks/check-handoff-manifest.cjs +367 -0
  37. package/templates/.claude/hooks/check-job-contract.cjs +501 -0
  38. package/templates/.claude/hooks/check-look-origin.cjs +240 -0
  39. package/templates/.claude/hooks/check-look-trace.cjs +385 -0
  40. package/templates/.claude/hooks/check-metric-source.cjs +296 -0
  41. package/templates/.claude/hooks/check-model-cost.cjs +470 -0
  42. package/templates/.claude/hooks/check-ports.cjs +27 -6
  43. package/templates/.claude/hooks/check-source-version.cjs +312 -0
  44. package/templates/.claude/hooks/check-swarm-receipts.cjs +197 -0
  45. package/templates/.claude/hooks/check-webhook-contract.cjs +535 -0
  46. package/templates/.claude/hooks/statusline.cjs +2 -2
  47. package/templates/.claude/rules/embeddable-widget.md +73 -0
  48. package/templates/.claude/rules/feature-lifecycle.md +5 -6
  49. package/templates/.claude/rules/incoming-webhooks.md +99 -0
  50. package/templates/.claude/rules/long-running-job.md +73 -0
  51. package/templates/.claude/rules/model-call-cost.md +85 -0
  52. package/templates/.claude/rules/replicate-pipeline.md +121 -52
  53. package/templates/.claude/skills/brutal-honesty-review/SKILL.md +9 -0
  54. package/templates/.claude/skills/cc-toolkit-generator-enhanced/SKILL.md +4 -0
  55. package/templates/.claude/skills/cc-toolkit-generator-enhanced/modules/03-generate-p0.md +46 -1
  56. package/templates/.claude/skills/cc-toolkit-generator-enhanced/modules/04-generate-p1.md +7 -1
  57. package/templates/.claude/skills/cc-toolkit-generator-enhanced/modules/06-package-deliver.md +20 -2
  58. package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/claude-md-strategy.md +7 -0
  59. package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/automation-commands.md +17 -0
  60. package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/feature-lifecycle-ent.md +43 -5
  61. package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/feature-lifecycle.md +43 -7
  62. package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/start-command.md +19 -1
  63. package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/swarm-file-evidence.md +151 -0
  64. package/templates/.claude/skills/goap-research-ed25519/SKILL.md +37 -22
  65. package/templates/.claude/skills/goap-research-ed25519/references/negative-results.md +94 -0
  66. package/templates/.claude/skills/goap-research-ed25519/scripts/check_report_evidence.py +368 -4
  67. package/templates/.claude/skills/goap-research-ed25519/scripts/ed25519_verifier.py +122 -5
  68. package/templates/.claude/skills/goap-research-ed25519/scripts/evidence_fetch.py +33 -16
  69. package/templates/.claude/skills/goap-research-ed25519/scripts/quote_provenance.py +342 -0
  70. package/templates/.claude/skills/goap-research-ed25519/scripts/test_ed25519_verifier.py +60 -0
  71. package/templates/.claude/skills/goap-research-ed25519/scripts/test_evidence_provenance.py +139 -6
  72. package/templates/.claude/skills/goap-research-ed25519/scripts/test_quote_provenance.py +274 -0
  73. package/templates/.claude/skills/goap-research-ed25519/scripts/test_suite_completeness.py +2 -1
  74. package/templates/.claude/skills/knowledge-extractor/SKILL.md +4 -0
  75. package/templates/.claude/skills/pipeline-forge/SKILL.md +18 -23
  76. package/templates/.claude/skills/pipeline-forge/examples/replicate-analysis.md +7 -2
  77. package/templates/.claude/skills/pipeline-forge/references/patterns-catalog.md +19 -1
  78. package/templates/.claude/skills/pipeline-forge/references/self-extracted-patterns.md +17 -6
  79. package/templates/.claude/skills/pipeline-forge/references/skill-anatomy.md +0 -1
  80. package/templates/.claude/skills/reverse-engineering-unicorn/modules/025-cjm-prototype.md +21 -1
  81. package/templates/.claude/skills/sparc-prd-mini/SKILL.md +173 -725
  82. package/tests/snapshot/baseline.json +60 -38
  83. package/tests/unit/capture-source-path.test.js +492 -0
  84. package/tests/unit/check-canon.test.js +403 -0
  85. package/tests/unit/check-embed-contract.test.js +422 -0
  86. package/tests/unit/check-external-deps.test.js +363 -0
  87. package/tests/unit/check-file-ownership.test.js +388 -0
  88. package/tests/unit/check-handoff-manifest.test.js +410 -0
  89. package/tests/unit/check-job-contract.test.js +514 -0
  90. package/tests/unit/check-look-origin.test.js +180 -0
  91. package/tests/unit/check-look-trace.test.js +420 -0
  92. package/tests/unit/check-metric-source.test.js +325 -0
  93. package/tests/unit/check-model-cost.test.js +425 -0
  94. package/tests/unit/check-ports.test.js +46 -2
  95. package/tests/unit/check-source-version.test.js +344 -0
  96. package/tests/unit/check-swarm-receipts.test.js +231 -0
  97. package/tests/unit/check-webhook-contract.test.js +536 -0
  98. package/tests/unit/db-port-rule.test.js +8 -2
  99. package/tests/unit/detection-ladder-registry.test.js +2 -2
  100. package/tests/unit/generator-swarm-contract.test.js +287 -0
  101. package/tests/unit/guard-honest-input-meta.test.js +64 -0
  102. package/tests/unit/honest-failure-rules.test.js +91 -9
  103. package/tests/unit/look-phase-contract.test.js +231 -0
  104. package/tests/unit/negative-conclusion-gate.test.js +300 -0
  105. package/tests/unit/quote-provenance.test.js +122 -0
  106. package/tests/unit/utils.test.js +40 -3
package/README.md CHANGED
@@ -14,7 +14,7 @@
14
14
  [![Tests](https://img.shields.io/badge/tests-440%20pass%20%7C%203%20skip-22c55e?style=flat-square)](#test-infrastructure)
15
15
  [![Skills](https://img.shields.io/badge/skills-10-8b5cf6?style=flat-square)](#skills-reference)
16
16
  [![Commands](https://img.shields.io/badge/slash%20commands-11-f59e0b?style=flat-square)](#commands-reference)
17
- [![Hooks](https://img.shields.io/badge/hooks-10-3b82f6?style=flat-square)](#hooks-system)
17
+ [![Hooks](https://img.shields.io/badge/hooks-24-3b82f6?style=flat-square)](#hooks-system)
18
18
  [![SPARC Pipeline](https://img.shields.io/badge/SPARC-5%20phases-ec4899?style=flat-square)](#pipeline-overview--replicate-phases)
19
19
 
20
20
  <br>
@@ -101,12 +101,29 @@
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**, **9 rules**, **10 hook utilities**, and a `settings.json` with pre-configured hooks and a multi-line statusline dashboard.
104
+ `@dzhechkov/p-replicator` installs a ready-made `.claude/` toolkit into any project: **11 slash commands**, **10 skills**, **4 agents**, **13 rules**, **24 hook utilities**, and a `settings.json` with pre-configured hooks and a multi-line statusline dashboard.
105
105
 
106
- The flagship `/replicate` command takes a project through a **5-phase pipeline**:
106
+ The flagship `/replicate` command takes a project through a **6-phase pipeline**:
107
107
 
108
108
  ```
109
109
  Phase 0 (optional) Product Discovery reverse-engineering of similar companies
110
+ Phase 0.5 (ALWAYS) Source Product Profile capture the LOOK of the product being replicated
111
+
112
+ > **Third-party design analyses enter as HYPOTHESES (v1.13).** A ready-made DESIGN.md from a
113
+ > library like styles.refero.design is a claim, not a measurement: the profile header now carries
114
+ > `**Происхождение:**` (closed list: `прокликано | сторонний-разбор | вручную | не снято`), and a
115
+ > `сторонний-разбор` row REQUIRES the analysis source + its own capture date (read from the
116
+ > source's markup, e.g. `extractedAt` — never from a tool's paraphrase). Hypothesis rows never
117
+ > reach `Specification.md` without a DATED live confirmation; the gate is
118
+ > `node .claude/hooks/check-look-origin.cjs .` (exit `0` verified · `1` a promoted hypothesis is
119
+ > NAMED · `2` the check did not run — never "all clear").
120
+ >
121
+ > **Quoted evidence is now byte-verifiable (v1.13).** In `goap-research-ed25519`, every quote
122
+ > carries a closed acquisition method (`raw-fetch | tool-summary | search-listing | manual`), and
123
+ > the "verbatim" verdict can ONLY be produced by `verify_verbatim` comparing the quote against a
124
+ > captured source excerpt (sha256-bound, self-gitignoring store) — a report cannot attest its own
125
+ > quotes, and a tool paraphrase is categorically capped below "verbatim". A quoted phrase absent
126
+ > from its stored source is a named violation.
110
127
  Phase 1 Planning 11 SPARC documents (PRD, Architecture, Pseudocode, ...)
111
128
  Phase 2 Validation 5-agent swarm validates against INVEST + SMART
112
129
  Phase 3 Toolkit Generation project-specific agents, rules, skills
@@ -263,7 +280,7 @@ This creates:
263
280
  - `.claude/commands/` — 11 slash commands (`/replicate`, `/run`, `/feature`, ...)
264
281
  - `.claude/agents/` — 4 pipeline agents
265
282
  - `.claude/rules/` — 9 governance rules
266
- - `.claude/hooks/` — 10 cross-platform Node scripts
283
+ - `.claude/hooks/` — 24 cross-platform Node scripts
267
284
  - `.claude/settings.json` — hooks + statusline configuration
268
285
  - `.p-replicator.json` — install manifest
269
286
 
@@ -289,8 +306,8 @@ This creates:
289
306
  | **Skills** | 10 | 92 files (880K+ chars — MEASURED via `wc -c` over `templates/.claude/skills`: 880,679). Modular architecture: foundation → composite → master orchestrator |
290
307
  | **Commands** | 11 | `/replicate`, `/harvest`, `/start`, `/plan`, `/feature`, `/go`, `/run`, `/next`, `/myinsights`, `/docs`, `/deploy` |
291
308
  | **Agents** | 4 | `replicate-coordinator`, `product-discoverer`, `doc-validator`, `harvest-coordinator` |
292
- | **Rules** | 9 | `cost-of-detection-ladder`, `replicate-pipeline`, `skill-interface-protocol`, `git-workflow`, `insights-capture`, `feature-lifecycle`, `docker-ports`, `swarm-file-evidence`, `honest-configuration` |
293
- | **Hooks** | 10 | Ten cross-platform Node utilities, including the harvest insight writer |
309
+ | **Rules** | 13 | `cost-of-detection-ladder`, `replicate-pipeline`, `skill-interface-protocol`, `git-workflow`, `insights-capture`, `feature-lifecycle`, `docker-ports`, `swarm-file-evidence`, `honest-configuration`, `embeddable-widget`, `incoming-webhooks` |
310
+ | **Hooks** | 15 | Fifteen cross-platform Node utilities: 4 wired to events, 11 invoked deliberately (the harvest insight writer, the status line, and seven `check-*` gates) |
294
311
  | **Settings** | 1 | `settings.json` with statusLine + SessionStart + UserPromptSubmit + Stop hooks pre-configured |
295
312
 
296
313
  After running `/replicate`, the toolkit also generates **project-specific** artifacts:
@@ -427,6 +444,102 @@ A conscious rejection **with a reason written down** passes; a silent drop does
427
444
  **What it does NOT prove:** that anything was built, or that copying a competitor's growth move is
428
445
  lawful. It proves an obligation was carried forward, nothing more.
429
446
 
447
+ ### `check-look-trace.cjs` — the source product's LOOK was not captured and dropped
448
+
449
+ ```bash
450
+ node .claude/hooks/check-look-trace.cjs .
451
+ ```
452
+
453
+ ```
454
+ ❌ часть обязательств по облику потеряна (1 из 2):
455
+ • FR-LOOK-002 (путь)
456
+ Каждое надо либо перенести в docs/Specification.md, либо отклонить С ПРИЧИНОЙ — молча уронить нельзя.
457
+ ```
458
+
459
+ When a project reproduces an existing product, that product's LOOK — palette, typography, density,
460
+ screen layout, the order of steps — is the substance of the task. **Phase 0.5 (Source Product
461
+ Profile)** asks that question in every run, including the `--from-docs` entry that skips Phase 0
462
+ entirely, and writes `docs/source-product-profile.md`. This checker asks whether its
463
+ `FR-LOOK-nnn` rows survived into `docs/Specification.md`. A conscious rejection **with a reason
464
+ written down** passes; a silent drop does not.
465
+
466
+ Exit `2` covers five states, and none of them is a pass: no profile (the phase did not run), no
467
+ Specification, an untouched template table, an EMPTY `путь` axis that was never declared — and the
468
+ two legitimate non-captures, `ИСТОЧНИКА НЕТ` (the project replicates nothing) and `НЕ ИЗМЕРЕНО` (a
469
+ source was NAMED but could not be captured, with a reason from the closed list `no-browser-mcp` |
470
+ `no-browser` | `unreachable` | `auth-required` | `out-of-scope` | `bot-protected` | `timeout` |
471
+ `robots-disallowed`). Per the shipped `honest-configuration` rule (CFG-I4), an unreachable source of
472
+ truth yields UNKNOWN, never a plausible value — a palette invented for a product nobody looked at is
473
+ exactly that plausible value.
474
+
475
+ **Two axes, one identifier family, separate answers.** `облик` (what is seen) and `путь` (the order
476
+ of screens) are a COLUMN of `FR-LOOK-nnn`, never a second namespace — but they fail apart, so each
477
+ declares its own status: `**Статус съёмки:**` and `**Статус съёмки (путь):**`. The path declaration
478
+ is demanded only when the axis carries no rows; rows are its answer. A proven loss outranks an
479
+ unanswered axis — exit `1` beats exit `2`.
480
+
481
+ The `облик` capture is done by the canonical `clone-website` skill from the separate
482
+ [`@dzhechkov/skills-website-cloner`](https://www.npmjs.com/package/@dzhechkov/skills-website-cloner)
483
+ package, run recon-only. It is **called, never vendored** (ADR-0001): unavailable prerequisites make
484
+ the outcome `НЕ ИЗМЕРЕНО` with a named reason, they never stall the pipeline.
485
+
486
+ ### `capture-source-path.cjs` — the `путь` axis, clicked through in a browser
487
+
488
+ ```bash
489
+ node .claude/hooks/capture-source-path.cjs https://example.test/ --max-pages 5 --delay-ms 1500
490
+ ```
491
+
492
+ ```
493
+ ℹ️ robots.txt прочитан, стартовый путь разрешён
494
+ ℹ️ шаг 2 — экран входа. Останавливаемся: за вход не ходим, это законная последняя точка пути.
495
+
496
+ ✅ СНЯТ: ось «путь», 2 экрана(ов). Доказательства: .p-replicator/source-path-capture
497
+
498
+ | FR-LOOK-005 | Шаг 1 из 2; стартовый экран; полей формы: 0; заметных призывов: 1 из 2; уровней заголовков: 2 | путь | / | прокликано …, step-01.aria.txt | ЧЕРНОВИК |
499
+ | FR-LOOK-006 | Шаг 2 из 2; достижим одним действием с предыдущего; полей формы: 2; …; это экран входа | путь | /signup | прокликано …, step-02.aria.txt | ЧЕРНОВИК |
500
+ | FR-LOOK-007 | Последовательность экранов до конца снятого пути: 2 экрана(ов), / → /signup; путь упирается в экран входа | путь | / | прокликано …, capture.json | ЧЕРНОВИК |
501
+
502
+ Замеренные закономерности СТАРТОВОГО экрана (материал для оси «облик», строк не выпускаем):
503
+ шаг сетки отступов: 4px (доля 0.91) · кеглей: 3 · начертаний: 3 · радиусов: 1 · переменных в :root: 3
504
+ ```
505
+
506
+ `clone-website` captures what is visible at ONE url; a person's route through a product —
507
+ registration, onboarding, first value, paywall — was captured by nothing. This walks it and emits
508
+ rows in the SAME `FR-LOOK-nnn` family, continuing the profile's numbering, on the `путь` axis.
509
+
510
+ Three outcomes, each with its own exit code: `0` captured · `1` the source opened but has no onward
511
+ step (a one-screen product — a legitimate `ИСТОЧНИКА НЕТ` for this axis, and a PROVEN negative, not
512
+ blindness) · `2` `НЕ ИЗМЕРЕНО` with a reason from the closed list, printed as the exact profile
513
+ lines to paste.
514
+
515
+ **Playwright is an external prerequisite** — this package ships ZERO dependencies, so the module is
516
+ resolved on the machine at run time (`PLAYWRIGHT_MODULE`, the project, `npm root -g`) and its
517
+ absence is the honest outcome `no-browser`, never a crash:
518
+ `npm i -D playwright && npx playwright install chromium`.
519
+
520
+ **What it captures, and what it refuses to.** REGULARITIES — the spacing step, the type scale, how
521
+ many hierarchy levels, how many form fields, how many screens to first value — never VALUES to carry
522
+ over, such as this exact purple. Only computed styles and semantic roles (aria, form types,
523
+ accessible names); **never class names** like `sx-ds2y8i`, which bundlers change on every build of
524
+ someone else's site. Third-party CSS and DOM are copyrighted code — a basis for measurement, never
525
+ material to copy — so they are not stored by default, and the evidence directory ships its own
526
+ `.gitignore`. `robots.txt` is read before crawling more than one page, and a refusal is the outcome
527
+ `robots-disallowed`. Authentication and any circumvention are refused outright: a login screen is
528
+ recorded as the legitimate last step and the crawl stops there. One thread, a pause between pages
529
+ (minimum 250 ms), a hard page cap of 12 — exceeding either is clamped out loud.
530
+
531
+ **When to run it:** inside Phase 0.5, once the source product is named.
532
+
533
+ **What it does NOT prove:** the designer's intent. It reports "padding 8px ×137", never "a 4pt
534
+ step is the design language"; the reading is yours.
535
+
536
+ **When to run it:** at the Phase 1 → Phase 2 boundary, beside `check-growth-trace.cjs`. Run at the
537
+ end of Phase 0.5 itself it answers `2` by construction — nothing has been promoted yet — and there
538
+ it only tells you the profile parses.
539
+
540
+ **What it does NOT prove:** that the interface resembles the source. It proves an obligation was
541
+ carried forward. Resemblance is proven by visual comparison, not by matching identifiers.
542
+
430
543
  ### `check-pipeline-gaps.sh` — FR/NFR/AC keys are joins, not decoration
431
544
 
432
545
  The package owns the checker at `scripts/check-pipeline-gaps.sh`. `/feature` resolves that packaged
@@ -479,7 +592,7 @@ npx @dzhechkov/p-replicator verify
479
592
 
480
593
  The command checks:
481
594
 
482
- - **Pre-shipped contract** (must-have): 10 skills + 11 commands + 4 agents + 9 rules + settings.json + 10 hooks
595
+ - **Pre-shipped contract** (must-have): 10 skills + 11 commands + 4 agents + 13 rules + settings.json + 24 hooks
483
596
  - **Post-/replicate hints** (advisory): CLAUDE.md, project-specific agents, feature-roadmap.json, security rules, etc.
484
597
 
485
598
  **Exit codes:**
@@ -852,7 +965,7 @@ P-Replicator V1.5.x ● user │ Sonnet 4.7
852
965
  🚀 Pipeline /<cmd> ▓▓▓░░░░ 50% │ Phase: VALIDATE (2/4) │ Last: /replicate
853
966
  🎯 Roadmap [●●●○○○○○] mvp 3/8 │ Done 5/12 │ ▶ auth-jwt │ Domain: banking
854
967
  📊 SPARC ●11/11 │ 🟢 78/100 │ Plans ●3 │ ADRs ●2 │ Harvest 2026-05-05
855
- 🛠️ Toolkit Skills ●10/10 │ Cmds ●11/11 │ Agents ●4+3 │ Rules ●9+2 │ Hooks ●9/9
968
+ 🛠️ Toolkit Skills ●10/10 │ Cmds ●11/11 │ Agents ●4+3 │ Rules ●13+2 │ Hooks ●17/17
856
969
  💡 Insights ●12 (2026-05-06) │ Tests 85/85 ✓ │ MCP ●1/1 │ Settings ✓ │ 🧬 Keysarium ✓
857
970
  ```
858
971
 
@@ -888,7 +1001,7 @@ For internals, see [admin guide](./README/eng/03_admin_guide.md#statusline--dash
888
1001
 
889
1002
  ## 🪝 Hooks System
890
1003
 
891
- `p-replicator` ships **10 cross-platform Node utilities** in `.claude/hooks/`. The Bash traceability
1004
+ `p-replicator` ships **11 cross-platform Node utilities** in `.claude/hooks/`. The Bash traceability
892
1005
  gate described above remains a package script and is resolved directly by `/feature`; it is not a
893
1006
  Claude Code hook.
894
1007
 
@@ -901,6 +1014,16 @@ Claude Code hook.
901
1014
  | `statusline.cjs` | (statusLine config) | Multi-line dashboard above the prompt |
902
1015
  | `state-update.cjs` | (utility) | Argv-driven helper for writing `.claude/.p-replicator-state.json` |
903
1016
  | `write-insight.cjs` | (utility, invoked by `/harvest`) | Establish Markdown, return `created`/`appended`/`duplicate`, then best-effort project the same record through dz |
1017
+ | `check-ports.cjs` | (utility, invoke deliberately) | docker-ports Правило №0 against a real Compose config — exits 0/1/2 |
1018
+ | `check-docs-complete.cjs` | (utility, invoke deliberately) | Are the Phase-1 documents written and placeholder-free, before the Phase-2 swarm — exits 0/1/2 |
1019
+ | `check-growth-trace.cjs` | (utility, invoke deliberately) | Did the M5 `FR-GROWTH-nnn` seed reach `docs/Specification.md` — exits 0/1/2 |
1020
+ | `check-look-trace.cjs` | (utility, invoke deliberately) | Did the Phase-0.5 `FR-LOOK-nnn` source-look seed reach `docs/Specification.md` — exits 0/1/2 |
1021
+ | `capture-source-path.cjs` | (utility, invoke deliberately) | Phase-0.5 `путь` axis: click through the source product in a browser and emit `FR-LOOK-nnn` rows — exits 0/1/2 |
1022
+
1023
+ The four `check-*` utilities and `capture-source-path.cjs` are **not wired to any event**, and that
1024
+ is deliberate: a hook of this package is non-blocking by contract (pinned by a test that requires
1025
+ exit 0), so a hook could only print — it could never refuse anything. Invoke them where their answer
1026
+ changes a decision.
904
1027
 
905
1028
  ### Cross-platform discipline
906
1029
 
package/bin/cli.js CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dzhechkov/p-replicator",
3
- "version": "1.12.0",
3
+ "version": "1.13.1",
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,15 +19,6 @@
19
19
  ".dz-manifest.json",
20
20
  "sbom.json"
21
21
  ],
22
- "scripts": {
23
- "prepublishOnly": "node --test tests/snapshot/templates.test.js && node ../../../scripts/prepublish-gate.mjs",
24
- "test": "node --test tests/unit/honest-failure-rules.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/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",
25
- "test:unit": "node --test tests/unit/honest-failure-rules.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/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",
26
- "test:e2e": "node --test tests/e2e/lifecycle.test.js tests/e2e/packed-insights-writer.test.js",
27
- "test:snapshot": "node --test tests/snapshot/templates.test.js",
28
- "test:doctor": "node bin/cli.js doctor",
29
- "snapshot:baseline": "node tests/snapshot/update-baseline.js"
30
- },
31
22
  "keywords": [
32
23
  "claude",
33
24
  "claude-code",
@@ -80,5 +71,13 @@
80
71
  },
81
72
  "publishConfig": {
82
73
  "access": "public"
74
+ },
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",
78
+ "test:e2e": "node --test tests/e2e/lifecycle.test.js tests/e2e/packed-insights-writer.test.js",
79
+ "test:snapshot": "node --test tests/snapshot/templates.test.js",
80
+ "test:doctor": "node bin/cli.js doctor",
81
+ "snapshot:baseline": "node tests/snapshot/update-baseline.js"
83
82
  }
84
- }
83
+ }