@dzhechkov/p-replicator 1.10.4 → 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 (136) hide show
  1. package/.dz-manifest.json +312 -76
  2. package/CHANGELOG.md +232 -0
  3. package/MULTIPLATFORM_ROADMAP.md +1 -1
  4. package/README/eng/01_quickstart.md +3 -3
  5. package/README/eng/02_user_guide.md +1 -1
  6. package/README/eng/03_admin_guide.md +2 -2
  7. package/README/eng/04_api_reference.md +11 -5
  8. package/README/eng/05_architecture.md +1 -1
  9. package/README/eng/README.md +2 -1
  10. package/README/ru/01_quickstart.md +3 -3
  11. package/README/ru/02_user_guide.md +1 -1
  12. package/README/ru/03_admin_guide.md +2 -2
  13. package/README/ru/04_api_reference.md +11 -5
  14. package/README/ru/05_architecture.md +1 -1
  15. package/README/ru/README.md +2 -1
  16. package/README/ru/html/index.html +9 -9
  17. package/README.md +278 -39
  18. package/package.json +5 -4
  19. package/sbom.json +665 -75
  20. package/scripts/check-pipeline-gaps.sh +413 -0
  21. package/src/commands/doctor.js +94 -4
  22. package/src/commands/init.js +1 -1
  23. package/src/rule-components.json +15 -0
  24. package/src/utils.js +35 -11
  25. package/templates/.claude/agents/harvest-coordinator.md +10 -1
  26. package/templates/.claude/agents/product-discoverer.md +38 -0
  27. package/templates/.claude/agents/replicate-coordinator.md +11 -1
  28. package/templates/.claude/commands/feature.md +81 -9
  29. package/templates/.claude/commands/go.md +9 -0
  30. package/templates/.claude/commands/harvest.md +39 -3
  31. package/templates/.claude/commands/myinsights.md +21 -26
  32. package/templates/.claude/commands/replicate.md +171 -37
  33. package/templates/.claude/commands/start.md +29 -0
  34. package/templates/.claude/hooks/capture-source-path.cjs +795 -0
  35. package/templates/.claude/hooks/check-canon.cjs +493 -0
  36. package/templates/.claude/hooks/check-embed-contract.cjs +374 -0
  37. package/templates/.claude/hooks/check-external-deps.cjs +288 -0
  38. package/templates/.claude/hooks/check-file-ownership.cjs +424 -0
  39. package/templates/.claude/hooks/check-handoff-manifest.cjs +367 -0
  40. package/templates/.claude/hooks/check-job-contract.cjs +501 -0
  41. package/templates/.claude/hooks/check-look-origin.cjs +240 -0
  42. package/templates/.claude/hooks/check-look-trace.cjs +385 -0
  43. package/templates/.claude/hooks/check-metric-source.cjs +296 -0
  44. package/templates/.claude/hooks/check-model-cost.cjs +470 -0
  45. package/templates/.claude/hooks/check-ports.cjs +434 -24
  46. package/templates/.claude/hooks/check-source-version.cjs +312 -0
  47. package/templates/.claude/hooks/check-swarm-receipts.cjs +197 -0
  48. package/templates/.claude/hooks/check-webhook-contract.cjs +535 -0
  49. package/templates/.claude/hooks/session-insights.cjs +158 -25
  50. package/templates/.claude/hooks/statusline.cjs +2 -2
  51. package/templates/.claude/hooks/write-insight.cjs +253 -0
  52. package/templates/.claude/rules/cost-of-detection-ladder.md +96 -0
  53. package/templates/.claude/rules/docker-ports.md +41 -19
  54. package/templates/.claude/rules/embeddable-widget.md +73 -0
  55. package/templates/.claude/rules/feature-lifecycle.md +13 -3
  56. package/templates/.claude/rules/honest-configuration.md +54 -0
  57. package/templates/.claude/rules/incoming-webhooks.md +99 -0
  58. package/templates/.claude/rules/insights-capture.md +10 -5
  59. package/templates/.claude/rules/long-running-job.md +73 -0
  60. package/templates/.claude/rules/model-call-cost.md +85 -0
  61. package/templates/.claude/rules/replicate-pipeline.md +123 -52
  62. package/templates/.claude/rules/skill-interface-protocol.md +1 -0
  63. package/templates/.claude/rules/swarm-file-evidence.md +46 -0
  64. package/templates/.claude/settings.json +13 -1
  65. package/templates/.claude/skills/brutal-honesty-review/SKILL.md +9 -0
  66. package/templates/.claude/skills/cc-toolkit-generator-enhanced/SKILL.md +4 -0
  67. package/templates/.claude/skills/cc-toolkit-generator-enhanced/modules/03-generate-p0.md +46 -1
  68. package/templates/.claude/skills/cc-toolkit-generator-enhanced/modules/04-generate-p1.md +7 -1
  69. package/templates/.claude/skills/cc-toolkit-generator-enhanced/modules/06-package-deliver.md +20 -2
  70. package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/claude-md-strategy.md +7 -0
  71. package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/automation-commands.md +17 -0
  72. package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/feature-lifecycle-ent.md +43 -5
  73. package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/feature-lifecycle.md +43 -7
  74. package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/start-command.md +19 -1
  75. package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/swarm-file-evidence.md +151 -0
  76. package/templates/.claude/skills/goap-research-ed25519/SKILL.md +37 -22
  77. package/templates/.claude/skills/goap-research-ed25519/references/negative-results.md +94 -0
  78. package/templates/.claude/skills/goap-research-ed25519/scripts/check_report_evidence.py +368 -4
  79. package/templates/.claude/skills/goap-research-ed25519/scripts/ed25519_verifier.py +122 -5
  80. package/templates/.claude/skills/goap-research-ed25519/scripts/evidence_fetch.py +33 -16
  81. package/templates/.claude/skills/goap-research-ed25519/scripts/quote_provenance.py +342 -0
  82. package/templates/.claude/skills/goap-research-ed25519/scripts/test_ed25519_verifier.py +60 -0
  83. package/templates/.claude/skills/goap-research-ed25519/scripts/test_evidence_provenance.py +139 -6
  84. package/templates/.claude/skills/goap-research-ed25519/scripts/test_quote_provenance.py +274 -0
  85. package/templates/.claude/skills/goap-research-ed25519/scripts/test_suite_completeness.py +2 -1
  86. package/templates/.claude/skills/knowledge-extractor/SKILL.md +4 -0
  87. package/templates/.claude/skills/knowledge-extractor/modules/01-agent-review.md +16 -5
  88. package/templates/.claude/skills/pipeline-forge/SKILL.md +18 -23
  89. package/templates/.claude/skills/pipeline-forge/examples/replicate-analysis.md +7 -2
  90. package/templates/.claude/skills/pipeline-forge/references/patterns-catalog.md +19 -1
  91. package/templates/.claude/skills/pipeline-forge/references/self-extracted-patterns.md +17 -6
  92. package/templates/.claude/skills/pipeline-forge/references/skill-anatomy.md +0 -1
  93. package/templates/.claude/skills/reverse-engineering-unicorn/modules/025-cjm-prototype.md +21 -1
  94. package/templates/.claude/skills/sparc-prd-mini/SKILL.md +234 -716
  95. package/tests/e2e/lifecycle.test.js +55 -9
  96. package/tests/e2e/packed-insights-writer.test.js +308 -0
  97. package/tests/fixtures/prep-traceability-fixture/docs/features/order-refund/01_specification.md +29 -0
  98. package/tests/fixtures/prep-traceability-fixture/docs/features/order-refund/02_pseudocode.md +57 -0
  99. package/tests/snapshot/baseline.json +72 -46
  100. package/tests/snapshot/templates.test.js +47 -0
  101. package/tests/unit/absence-is-not-emptiness.test.js +15 -1
  102. package/tests/unit/capture-source-path.test.js +492 -0
  103. package/tests/unit/check-canon.test.js +403 -0
  104. package/tests/unit/check-embed-contract.test.js +422 -0
  105. package/tests/unit/check-external-deps.test.js +363 -0
  106. package/tests/unit/check-file-ownership.test.js +388 -0
  107. package/tests/unit/check-handoff-manifest.test.js +410 -0
  108. package/tests/unit/check-job-contract.test.js +514 -0
  109. package/tests/unit/check-look-origin.test.js +180 -0
  110. package/tests/unit/check-look-trace.test.js +420 -0
  111. package/tests/unit/check-metric-source.test.js +325 -0
  112. package/tests/unit/check-model-cost.test.js +425 -0
  113. package/tests/unit/check-pipeline-gaps.test.js +94 -0
  114. package/tests/unit/check-ports.test.js +773 -2
  115. package/tests/unit/check-source-version.test.js +344 -0
  116. package/tests/unit/check-swarm-receipts.test.js +231 -0
  117. package/tests/unit/check-webhook-contract.test.js +536 -0
  118. package/tests/unit/db-port-rule.test.js +43 -6
  119. package/tests/unit/detection-ladder-contract.test.js +302 -0
  120. package/tests/unit/detection-ladder-registry.test.js +52 -0
  121. package/tests/unit/doctor-insight-flow.test.js +315 -0
  122. package/tests/unit/external-dependency-check.test.js +19 -19
  123. package/tests/unit/generator-swarm-contract.test.js +287 -0
  124. package/tests/unit/guard-honest-input-meta.test.js +64 -0
  125. package/tests/unit/honest-failure-rules.test.js +574 -0
  126. package/tests/unit/hooks-project-anchored.test.js +67 -3
  127. package/tests/unit/insights-docs-tell-the-truth.test.js +52 -31
  128. package/tests/unit/insights-dz-delegation.test.js +197 -0
  129. package/tests/unit/insights-writer.test.js +285 -0
  130. package/tests/unit/look-phase-contract.test.js +231 -0
  131. package/tests/unit/negative-conclusion-gate.test.js +300 -0
  132. package/tests/unit/quote-provenance.test.js +122 -0
  133. package/tests/unit/shipped-suite-context.test.js +3 -1
  134. package/tests/unit/traceability-machine-ids.test.js +413 -0
  135. package/tests/unit/traceability-negative-fixture.test.js +322 -0
  136. package/tests/unit/utils.test.js +40 -2
