@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.
- package/.dz-manifest.json +312 -76
- package/CHANGELOG.md +232 -0
- package/MULTIPLATFORM_ROADMAP.md +1 -1
- package/README/eng/01_quickstart.md +3 -3
- package/README/eng/02_user_guide.md +1 -1
- package/README/eng/03_admin_guide.md +2 -2
- package/README/eng/04_api_reference.md +11 -5
- package/README/eng/05_architecture.md +1 -1
- package/README/eng/README.md +2 -1
- package/README/ru/01_quickstart.md +3 -3
- package/README/ru/02_user_guide.md +1 -1
- package/README/ru/03_admin_guide.md +2 -2
- package/README/ru/04_api_reference.md +11 -5
- package/README/ru/05_architecture.md +1 -1
- package/README/ru/README.md +2 -1
- package/README/ru/html/index.html +9 -9
- package/README.md +278 -39
- package/package.json +5 -4
- package/sbom.json +665 -75
- package/scripts/check-pipeline-gaps.sh +413 -0
- package/src/commands/doctor.js +94 -4
- package/src/commands/init.js +1 -1
- package/src/rule-components.json +15 -0
- package/src/utils.js +35 -11
- package/templates/.claude/agents/harvest-coordinator.md +10 -1
- package/templates/.claude/agents/product-discoverer.md +38 -0
- package/templates/.claude/agents/replicate-coordinator.md +11 -1
- package/templates/.claude/commands/feature.md +81 -9
- package/templates/.claude/commands/go.md +9 -0
- package/templates/.claude/commands/harvest.md +39 -3
- package/templates/.claude/commands/myinsights.md +21 -26
- package/templates/.claude/commands/replicate.md +171 -37
- package/templates/.claude/commands/start.md +29 -0
- package/templates/.claude/hooks/capture-source-path.cjs +795 -0
- package/templates/.claude/hooks/check-canon.cjs +493 -0
- package/templates/.claude/hooks/check-embed-contract.cjs +374 -0
- package/templates/.claude/hooks/check-external-deps.cjs +288 -0
- package/templates/.claude/hooks/check-file-ownership.cjs +424 -0
- package/templates/.claude/hooks/check-handoff-manifest.cjs +367 -0
- package/templates/.claude/hooks/check-job-contract.cjs +501 -0
- package/templates/.claude/hooks/check-look-origin.cjs +240 -0
- package/templates/.claude/hooks/check-look-trace.cjs +385 -0
- package/templates/.claude/hooks/check-metric-source.cjs +296 -0
- package/templates/.claude/hooks/check-model-cost.cjs +470 -0
- package/templates/.claude/hooks/check-ports.cjs +434 -24
- package/templates/.claude/hooks/check-source-version.cjs +312 -0
- package/templates/.claude/hooks/check-swarm-receipts.cjs +197 -0
- package/templates/.claude/hooks/check-webhook-contract.cjs +535 -0
- package/templates/.claude/hooks/session-insights.cjs +158 -25
- package/templates/.claude/hooks/statusline.cjs +2 -2
- package/templates/.claude/hooks/write-insight.cjs +253 -0
- package/templates/.claude/rules/cost-of-detection-ladder.md +96 -0
- package/templates/.claude/rules/docker-ports.md +41 -19
- package/templates/.claude/rules/embeddable-widget.md +73 -0
- package/templates/.claude/rules/feature-lifecycle.md +13 -3
- package/templates/.claude/rules/honest-configuration.md +54 -0
- package/templates/.claude/rules/incoming-webhooks.md +99 -0
- package/templates/.claude/rules/insights-capture.md +10 -5
- package/templates/.claude/rules/long-running-job.md +73 -0
- package/templates/.claude/rules/model-call-cost.md +85 -0
- package/templates/.claude/rules/replicate-pipeline.md +123 -52
- package/templates/.claude/rules/skill-interface-protocol.md +1 -0
- package/templates/.claude/rules/swarm-file-evidence.md +46 -0
- package/templates/.claude/settings.json +13 -1
- package/templates/.claude/skills/brutal-honesty-review/SKILL.md +9 -0
- package/templates/.claude/skills/cc-toolkit-generator-enhanced/SKILL.md +4 -0
- package/templates/.claude/skills/cc-toolkit-generator-enhanced/modules/03-generate-p0.md +46 -1
- package/templates/.claude/skills/cc-toolkit-generator-enhanced/modules/04-generate-p1.md +7 -1
- package/templates/.claude/skills/cc-toolkit-generator-enhanced/modules/06-package-deliver.md +20 -2
- package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/claude-md-strategy.md +7 -0
- package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/automation-commands.md +17 -0
- package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/feature-lifecycle-ent.md +43 -5
- package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/feature-lifecycle.md +43 -7
- package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/start-command.md +19 -1
- package/templates/.claude/skills/cc-toolkit-generator-enhanced/references/templates/swarm-file-evidence.md +151 -0
- package/templates/.claude/skills/goap-research-ed25519/SKILL.md +37 -22
- package/templates/.claude/skills/goap-research-ed25519/references/negative-results.md +94 -0
- package/templates/.claude/skills/goap-research-ed25519/scripts/check_report_evidence.py +368 -4
- package/templates/.claude/skills/goap-research-ed25519/scripts/ed25519_verifier.py +122 -5
- package/templates/.claude/skills/goap-research-ed25519/scripts/evidence_fetch.py +33 -16
- package/templates/.claude/skills/goap-research-ed25519/scripts/quote_provenance.py +342 -0
- package/templates/.claude/skills/goap-research-ed25519/scripts/test_ed25519_verifier.py +60 -0
- package/templates/.claude/skills/goap-research-ed25519/scripts/test_evidence_provenance.py +139 -6
- package/templates/.claude/skills/goap-research-ed25519/scripts/test_quote_provenance.py +274 -0
- package/templates/.claude/skills/goap-research-ed25519/scripts/test_suite_completeness.py +2 -1
- package/templates/.claude/skills/knowledge-extractor/SKILL.md +4 -0
- package/templates/.claude/skills/knowledge-extractor/modules/01-agent-review.md +16 -5
- package/templates/.claude/skills/pipeline-forge/SKILL.md +18 -23
- package/templates/.claude/skills/pipeline-forge/examples/replicate-analysis.md +7 -2
- package/templates/.claude/skills/pipeline-forge/references/patterns-catalog.md +19 -1
- package/templates/.claude/skills/pipeline-forge/references/self-extracted-patterns.md +17 -6
- package/templates/.claude/skills/pipeline-forge/references/skill-anatomy.md +0 -1
- package/templates/.claude/skills/reverse-engineering-unicorn/modules/025-cjm-prototype.md +21 -1
- package/templates/.claude/skills/sparc-prd-mini/SKILL.md +234 -716
- package/tests/e2e/lifecycle.test.js +55 -9
- package/tests/e2e/packed-insights-writer.test.js +308 -0
- package/tests/fixtures/prep-traceability-fixture/docs/features/order-refund/01_specification.md +29 -0
- package/tests/fixtures/prep-traceability-fixture/docs/features/order-refund/02_pseudocode.md +57 -0
- package/tests/snapshot/baseline.json +72 -46
- package/tests/snapshot/templates.test.js +47 -0
- package/tests/unit/absence-is-not-emptiness.test.js +15 -1
- package/tests/unit/capture-source-path.test.js +492 -0
- package/tests/unit/check-canon.test.js +403 -0
- package/tests/unit/check-embed-contract.test.js +422 -0
- package/tests/unit/check-external-deps.test.js +363 -0
- package/tests/unit/check-file-ownership.test.js +388 -0
- package/tests/unit/check-handoff-manifest.test.js +410 -0
- package/tests/unit/check-job-contract.test.js +514 -0
- package/tests/unit/check-look-origin.test.js +180 -0
- package/tests/unit/check-look-trace.test.js +420 -0
- package/tests/unit/check-metric-source.test.js +325 -0
- package/tests/unit/check-model-cost.test.js +425 -0
- package/tests/unit/check-pipeline-gaps.test.js +94 -0
- package/tests/unit/check-ports.test.js +773 -2
- package/tests/unit/check-source-version.test.js +344 -0
- package/tests/unit/check-swarm-receipts.test.js +231 -0
- package/tests/unit/check-webhook-contract.test.js +536 -0
- package/tests/unit/db-port-rule.test.js +43 -6
- package/tests/unit/detection-ladder-contract.test.js +302 -0
- package/tests/unit/detection-ladder-registry.test.js +52 -0
- package/tests/unit/doctor-insight-flow.test.js +315 -0
- package/tests/unit/external-dependency-check.test.js +19 -19
- package/tests/unit/generator-swarm-contract.test.js +287 -0
- package/tests/unit/guard-honest-input-meta.test.js +64 -0
- package/tests/unit/honest-failure-rules.test.js +574 -0
- package/tests/unit/hooks-project-anchored.test.js +67 -3
- package/tests/unit/insights-docs-tell-the-truth.test.js +52 -31
- package/tests/unit/insights-dz-delegation.test.js +197 -0
- package/tests/unit/insights-writer.test.js +285 -0
- package/tests/unit/look-phase-contract.test.js +231 -0
- package/tests/unit/negative-conclusion-gate.test.js +300 -0
- package/tests/unit/quote-provenance.test.js +122 -0
- package/tests/unit/shipped-suite-context.test.js +3 -1
- package/tests/unit/traceability-machine-ids.test.js +413 -0
- package/tests/unit/traceability-negative-fixture.test.js +322 -0
- 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
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
-
|
|
89
|
-
|
|
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
|
-
-
|
|
476
|
-
-
|
|
477
|
-
|
|
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
|
-
|
|
564
|
-
|
|
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
|