@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
package/README.md
CHANGED
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
[](https://opensource.org/licenses/MIT)
|
|
12
12
|
[](https://nodejs.org)
|
|
13
13
|
|
|
14
|
-
[](#test-infrastructure)
|
|
15
15
|
[](#skills-reference)
|
|
16
16
|
[](#commands-reference)
|
|
17
|
-
[](#hooks-system)
|
|
18
18
|
[](#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**, **
|
|
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 **
|
|
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
|
|
@@ -262,8 +279,8 @@ This creates:
|
|
|
262
279
|
- `.claude/skills/` — 10 pre-shipped skills
|
|
263
280
|
- `.claude/commands/` — 11 slash commands (`/replicate`, `/run`, `/feature`, ...)
|
|
264
281
|
- `.claude/agents/` — 4 pipeline agents
|
|
265
|
-
- `.claude/rules/` —
|
|
266
|
-
- `.claude/hooks/` —
|
|
282
|
+
- `.claude/rules/` — 9 governance rules
|
|
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,9 +306,9 @@ 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** |
|
|
293
|
-
| **Hooks** |
|
|
294
|
-
| **Settings** | 1 | `settings.json` with statusLine + SessionStart + Stop hooks pre-configured |
|
|
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) |
|
|
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:
|
|
297
314
|
|
|
@@ -326,13 +343,15 @@ Discovery Brief was never written to disk at all. Since 1.7.0:
|
|
|
326
343
|
|
|
327
344
|
What none of this proves: that anything was built, or that copying a competitor's move is lawful.
|
|
328
345
|
|
|
329
|
-
## 🔎
|
|
346
|
+
## 🔎 Deliberate checks
|
|
330
347
|
|
|
331
|
-
Six of the nine hook
|
|
348
|
+
Six of the nine hook utilities run themselves. Three do not: they are utilities you invoke when you want
|
|
332
349
|
an answer, and they are wired to no event on purpose. A hook of this package is **non-blocking by
|
|
333
350
|
contract** — it can print, never refuse — so a check that must be able to say "no" cannot be one.
|
|
351
|
+
The package also ships the non-hook Bash traceability checker described after those three utilities;
|
|
352
|
+
`/feature` invokes it as a blocking pipeline gate.
|
|
334
353
|
|
|
335
|
-
|
|
354
|
+
Each answers with **three** exit codes, and the third is the one that matters:
|
|
336
355
|
|
|
337
356
|
| Code | Meaning |
|
|
338
357
|
|:---:|---|
|
|
@@ -346,7 +365,8 @@ why a missing config, a missing docker, or a missing brief is `2` and never `0`.
|
|
|
346
365
|
### `check-ports.cjs` — no database faces the internet
|
|
347
366
|
|
|
348
367
|
```bash
|
|
349
|
-
node .claude/hooks/check-ports.cjs .
|
|
368
|
+
node .claude/hooks/check-ports.cjs . # catalog: one Compose project
|
|
369
|
+
node .claude/hooks/check-ports.cjs --machine # point-in-time snapshot of the current Docker context
|
|
350
370
|
```
|
|
351
371
|
|
|
352
372
|
```
|
|
@@ -355,9 +375,25 @@ node .claude/hooks/check-ports.cjs .
|
|
|
355
375
|
Убрать ports: целиком, либо привязать к 127.0.0.1
|
|
356
376
|
```
|
|
357
377
|
|
|
358
|
-
|
|
359
|
-
already resolved.
|
|
360
|
-
|
|
378
|
+
Catalog mode reads one normalised config (`docker compose config`), so the short port form and
|
|
379
|
+
`extends` are already resolved. It catches `network_mode: host` and services published beside a
|
|
380
|
+
reverse-proxy, but it never queries running containers. Its clean receipt is limited to that selected
|
|
381
|
+
catalog. A loopback bind (`127.0.0.1:` or `[::1]:`) is legal in catalog mode — that exception remains
|
|
382
|
+
part of the rule.
|
|
383
|
+
|
|
384
|
+
For Redis/Memcached, catalog mode also classifies visible authentication configuration: established
|
|
385
|
+
absence of a password is `1`, while a config-bearing volume/custom image that can hide the answer is
|
|
386
|
+
`2`, never a guessed clean result. The catalog loopback exception is applied first and remains legal.
|
|
387
|
+
|
|
388
|
+
Machine mode enumerates recognised running storage containers in the current Docker context, inspects
|
|
389
|
+
their live bind addresses and Compose ownership labels, and probes live Redis authentication there
|
|
390
|
+
only. Its clean receipt is a point-in-time snapshot, not continuous monitoring and not a claim about
|
|
391
|
+
stopped containers or another Docker context. A live loopback Redis without a password is reported as
|
|
392
|
+
a separate violation even though the catalog loopback exception remains legal.
|
|
393
|
+
|
|
394
|
+
Both scopes preserve the same contract: `0` means the selected scope was checked clean, `1` means a
|
|
395
|
+
violation was established, and `2` means **the check did not run to completion** (`проверка НЕ
|
|
396
|
+
ВЫПОЛНЕНА`) because Docker/config/permissions or a required runtime observation was unavailable.
|
|
361
397
|
|
|
362
398
|
**When to run it:** after writing or editing `docker-compose.yml`, and before any deploy.
|
|
363
399
|
|
|
@@ -408,6 +444,144 @@ A conscious rejection **with a reason written down** passes; a silent drop does
|
|
|
408
444
|
**What it does NOT prove:** that anything was built, or that copying a competitor's growth move is
|
|
409
445
|
lawful. It proves an obligation was carried forward, nothing more.
|
|
410
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
|
+
|
|
543
|
+
### `check-pipeline-gaps.sh` — FR/NFR/AC keys are joins, not decoration
|
|
544
|
+
|
|
545
|
+
The package owns the checker at `scripts/check-pipeline-gaps.sh`. `/feature` resolves that packaged
|
|
546
|
+
file directly, so an installed consumer runs the same executable without copying it onto the hooks
|
|
547
|
+
surface:
|
|
548
|
+
|
|
549
|
+
```bash
|
|
550
|
+
CHECK_PIPELINE_GAPS="$(node -p "require.resolve('@dzhechkov/p-replicator/scripts/check-pipeline-gaps.sh')")" || {
|
|
551
|
+
printf 'NOT-ESTABLISHED packaged checker could not be resolved\n' >&2
|
|
552
|
+
exit 2
|
|
553
|
+
}
|
|
554
|
+
bash "$CHECK_PIPELINE_GAPS" "${CLAUDE_PROJECT_DIR:-.}" --traceability
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
The checker reads complete `DOCUMENT_ROLE_MAP` blocks from the installed `/feature` command and
|
|
558
|
+
`sparc-prd-mini` skill. It checks the applicable project-level pair and every immediate
|
|
559
|
+
`docs/features/*/` contour independently. It never rediscovers `01_specification.md` or
|
|
560
|
+
`02_pseudocode.md` by basename.
|
|
561
|
+
|
|
562
|
+
Accepted specification declarations are level-three headings such as
|
|
563
|
+
`### FR-order-refund-1`, `### NFR-order-refund-2 — latency`, and
|
|
564
|
+
`### AC-order-refund-3 - accepted`. Pseudocode evidence is a standalone
|
|
565
|
+
``REQUIREMENT: `FR-order-refund-1` `` line inside an `### Algorithm:` block. Prose, comments,
|
|
566
|
+
tables, and nested `SC-FR-*` identifiers are ignored. Duplicate or malformed declarations block.
|
|
567
|
+
|
|
568
|
+
For each contour it runs both sorted differences: specification→pseudocode names requirements with
|
|
569
|
+
no algorithm claim; pseudocode→specification names dangling claims. Every gap is printed with its
|
|
570
|
+
contour, direction, and exact key. Exit `0` means every readable contour was checked and both sets
|
|
571
|
+
match; exit `1` means a named content/traceability gap; exit `2` means the map or filesystem evidence
|
|
572
|
+
was not trustworthy enough to compare. `/feature` preserves both non-zero states before Phase 2.
|
|
573
|
+
|
|
574
|
+
Symlinked contours or role files are refused rather than followed outside the declared root. Matching
|
|
575
|
+
keys prove cross-document linkage only; they do not prove that an algorithm semantically implements
|
|
576
|
+
the requirement.
|
|
577
|
+
|
|
578
|
+
**Scope and provenance.** This package executable implements the ADR-owned traceability decision
|
|
579
|
+
only: role-map resolution, project plus immediate-feature traversal, structural FR/NFR/AC
|
|
580
|
+
declarations, both `comm -23` directions, duplicate/malformed/symlink refusal, exact diagnostics,
|
|
581
|
+
and blocking `0/1/2` exits. It deliberately does not carry the old workspace-only PR-001/PR-002/
|
|
582
|
+
PR-004/PR-007, weekly-metric, port, or `[GAP]` umbrella checks. The workspace source is not needed
|
|
583
|
+
by an installed consumer.
|
|
584
|
+
|
|
411
585
|
## ✅ Verify the install
|
|
412
586
|
|
|
413
587
|
After `/replicate`, run:
|
|
@@ -418,7 +592,7 @@ npx @dzhechkov/p-replicator verify
|
|
|
418
592
|
|
|
419
593
|
The command checks:
|
|
420
594
|
|
|
421
|
-
- **Pre-shipped contract** (must-have): 10 skills + 11 commands + 4 agents +
|
|
595
|
+
- **Pre-shipped contract** (must-have): 10 skills + 11 commands + 4 agents + 13 rules + settings.json + 24 hooks
|
|
422
596
|
- **Post-/replicate hints** (advisory): CLAUDE.md, project-specific agents, feature-roadmap.json, security rules, etc.
|
|
423
597
|
|
|
424
598
|
**Exit codes:**
|
|
@@ -431,7 +605,9 @@ The command checks:
|
|
|
431
605
|
npx @dzhechkov/p-replicator doctor
|
|
432
606
|
```
|
|
433
607
|
|
|
434
|
-
`doctor` verifies pre-shipped contract + Prerequisites (`git on PATH`).
|
|
608
|
+
`doctor` verifies pre-shipped contract + Prerequisites (`git on PATH`). It also prints the
|
|
609
|
+
informational, non-gating insight-flow observation described below. It remains stricter than
|
|
610
|
+
`verify` for must-have components.
|
|
435
611
|
|
|
436
612
|
---
|
|
437
613
|
|
|
@@ -615,7 +791,8 @@ while features in scope:
|
|
|
615
791
|
|
|
616
792
|
### `/myinsights` — knowledge capture
|
|
617
793
|
|
|
618
|
-
Build a project-local knowledge base of "rakes" (development insights)
|
|
794
|
+
Build a project-local knowledge base of "rakes" (development insights). Markdown remains the source
|
|
795
|
+
of truth; `UserPromptSubmit` uses optional dz recall with a local fallback.
|
|
619
796
|
|
|
620
797
|
```bash
|
|
621
798
|
/myinsights # interactive prompt
|
|
@@ -623,12 +800,23 @@ Build a project-local knowledge base of "rakes" (development insights) that auto
|
|
|
623
800
|
/myinsights recall prisma # search by keyword
|
|
624
801
|
```
|
|
625
802
|
|
|
626
|
-
Storage: `.claude/insights/index.md` —
|
|
803
|
+
Storage: `.claude/insights/index.md` — Markdown log auto-committed by Stop hook. A successful,
|
|
804
|
+
non-empty dz recall result may own prompt-time delivery; absent, failing, or empty recall uses the
|
|
805
|
+
local last-three fallback.
|
|
627
806
|
|
|
628
807
|
### `/harvest` — knowledge extraction
|
|
629
808
|
|
|
630
809
|
Extract reusable patterns from a completed project into a knowledge base. Skill: `knowledge-extractor` (4 modules: agent review → classify → decontextualize → integrate).
|
|
631
810
|
|
|
811
|
+
Quick and full runs with a reusable finding have a required final persistence gate. The command
|
|
812
|
+
passes one structured record to `.claude/hooks/write-insight.cjs`; normal completion requires a
|
|
813
|
+
`created`, `appended`, or `duplicate` receipt. The writer creates `.claude/insights/index.md` only
|
|
814
|
+
on the first valid write, preserves prior bytes on append, and suppresses an exact normalized replay
|
|
815
|
+
even when its render date changes. It then attempts an idempotent, best-effort `dz teach` projection;
|
|
816
|
+
absence or failure never changes the Markdown receipt. `marker` and findings-free runs do not
|
|
817
|
+
manufacture entries. The deterministic tests cover creation, append preservation, exact-repeat
|
|
818
|
+
idempotence, and optional projection; they do not claim the text is meaningful.
|
|
819
|
+
|
|
632
820
|
---
|
|
633
821
|
|
|
634
822
|
## 💻 CLI Commands
|
|
@@ -641,7 +829,7 @@ Extract reusable patterns from a completed project into a knowledge base. Skill:
|
|
|
641
829
|
| `update` | Upgrade files to new version (preserves customizations) | `0` ok, `1` if not installed |
|
|
642
830
|
| `remove` | Delete package-tracked files | `0` ok, `1` if not installed |
|
|
643
831
|
| `list` | List installed components with metadata | `0` |
|
|
644
|
-
| `doctor` | Health check
|
|
832
|
+
| `doctor` | Health check + informational recent fix/insight counts | `0` ok, `1` only if existing health checks find breakage |
|
|
645
833
|
| `verify` | Pre-shipped + post-/replicate verification | `0` ok, `1` if pre-shipped contract violated |
|
|
646
834
|
|
|
647
835
|
### Global flags
|
|
@@ -732,6 +920,9 @@ Generates 5 SPARC docs in `docs/features/<feature>/`:
|
|
|
732
920
|
- `04_refinement.md` — edge cases + error paths
|
|
733
921
|
- `05_completion.md` — testing + deployment notes
|
|
734
922
|
|
|
923
|
+
Before Phase 2, `/feature` runs the installed machine-key checker. Only exit `0` advances; exit `1`
|
|
924
|
+
returns to PLAN with exact FR/NFR/AC gaps, while exit `2` stops on an unresolved role map or document.
|
|
925
|
+
|
|
735
926
|
### Phase 2 — VALIDATE (requirements-validator)
|
|
736
927
|
|
|
737
928
|
Same swarm-of-5 as `/replicate` Phase 2. Verdict 🟢/🟡/🔴 with same retry logic.
|
|
@@ -752,7 +943,7 @@ Severity-classified findings. Critical (`blocker` | `high`) MUST be fixed.
|
|
|
752
943
|
|
|
753
944
|
### AUTO mode (called from /go or /run)
|
|
754
945
|
|
|
755
|
-
- Phase 1: proceed if all docs exist
|
|
946
|
+
- Phase 1: proceed only if all docs exist and the traceability checker exits `0`
|
|
756
947
|
- Phase 2: proceed if 🟢 or 🟡; auto-retry once on 🔴
|
|
757
948
|
- Phase 3: proceed if tests + lint + build green
|
|
758
949
|
- Phase 4: auto-fix `high` if straightforward; halt on `blocker`
|
|
@@ -774,7 +965,7 @@ P-Replicator V1.5.x ● user │ Sonnet 4.7
|
|
|
774
965
|
🚀 Pipeline /<cmd> ▓▓▓░░░░ 50% │ Phase: VALIDATE (2/4) │ Last: /replicate
|
|
775
966
|
🎯 Roadmap [●●●○○○○○] mvp 3/8 │ Done 5/12 │ ▶ auth-jwt │ Domain: banking
|
|
776
967
|
📊 SPARC ●11/11 │ 🟢 78/100 │ Plans ●3 │ ADRs ●2 │ Harvest 2026-05-05
|
|
777
|
-
🛠️ Toolkit Skills ●10/10 │ Cmds ●11/11 │ Agents ●4+3 │ Rules ●
|
|
968
|
+
🛠️ Toolkit Skills ●10/10 │ Cmds ●11/11 │ Agents ●4+3 │ Rules ●13+2 │ Hooks ●17/17
|
|
778
969
|
💡 Insights ●12 (2026-05-06) │ Tests 85/85 ✓ │ MCP ●1/1 │ Settings ✓ │ 🧬 Keysarium ✓
|
|
779
970
|
```
|
|
780
971
|
|
|
@@ -810,16 +1001,29 @@ For internals, see [admin guide](./README/eng/03_admin_guide.md#statusline--dash
|
|
|
810
1001
|
|
|
811
1002
|
## 🪝 Hooks System
|
|
812
1003
|
|
|
813
|
-
`p-replicator` ships **
|
|
1004
|
+
`p-replicator` ships **11 cross-platform Node utilities** in `.claude/hooks/`. The Bash traceability
|
|
1005
|
+
gate described above remains a package script and is resolved directly by `/feature`; it is not a
|
|
1006
|
+
Claude Code hook.
|
|
814
1007
|
|
|
815
1008
|
| Hook | Event | Purpose |
|
|
816
1009
|
|---|---|---|
|
|
817
|
-
| `session-insights.cjs` | SessionStart |
|
|
1010
|
+
| `session-insights.cjs` | SessionStart + UserPromptSubmit | Show the missing-carrier hint at start; at prompt time select armed dz recall or the local last-three fallback |
|
|
818
1011
|
| `autocommit-roadmap.cjs` | Stop | Auto-commit `.claude/feature-roadmap.json` if changed |
|
|
819
1012
|
| `autocommit-insights.cjs` | Stop | Auto-commit `.claude/insights/` if changed |
|
|
820
1013
|
| `autocommit-plans.cjs` | Stop | Auto-commit `docs/plans/` if changed |
|
|
821
1014
|
| `statusline.cjs` | (statusLine config) | Multi-line dashboard above the prompt |
|
|
822
1015
|
| `state-update.cjs` | (utility) | Argv-driven helper for writing `.claude/.p-replicator-state.json` |
|
|
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.
|
|
823
1027
|
|
|
824
1028
|
### Cross-platform discipline
|
|
825
1029
|
|
|
@@ -898,7 +1102,14 @@ Pipeline commands optionally call this script (via Bash tool) so statusline show
|
|
|
898
1102
|
|
|
899
1103
|
### Insights system
|
|
900
1104
|
|
|
901
|
-
**Storage:** `.claude/insights/index.md` (
|
|
1105
|
+
**Storage:** `.claude/insights/index.md` (Markdown source of truth). The writer persists it before
|
|
1106
|
+
an idempotent best-effort `dz teach` duplicate, so removing or breaking `.dz` cannot remove a record.
|
|
1107
|
+
|
|
1108
|
+
`/myinsights` captures a record manually; quick/full `/harvest` uses the same carrier through the
|
|
1109
|
+
packaged writer. A fresh install intentionally has no `.claude/insights/` directory. The first valid
|
|
1110
|
+
write creates it; `init` does not pre-create an empty carrier, so doctor can keep distinguishing
|
|
1111
|
+
missing, existing-empty, and populated states. Until that first write, SessionStart prints one line:
|
|
1112
|
+
`инсайтов пока нет; /myinsights создаст первую запись`.
|
|
902
1113
|
|
|
903
1114
|
**Entry format:**
|
|
904
1115
|
|
|
@@ -927,7 +1138,28 @@ What fixed it (1-5 sentences with code if relevant).
|
|
|
927
1138
|
- ✅ `prisma-migration`, `postgres-timezone`, `docker-compose-network`
|
|
928
1139
|
- ❌ `bug`, `fix`, `important` (too generic — recall fails)
|
|
929
1140
|
|
|
930
|
-
**
|
|
1141
|
+
**Prompt-time injection:** `UserPromptSubmit` passes the real prompt to `session-insights.cjs`. Only a
|
|
1142
|
+
successful, non-empty dz recall result from the insight domain suppresses local output. Absent,
|
|
1143
|
+
failing, or empty recall uses the local fallback (the last 3 Markdown entries); failure is named,
|
|
1144
|
+
absence and empty output are quiet, and one invocation never emits both sources. `SessionStart`
|
|
1145
|
+
retains only the missing-carrier hint above.
|
|
1146
|
+
|
|
1147
|
+
### Doctor insight-flow observation
|
|
1148
|
+
|
|
1149
|
+
Every `doctor` invocation measures one shared period covering the current date and the preceding two
|
|
1150
|
+
dates—three calendar days in the process's local timezone—and prints the period with both raw counts:
|
|
1151
|
+
`N fix commits and M insight records`.
|
|
1152
|
+
|
|
1153
|
+
- Fix commits come from a fresh, bounded read of project git history and count only Conventional
|
|
1154
|
+
Commit subjects beginning with `fix:` or `fix(scope):`.
|
|
1155
|
+
- Insight records come from fresh dated `## YYYY-MM-DD — ...` headings in
|
|
1156
|
+
`.claude/insights/index.md`. A missing carrier is a measured count of zero.
|
|
1157
|
+
- If the project is not a git repository, has no readable history, or a required source is unreadable,
|
|
1158
|
+
the line says `check NOT performed` and names the source instead of inventing a count.
|
|
1159
|
+
|
|
1160
|
+
The observation is informational: it has no threshold, does not interpret the relationship between
|
|
1161
|
+
the counts, and does not change `doctor` exit status. Existing installation-health checks remain the
|
|
1162
|
+
only owners of exit `0` or `1`.
|
|
931
1163
|
|
|
932
1164
|
---
|
|
933
1165
|
|
|
@@ -1001,6 +1233,14 @@ Default structure after `init`:
|
|
|
1001
1233
|
]
|
|
1002
1234
|
}
|
|
1003
1235
|
],
|
|
1236
|
+
"UserPromptSubmit": [
|
|
1237
|
+
{
|
|
1238
|
+
"matcher": "*",
|
|
1239
|
+
"hooks": [
|
|
1240
|
+
{ "type": "command", "command": "node \"${CLAUDE_PROJECT_DIR}/.claude/hooks/session-insights.cjs\"", "timeout": 5 }
|
|
1241
|
+
]
|
|
1242
|
+
}
|
|
1243
|
+
],
|
|
1004
1244
|
"Stop": [
|
|
1005
1245
|
{
|
|
1006
1246
|
"matcher": "*",
|
|
@@ -1220,17 +1460,15 @@ npx @dzhechkov/p-replicator@latest init --force
|
|
|
1220
1460
|
npx @dzhechkov/p-replicator verify
|
|
1221
1461
|
```
|
|
1222
1462
|
|
|
1223
|
-
### Insights aren't
|
|
1463
|
+
### Insights aren't injected after a prompt
|
|
1224
1464
|
|
|
1225
1465
|
Checks:
|
|
1226
1466
|
1. `.claude/insights/index.md` exists with entries?
|
|
1227
|
-
2.
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
```
|
|
1231
|
-
3. SessionStart hook configured in `settings.json`?
|
|
1467
|
+
2. `UserPromptSubmit` is configured in `.claude/settings.json`?
|
|
1468
|
+
3. If dz recall fails, does the hook name degradation and show the local fallback?
|
|
1469
|
+
4. If dz is absent or returns empty, does the local fallback appear without a dz error?
|
|
1232
1470
|
|
|
1233
|
-
If all
|
|
1471
|
+
If all checks are OK but still nothing — Claude Code may cache settings. Restart `claude`.
|
|
1234
1472
|
|
|
1235
1473
|
### Statusline lags on every command
|
|
1236
1474
|
|
|
@@ -1296,17 +1534,18 @@ npx @dzhechkov/p-replicator verify
|
|
|
1296
1534
|
|
|
1297
1535
|
<br>
|
|
1298
1536
|
|
|
1299
|
-
**Suite:**
|
|
1537
|
+
**Suite command:** `npm test` (plain Node test runner; never watch mode).
|
|
1300
1538
|
|
|
1301
1539
|
| Layer | File | Coverage |
|
|
1302
1540
|
|---|---|---|
|
|
1303
|
-
| **Unit** | `tests/unit
|
|
1304
|
-
| **E2E** | `tests/e2e
|
|
1305
|
-
| **Snapshot** | `tests/snapshot/templates.test.js`
|
|
1541
|
+
| **Unit** | `tests/unit/*.test.js` | Pure utilities, role-map and traceability contracts, hook behavior, and document consistency |
|
|
1542
|
+
| **E2E** | `tests/e2e/*.test.js` | Full CLI lifecycle plus fresh-install execution of the exact `npm pack` insight writer artifact |
|
|
1543
|
+
| **Snapshot** | `tests/snapshot/templates.test.js` | SHA-256 baseline of package templates (140 file hashes, MEASURED — `npm run snapshot:baseline`) |
|
|
1306
1544
|
|
|
1307
1545
|
**Meta-tests** verify consistency between documents:
|
|
1308
1546
|
- `replicate-pipeline.md` mentions every pre-shipped command (no orphan in rule)
|
|
1309
1547
|
- `replicate.md` Phase 3 doesn't claim "Generate `<pre-shipped>.md`" (no spec drift)
|
|
1548
|
+
- Negative/E2E fixtures live under `tests/fixtures/`; `files[]` ships `tests/`, so they are included in the npm package.
|
|
1310
1549
|
|
|
1311
1550
|
**Snapshot baseline** regenerated via `npm run snapshot:baseline` after intentional template changes.
|
|
1312
1551
|
|
|
@@ -1466,7 +1705,7 @@ npm test
|
|
|
1466
1705
|
|
|
1467
1706
|
```bash
|
|
1468
1707
|
npm run snapshot:baseline # regenerate baseline if templates/ changed
|
|
1469
|
-
npm test #
|
|
1708
|
+
npm test # settled suite: 396 pass + 3 intentional skips
|
|
1470
1709
|
npm pack --dry-run # verify tarball contents
|
|
1471
1710
|
npm publish
|
|
1472
1711
|
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dzhechkov/p-replicator",
|
|
3
|
-
"version": "1.
|
|
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": {
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
"bin/",
|
|
11
11
|
"src/",
|
|
12
|
+
"scripts/check-pipeline-gaps.sh",
|
|
12
13
|
"templates/",
|
|
13
14
|
"tests/",
|
|
14
15
|
"README/",
|
|
@@ -72,9 +73,9 @@
|
|
|
72
73
|
"access": "public"
|
|
73
74
|
},
|
|
74
75
|
"scripts": {
|
|
75
|
-
"test": "node --test 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/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/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/e2e/lifecycle.test.js tests/snapshot/templates.test.js",
|
|
76
|
-
"test:unit": "node --test 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/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/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",
|
|
77
|
-
"test:e2e": "node --test tests/e2e/lifecycle.test.js",
|
|
76
|
+
"test": "node --test tests/unit/honest-failure-rules.test.js tests/unit/generator-swarm-contract.test.js tests/unit/check-swarm-receipts.test.js tests/unit/check-embed-contract.test.js tests/unit/check-model-cost.test.js tests/unit/check-canon.test.js tests/unit/check-file-ownership.test.js tests/unit/check-source-version.test.js tests/unit/check-handoff-manifest.test.js tests/unit/check-external-deps.test.js tests/unit/check-metric-source.test.js tests/unit/negative-conclusion-gate.test.js tests/unit/check-webhook-contract.test.js tests/unit/check-job-contract.test.js tests/unit/detection-ladder-contract.test.js tests/unit/detection-ladder-registry.test.js tests/unit/utils.test.js tests/unit/adr-scanner-contract.test.js tests/unit/sparc-reconciliation.test.js tests/unit/pipeline-file-ownership.test.js tests/unit/validation-gate-teeth.test.js tests/unit/hooks-project-anchored.test.js tests/unit/insights-dz-delegation.test.js tests/unit/statusline-two-roots.test.js tests/unit/external-dependency-check.test.js tests/unit/spec-pseudocode-traceability.test.js tests/unit/sync-templates-guard.test.js tests/unit/db-port-rule.test.js tests/unit/roadmap-one-schema.test.js tests/unit/hooks-report-failures.test.js tests/unit/growth-module-b2b-gate.test.js tests/unit/detect-parse-anchor.test.js tests/unit/statusline-honest-labels.test.js tests/unit/autocommit-deletion.test.js tests/unit/check-ports.test.js tests/unit/doctor-insight-flow.test.js tests/unit/adr-decision-coverage.test.js tests/unit/growth-requirements-bridge.test.js tests/unit/check-growth-trace.test.js tests/unit/check-look-trace.test.js tests/unit/check-look-origin.test.js tests/unit/quote-provenance.test.js tests/unit/guard-honest-input-meta.test.js tests/unit/look-phase-contract.test.js tests/unit/capture-source-path.test.js tests/unit/growth-gate-conditional.test.js tests/unit/module-copy-identity.test.js tests/unit/growth-axes-and-compliance.test.js tests/unit/skill-paths-prebaked.test.js tests/unit/check-docs-complete.test.js tests/unit/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",
|
|
78
79
|
"test:snapshot": "node --test tests/snapshot/templates.test.js",
|
|
79
80
|
"test:doctor": "node bin/cli.js doctor",
|
|
80
81
|
"snapshot:baseline": "node tests/snapshot/update-baseline.js"
|