@@ -31,6 +31,7 @@ All skills are available locally. Read their SKILL.md when needed:
31
31
  | Skill | Path | Phase |
32
32
  |-------|------|-------|
33
33
  | reverse-engineering-unicorn | `.claude/skills/reverse-engineering-unicorn/SKILL.md` | Phase 0 |
34
+ | clone-website *(EXTERNAL — not pre-shipped)* | `.claude/skills/clone-website/SKILL.md` — install `@dzhechkov/skills-website-cloner` | Phase 0.5 (recon-only) |
34
35
  | sparc-prd-mini | `.claude/skills/sparc-prd-mini/SKILL.md` | Phase 1 |
35
36
  | explore | `.claude/skills/explore/SKILL.md` | Phase 1 (dependency) |
36
37
  | goap-research-ed25519 | `.claude/skills/goap-research-ed25519/SKILL.md` | Phase 1 (dependency) |
@@ -48,11 +49,13 @@ All skills are available locally. Read their SKILL.md when needed:
48
49
  ## Pipeline
49
50
 
50
51
  ```
51
- INPUT → [PRODUCT DISCOVERY] → PLANNING → VALIDATION → TOOLKIT → FINALIZE
52
- (optional) sparc-prd requirements cc-toolkit commit
53
- -mini -validator -generator & report
52
+ INPUT → [PRODUCT DISCOVERY] → SOURCE PRODUCT → PLANNING → VALIDATION → TOOLKIT → FINALIZE
53
+ (optional) PROFILE sparc-prd requirements cc-toolkit commit
54
+ (ALWAYS) -mini -validator -generator & report
54
55
  ```
55
56
 
57
+ Фаза 0 пропускается входом `--from-docs`; **Фаза 0.5 выполняется всегда** — потому и отдельная.
58
+
56
59
  **Note:** sparc-prd-mini v2 already includes Explore, Research, and Solve phases
57
60
  internally via skill references. The coordinator does NOT duplicate these phases.
58
61
 
@@ -80,17 +83,13 @@ but distinct from generated SPARC outputs.
80
83
  ### Modified pipeline flow when triggered
81
84
 
82
85
  - **Phase 0** (Product Discovery): SKIPPED entirely (no reverse-engineering-unicorn invocation)
83
- - **Phase 1** (sparc-prd-mini): MODIFIED
84
- - Run in **AUTO mode** do NOT ask interactive clarification questions
85
- - SKIP internal sub-phases Explore / Research / Solve (their job is to
86
- generate the answers that already exist in user docs)
87
- - READ all files in user-provided path as pre-filled context
88
- - Generate the 11 standardized SPARC documents in `docs/`, mapping content
89
- from existing docs to appropriate slots (PRD, Solution_Strategy,
90
- Specification, Pseudocode, Architecture, Refinement, Completion,
91
- Research_Findings, Final_Summary, C4_Diagrams, ADR)
92
- - For SPARC slots without source content in existing docs, mark with a
93
- `[GAP: needs <description>]` placeholder rather than asking the user
86
+ - **Phase 0.5** (Source Product Profile): **RUNS — this entry does NOT skip it**; the skip is Phase 0
87
+ alone, and a project arriving with someone else's docs is usually a replication. Where those docs
88
+ describe the source, record `СНЯТ` from them; where they do not, `НЕ ИЗМЕРЕНО` with a reason.
89
+ - **Phase 1** (sparc-prd-mini): MODIFIED **AUTO mode** (no interactive questions); SKIP
90
+ Explore/Research/Solve (they generate answers the user docs already hold); READ the user path as
91
+ pre-filled context; generate the 11 SPARC documents in `docs/`, mapping existing content to slots;
92
+ a slot with no source content gets `[GAP: needs <description>]` instead of a question
94
93
  - **Phase 2** (validation): runs UNCHANGED (validates the generated SPARC docs)
95
94
  - **Phase 3** (toolkit generation): runs UNCHANGED
96
95
  - **Phase 4** (finalize): runs UNCHANGED
@@ -142,7 +141,7 @@ above, but applies to ad-hoc feature additions rather than full project bootstra
142
141
 
143
142
  ### Start
144
143
 
145
- 1. Briefly explain the phases (4 main + 1 optional)
144
+ 1. Briefly explain the phases (4 main + 1 optional Phase 0 + the mandatory Phase 0.5)
146
145
  2. Mention the target architecture (distributed monolith + Docker на VPS)
147
146
  3. Determine project type → is Product Discovery needed?
148
147
  4. Begin with the relevant phase
@@ -207,6 +206,106 @@ project has no growth requirements, and no consumer may read it that way.
207
206
  ═══════════════════════════════════════════════════════════════
208
207
  ```
209
208
 
209
+ ### Phase 0.5: SOURCE PRODUCT PROFILE (обязательная — выполняется ВСЕГДА)
210
+
211
+ Когда проект воспроизводит существующий продукт, его ОБЛИК — палитра, типографика, плотность,
212
+ компоновка экранов, порядок шагов — сердцевина задачи, а не приятность. Все шесть модулей Фазы 0
213
+ разбирают бизнес, а палитру `025-cjm-prototype.md` НАЗНАЧАЛ по отрасли: конвейер, чья задача
214
+ воспроизвести продукт, выдумывал ему внешность.
215
+
216
+ **Почему ОТДЕЛЬНАЯ фаза, а не модуль Фазы 0.** Вход `--from-docs` / `--skip-discovery` пропускает
217
+ Фазу 0 целиком. Модуль внутри неё выключился бы ровно для проектов с чужой документацией — то есть
218
+ чаще всего именно для клонов. Поэтому фаза стоит ПОСЛЕ чекпоинта Фазы 0 и от него не зависит.
219
+
220
+ **Съёмка — навык `clone-website` из ОТДЕЛЬНОГО пакета
221
+ [`@dzhechkov/skills-website-cloner`](https://www.npmjs.com/package/@dzhechkov/skills-website-cloner),
222
+ режим только разведка. ВЫЗЫВАЕТСЯ, НЕ КОПИРУЕТСЯ** — вендорить его сюда запрещено (ADR-0001 +
223
+ `sources.json`): `npx @dzhechkov/skills-website-cloner init`. Навыка нет или браузерный MCP
224
+ недоступен → исход `НЕ ИЗМЕРЕНО (no-browser-mcp)`; фаза всё равно выполняется, конвейер не встаёт.
225
+
226
+ **Артефакт `docs/source-product-profile.md` — пишется ВСЕГДА, во всех трёх исходах:**
227
+
228
+ ```markdown
229
+ **Источник:** Senja — https://senja.io (либо `нет`)
230
+ **Статус съёмки:** СНЯТ (ось «облик»; ровно одно: СНЯТ | НЕ ИЗМЕРЕНО | ИСТОЧНИКА НЕТ)
231
+ **Причина:** — (обязательна при НЕ ИЗМЕРЕНО, из закрытого списка ниже)
232
+ **Статус съёмки (путь):** СНЯТ (ось «путь»; обязательна, когда строк оси «путь» НЕТ)
233
+ **Причина (путь):** — (обязательна при НЕ ИЗМЕРЕНО оси «путь»)
234
+ **Происхождение:** прокликано (закрытый список: прокликано | сторонний-разбор | вручную | не снято)
235
+ **Источник разбора:** — (обязательны при сторонний-разбор; дата — из разметки
236
+ **Дата стороннего снимка:** — источника, не из пересказа)
237
+
238
+ ## 🎨 Look Requirements Seed
239
+
240
+ | ID | Обязательство | Ось | Источник-экран | Уверенность | Статус (ЧЕРНОВИК \| ГИПОТЕЗА \| ПОДТВЕРЖДЕНО \| УСТАРЕЛО) |
241
+ |----|---|---|---|---|---|
242
+ | FR-LOOK-001 | [что обязаны воспроизвести] | облик | [URL/скриншот] | [как измерено] | ЧЕРНОВИК |
243
+ ```
244
+
245
+ Закрытый список причин, каждая означает СВОЙ ремонт: `no-browser-mcp` · `no-browser` ·
246
+ `unreachable` · `auth-required` · `out-of-scope` · `bot-protected` · `timeout` ·
247
+ `robots-disallowed`.
248
+
249
+ `FR-LOOK-<nnn>` — ОДНО семейство: три цифры, по порядку, номер не переиспользуется. Ось (`облик` —
250
+ что видно; `путь` — в каком порядке идут экраны) это КОЛОНКА, а не второе пространство имён: два
251
+ семейства пришлось бы держать в согласии, одно с колонкой — нет. Полные правила строки и то, что
252
+ именно считается заполненной строкой, — в шапке `.claude/hooks/check-look-trace.cjs`.
253
+
254
+ **Две оси отвечают ПОРОЗНЬ, потому что и отказывают порознь:** лендинг снимается, а прокликивание
255
+ упирается в 403 — один общий статус обязан был бы соврать про одну из осей. Строки оси «путь» и
256
+ есть её ответ; объявление `**Статус съёмки (путь):**` требуется, только когда таких строк НЕТ.
257
+
258
+ **Инструмент оси «путь» — прокликивание браузером:**
259
+
260
+ ```bash
261
+ node .claude/hooks/capture-source-path.cjs <url> --max-pages 5 --delay-ms 1500
262
+ ```
263
+
264
+ `0` снято, строки `FR-LOOK-nnn` с осью `путь` на stdout · `1` источник открылся, перехода нет
265
+ (одноэкранный продукт — законный `ИСТОЧНИКА НЕТ` для этой оси) · `2` НЕ ИЗМЕРЕНО с причиной из
266
+ списка. Playwright — ВНЕШНЕЕ предусловие (у пакета ноль зависимостей): нет его → честный
267
+ `no-browser`, конвейер не встаёт. Границы съёмки — в `replicate-pipeline.md`, раздел Фазы 0.5;
268
+ они не пожелание, а условие законности.
269
+
270
+ **ТРИ исхода, и третий — тот, ради которого фаза написана именно так:**
271
+
272
+ | Исход | Когда | Откуда палитра |
273
+ |---|---|---|
274
+ | `СНЯТ` | облик собран | из источника; отраслевая таблица `025` НЕ применяется |
275
+ | `НЕ ИЗМЕРЕНО` | источник НАЗВАН, снять не удалось (причина из списка) | отраслевая, ПОДПИСАННАЯ как фолбэк |
276
+ | `ИСТОЧНИКА НЕТ` | проект ничего не воспроизводит | отраслевая, ПОДПИСАННАЯ как фолбэк |
277
+
278
+ Правило `honest-configuration` CFG-I4: недостижимый источник истины даёт UNKNOWN, никогда
279
+ правдоподобное значение. «Источник назван, но не снят» — честное «неизвестно», а не «требований по
280
+ облику нет».
281
+
282
+ **Ворота фазы — детерминированная проверка, после записи профиля:**
283
+
284
+ ```bash
285
+ node .claude/hooks/check-look-trace.cjs .
286
+ ```
287
+
288
+ `0` все строки доехали до `docs/Specification.md` либо отклонены с причиной · `1` потеря доказана,
289
+ потерянные id названы · `2` **проверка НЕ выполнена** (нет профиля, нет спецификации, шаблон не
290
+ тронут, ось «путь» пуста и не объявлена, либо исход не `СНЯТ`) — это НЕ «всё в порядке». До Фазы 1
291
+ код `2` ожидаем: промоушена ещё не было, и здесь проверка отвечает только на вопрос «профиль
292
+ написан и разбирается ли он».
293
+
294
+ **Куда это идёт.** Фаза 1 промотирует принятые строки `FR-LOOK-nnn` в `docs/Specification.md` — так
295
+ же, как `FR-GROWTH-nnn`. Фаза НЕ утверждает, что интерфейс похож на источник: она ловит ровно один
296
+ класс потерь — облик посмотрели и забыли. Похожесть доказывает визуальное сравнение.
297
+
298
+ **Checkpoint:**
299
+ ```
300
+ ═══════════════════════════════════════════════════════════════
301
+ ✅ PHASE 0.5: SOURCE PRODUCT PROFILE
302
+ Источник: [название | нет] · облик: [СНЯТ | НЕ ИЗМЕРЕНО (причина) | ИСТОЧНИКА НЕТ]
303
+ · путь: [СНЯТ | НЕ ИЗМЕРЕНО (причина) | ИСТОЧНИКА НЕТ]
304
+ Обязательств по облику: [N] (облик: [N] · путь: [N])
305
+ ⏸️ "ок" — next | "превью облик" — show profile
306
+ ═══════════════════════════════════════════════════════════════
307
+ ```
308
+
210
309
  ### Phase 1: PLANNING
211
310
 
212
311
  Read the skill: `.claude/skills/sparc-prd-mini/SKILL.md`
@@ -233,6 +332,10 @@ Product Context: # From Phase 0 (if applicable)
233
332
  differentiation: [from Blue Ocean]
234
333
  monetization: [from Unit Economics]
235
334
 
335
+ Source Look Context: # From Phase 0.5 (ALWAYS present — one of the three outcomes)
336
+ capture_status: [СНЯТ | НЕ ИЗМЕРЕНО (причина) | ИСТОЧНИКА НЕТ]
337
+ look_obligations: [rows of docs/source-product-profile.md, FR-LOOK-nnn]
338
+
236
339
  Security Pattern: # If external integrations
237
340
  api_keys_input: "UI Settings > Integrations"
238
341
  storage: "Encrypted IndexedDB (AES-GCM 256-bit)"
@@ -257,6 +360,18 @@ Write all 11 documents to `docs/`:
257
360
  - `docs/C4_Diagrams.md` (if applicable)
258
361
  - `docs/ADR.md` (if applicable)
259
362
 
363
+ **Промоушен семян — один шаг для двух семейств.** Принятые строки `FR-GROWTH-nnn` (из
364
+ `docs/product-discovery-brief.md`) и `FR-LOOK-nnn` (из `docs/source-product-profile.md`) переносятся
365
+ в `docs/Specification.md` — каждая либо как требование, либо как отклонение С ПРИЧИНОЙ в той же
366
+ строке. Молча уронить нельзя: это ловят `check-growth-trace.cjs` и `check-look-trace.cjs`.
367
+
368
+ **The handoff manifest is WIDER than the two seeds.** Phase 0 ends the brief with
369
+ `## Манифест передачи` — the enumerated outputs of the REAL run, each with a stable `PD-WORD-nnn`
370
+ id. Phase 1 MUST answer for EVERY one: cite it in a Phase-1 document, or reject it WITH A REASON.
371
+ Silence is forbidden, because an output nobody must answer for is written the same way whether it
372
+ was used or dropped. Checked by `node .claude/hooks/check-handoff-manifest.cjs .` — `2` means THE
373
+ CHECK DID NOT RUN, never "all clear".
374
+
260
375
  Git commit: `docs: SPARC documentation for [project-name]`
261
376
 
262
377
  **Checkpoint:**
@@ -295,6 +410,7 @@ Created [N] documents in docs/
295
410
 
296
411
  ```bash
297
412
  node .claude/hooks/check-docs-complete.cjs .
413
+ node .claude/hooks/check-external-deps.cjs .
298
414
  ```
299
415
 
300
416
  | Код | Что делать |
@@ -303,6 +419,11 @@ node .claude/hooks/check-docs-complete.cjs .
303
419
  | `1` | **НЕ запускайте рой.** Вернитесь в Фазу 1 и допишите названные документы |
304
420
  | `2` | проверка не выполнена — почините вызов и повторите; это НЕ «всё в порядке» |
305
421
 
422
+ **Инвентарь внешних зависимостей ОБЯЗАН СУЩЕСТВОВАТЬ, и отсутствующий раздел — это НЕ «зависимостей
423
+ нет».** На пустом множестве зелёный вердикт «ни одна внешняя зависимость не UNCONFIRMED и не
424
+ CONTRADICTED» истинен САМ СОБОЙ — вакуумная истина в роли проверки. Продукт, который действительно
425
+ никого не зовёт, пишет это дословно.
426
+
306
427
  Причина, по которой шаг стоит здесь, а не внутри роя: существование файла, его пустота и
307
428
  незаполненный шаблон решаются сорока строками кода. Отправлять на этот вопрос рой агентов — значит
308
429
  платить вероятностной проверкой за то, что решается детерминированно. Рою остаётся то, ради чего он
@@ -311,6 +432,22 @@ node .claude/hooks/check-docs-complete.cjs .
311
432
  Ограничение, которое проверка печатает сама: она доказывает, что документы НАПИСАНЫ, а не что они
312
433
  верны. Верность — работа роя.
313
434
 
435
+ **Шаги 2.1–2.4 — условные критерии приёмки.** Запускайте только проверки поверхностей продукта;
436
+ отсутствующая поверхность законно даёт `2`.
437
+
438
+ | Шаг / поверхность | Зачем | Правило | Команда |
439
+ |---|---|---|---|
440
+ | 2.0 Чужой разбор | ГИПОТЕЗА без датированного живого подтверждения не промотируется | `.claude/rules/replicate-pipeline.md` | `node .claude/hooks/check-look-origin.cjs .` |
441
+ | 2.1 Встраиваемый виджет на ЧУЖОЙ странице | три origin-невидимых отказа | `.claude/rules/embeddable-widget.md` | `node .claude/hooks/check-embed-contract.cjs .` |
442
+ | 2.2 Долгая задача (МИНУТЫ) | «нет ответа» ≠ «выполняется»: иначе потерянный оплаченный результат, повтор с нуля и третья копия | `.claude/rules/long-running-job.md` | `node .claude/hooks/check-job-contract.cjs .` |
443
+ | 2.3 Входящий вебхук | событие повторяется и может прийти от кого угодно | `.claude/rules/incoming-webhooks.md` | `node .claude/hooks/check-webhook-contract.cjs .` |
444
+ | 2.4 Платная модель | потраченного не вернуть; несконфигурированный потолок ОБЯЗАН валить запуск, не означать бесконечность | `.claude/rules/model-call-cost.md` | `node .claude/hooks/check-model-cost.cjs .` |
445
+
446
+ У каждого стража три кода: `0` проверено · `1` дефект ДОКАЗАН и назван · `2` проверка НЕ ВЫПОЛНЕНА — и это НЕ «в порядке»: код 2 никогда не читается как успех, у него в выводе названа причина, и она попадает в отчёт фазы дословно.
447
+
448
+ Для каждой команды: `0` проверено · `1` дефект ДОКАЗАН и назван · `2` проверка НЕ ВЫПОЛНЕНА — и это
449
+ НЕ «в порядке».
450
+
314
451
  Read the skill: `.claude/skills/requirements-validator/SKILL.md`
315
452
 
316
453
  **Goal:** Verify all documentation for completeness, testability, and implementation readiness.
@@ -329,6 +466,13 @@ Read the skill: `.claude/skills/requirements-validator/SKILL.md`
329
466
  The sixth lens is the only one that looks OUTSIDE the documents. The other five compare our own
330
467
  output with our own output, which cannot discover that a service does not do what we assumed.
331
468
 
469
+ **Positive file receipt (required).** Assign each validation lens a unique `WORK_UNIT_ID` and unique
470
+ absolute `TRACE_PATH`. Its validator MUST write a substantive fragment ending in `Status: completed`
471
+ or `Status: failed` to `TRACE_PATH` before its one-line pointer. Before AGGREGATE, verify a regular,
472
+ non-symlink, substantive, post-launch file with a terminal status. Narrative/chat/silence is never a
473
+ receipt; any invalid receipt MUST block aggregation/completion. Full rule:
474
+ `.claude/rules/swarm-file-evidence.md`.
475
+
332
476
  **Process (iterative, max 3 iterations):**
333
477
 
334
478
  ```
@@ -472,12 +616,9 @@ Read the skill: `.claude/skills/cc-toolkit-generator-enhanced/SKILL.md`
472
616
  **IMPORTANT (Claude Code adaptation, post v1.4):**
473
617
  - Scan `docs/` directory for SPARC documents (NOT `/mnt/user-data/uploads/`)
474
618
  - Generate files IN-PLACE into the project (NOT into output directory)
475
- - **Pre-shipped by `npx p-replicator init` do NOT overwrite or regenerate:**
476
- - All 10 skills in `.claude/skills/`
477
- - All 11 commands: `/replicate`, `/harvest`, `/start`, `/plan`, `/feature`, `/go`, `/run`, `/next`, `/myinsights`, `/docs`, `/deploy`
478
- - All 6 rules: `replicate-pipeline`, `skill-interface-protocol`, `git-workflow`, `insights-capture`, `feature-lifecycle`, `docker-ports`
479
- - All 4 pipeline agents: `replicate-coordinator`, `product-discoverer`, `doc-validator`, `harvest-coordinator`
480
- - `.claude/settings.json` + cross-platform Node hook scripts in `.claude/hooks/`
619
+ - The toolkit pre-shipped by `npx p-replicator init` is enumerated in
620
+ `.claude/rules/replicate-pipeline.md`; do NOT overwrite or regenerate any listed skill, command,
621
+ rule, agent, setting, or hook.
481
622
  - Phase 3 generates ONLY project-specific artifacts derived from SPARC docs (see below).
482
623
 
483
624
  **Generate these project-specific files:**
@@ -559,22 +700,9 @@ git commit -m "chore: initial project setup from SPARC documentation"
559
700
  ═══════════════════════════════════════════════════════════════
560
701
  ✅ REPLICATE COMPLETE: [project-name]
561
702
 
562
- 📁 Project structure:
563
- ├── CLAUDE.md # Project context
564
- ├── DEVELOPMENT_GUIDE.md # Dev lifecycle guide
565
- ├── README.md # Quick start
566
- ├── docs/ # [N] SPARC documents
567
- │ ├── validation-report.md # Validation results
568
- │ ├── test-scenarios.md # BDD scenarios
569
- │ └── features/ # For future features
570
- ├── .claude/
571
- │ ├── commands/ # /start, /feature, /plan, /go, /run, /deploy, /myinsights
572
- │ ├── agents/ # planner, code-reviewer, architect
573
- │ ├── skills/ # 8 shared + project-specific skills
574
- │ ├── rules/ # git-workflow, security, coding-style, ...
575
- │ └── settings.json # Hooks (insights auto-commit)
576
- ├── docker-compose.yml # Scaffold
577
- └── Dockerfile # Scaffold
703
+ 📁 Project structure: CLAUDE.md · DEVELOPMENT_GUIDE.md · README.md · docs/ ([N] SPARC документов,
704
+ validation-report.md, test-scenarios.md, features/) · .claude/ (commands, agents, skills, rules,
705
+ settings.json) · docker-compose.yml · Dockerfile
578
706
 
579
707
  🚀 Next steps:
580
708
  1. Run /start to bootstrap the project
@@ -626,6 +754,7 @@ PRINCIPLE: User enters keys via UI → stored encrypted in browser → NEVER sen
626
754
  | `ок` | Next phase |
627
755
  | `превью [filename]` | View generated file |
628
756
  | `превью discovery` | Show Product Discovery Brief |
757
+ | `превью облик` | Show Source Product Profile (Phase 0.5) |
629
758
  | `превью validation` | Show Validation Report |
630
759
  | `превью toolkit` | Show toolkit structure |
631
760
 
@@ -633,6 +762,9 @@ PRINCIPLE: User enters keys via UI → stored encrypted in browser → NEVER sen
633
762
 
634
763
  ### ALWAYS
635
764
  - Read skill SKILL.md before executing its logic
765
+ - Run Phase 0.5 in EVERY run, including `--from-docs`, and write `docs/source-product-profile.md` in
766
+ all three outcomes — an absent profile and one saying «источника нет» look identical to the next
767
+ reader and mean different things
636
768
  - Checkpoint after each phase
637
769
  - Pass Architecture Constraints to sparc-prd-mini
638
770
  - Write docs to `docs/` directory (not `/output/`)
@@ -648,4 +780,6 @@ PRINCIPLE: User enters keys via UI → stored encrypted in browser → NEVER sen
648
780
  ### CONDITIONAL
649
781
  - If external APIs → include security-patterns/ skill + secrets-management.md rule
650
782
  - If new product → start with Phase 0 (Product Discovery)
783
+ - If the project replicates an existing product → Phase 0.5's captured look SUPERSEDES the industry
784
+ palette of `025-cjm-prototype.md`, which is a LABELLED fallback for the other two outcomes only
651
785
  - If B2B/Enterprise → strengthen security patterns in validation
@@ -69,6 +69,35 @@ Generate: src/<files>, tests/<files>, package.json, README.md
69
69
  Commits: one per logical group.
70
70
  ```
71
71
 
72
+ **The canon MUST be frozen BEFORE dispatch.** Package Tasks are N writers deriving model names, enum
73
+ values, route paths and step numbers from one source; the collision exists ONLY IN THE UNION, so no
74
+ worker can see it and no receipt can catch it. Before dispatch the coordinator records
75
+ `docs/dispatch-plan.md` — the canon path and its sha256 — or runs the units sequentially.
76
+
77
+ The same plan MUST assign OWNERSHIP: exactly one writer per file, the coordinator included, and a
78
+ file born by SPLITTING another gets its owner AT CREATION — ownership never travels by itself.
79
+
80
+ Every EDIT and every VERDICT MUST declare the sha256 of the source it was built on; a
81
+ mismatch with the live file is a refusal WITHOUT mutation — a read copy is a snapshot of the moment
82
+ of reading, not of the file.
83
+
84
+ Field forms and closed value lists are in the checkers' headers:
85
+
86
+ ```bash
87
+ node .claude/hooks/check-canon.cjs .
88
+ node .claude/hooks/check-file-ownership.cjs .
89
+ node .claude/hooks/check-source-version.cjs .
90
+ ```
91
+
92
+ `0` frozen and intact · `1` a defect is PROVEN and named · `2` **THE CHECK DID NOT RUN**, which is
93
+ never "all clear".
94
+
95
+ Assign each package a unique `WORK_UNIT_ID` and unique absolute `TRACE_PATH`. Its Task MUST write a
96
+ substantive body ending in `Status: completed` or `Status: failed` to `TRACE_PATH` before its one-line
97
+ pointer. Before Phase 3 integration, verify a regular, non-symlink, substantive, post-launch file with
98
+ a terminal status. Narrative/chat/silence is never a receipt; any invalid receipt MUST block
99
+ integration/completion. Full rule: `.claude/rules/swarm-file-evidence.md`.
100
+
72
101
  ### Phase 3: Integration (sequential)
73
102
 
74
103
  1. Verify cross-package imports