@dzhechkov/p-replicator 1.5.12 → 1.5.14
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 +653 -0
- package/CHANGELOG.md +874 -0
- package/KNOWN_LIMITATIONS.md +327 -0
- package/MULTIPLATFORM_ROADMAP.md +239 -0
- package/README/eng/06_troubleshooting.md +1 -1
- package/README/eng/07_changelog.md +57 -0
- package/README/eng/README.md +2 -2
- package/README/ru/06_troubleshooting.md +1 -1
- package/README/ru/07_changelog.md +58 -0
- package/README/ru/README.md +2 -2
- package/README/ru/html/build.js +7 -7
- package/README/ru/html/index.html +31 -12
- package/README.md +59 -10
- package/package.json +10 -3
- package/sbom.json +1623 -0
- package/templates/.claude/skills/brutal-honesty-review/schemas/output.json +2 -1
- package/tests/e2e/lifecycle.test.js +973 -0
- package/tests/snapshot/baseline.json +125 -0
- package/tests/snapshot/templates.test.js +89 -0
- package/tests/snapshot/update-baseline.js +68 -0
- package/tests/unit/utils.test.js +636 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,874 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `@dzhechkov/p-replicator` are documented here.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.5.14] - 2026-07-28
|
|
9
|
+
|
|
10
|
+
### Fixed — Documentation & packaging (package-verification findings)
|
|
11
|
+
|
|
12
|
+
Fixes for the 2026-07-28 published-artifact verification of 1.5.13
|
|
13
|
+
(no runtime code changes; `src/`, `bin/`, `templates/` untouched —
|
|
14
|
+
MEASURED: `git diff v-prev -- src bin templates` is empty for this release):
|
|
15
|
+
|
|
16
|
+
- **Changelog gap closed.** Versions 1.5.5–1.5.13 shipped with no changelog
|
|
17
|
+
trail; this file now documents every one of them (entries below,
|
|
18
|
+
reconstructed from the monorepo git history — reproducer:
|
|
19
|
+
`git log --follow -- packages/@dzhechkov/p-replicator/package.json`).
|
|
20
|
+
README "Changelog Highlights" and `README/{eng,ru}/07_changelog.md`
|
|
21
|
+
extended to match.
|
|
22
|
+
- **`CHANGELOG.md` now ships in the tarball.** 10 doc references pointed to
|
|
23
|
+
`./CHANGELOG.md` / `../../CHANGELOG.md` while `files[]` excluded it — dead
|
|
24
|
+
link on npmjs and in `node_modules`. `files[]` now includes `CHANGELOG.md`,
|
|
25
|
+
`KNOWN_LIMITATIONS.md`, `MULTIPLATFORM_ROADMAP.md` (all doc-referenced from
|
|
26
|
+
README.md). MEASURED: `npm pack --dry-run` lists all three.
|
|
27
|
+
- **`npm test` works inside the installed package.** `scripts.test` referenced
|
|
28
|
+
`tests/` which `files[]` excluded. `tests/` (5 files, 108K) now ships.
|
|
29
|
+
MEASURED: `npm test` in the unpacked tarball → 105/105 pass.
|
|
30
|
+
- **One consistent repo URL.** Packed docs linked the pre-monorepo repo
|
|
31
|
+
`github.com/dzhechko/pu-unicorn-replicate` (HTTP 404) while `package.json`
|
|
32
|
+
pointed at the monorepo `github.com/djd1m/dz-harness-hub`. All doc links now
|
|
33
|
+
point to `github.com/djd1m/dz-harness-hub` path
|
|
34
|
+
`packages/@dzhechkov/p-replicator` (README.md, README/{eng,ru}/, ru HTML
|
|
35
|
+
guide + its build.js). MEASURED: `grep -rn "pu-unicorn-replicate"` over
|
|
36
|
+
shipped docs → only historical path mentions inside old changelog entries
|
|
37
|
+
remain.
|
|
38
|
+
- **npm `description` char-count refreshed.** "194K+ chars" was ~4.5× stale;
|
|
39
|
+
now "880K+ chars". MEASURED:
|
|
40
|
+
`find templates/.claude/skills -type f -exec cat {} + | wc -c` → 880,679.
|
|
41
|
+
- **Stale pre-publish note removed** from README Contributing (the
|
|
42
|
+
`prepublishOnly` sync hook was deleted in 1.5.5).
|
|
43
|
+
|
|
44
|
+
## [1.5.13] - 2026-07-10
|
|
45
|
+
|
|
46
|
+
### Fixed — brutal-honesty-review output schema
|
|
47
|
+
|
|
48
|
+
`templates/.claude/skills/brutal-honesty-review/schemas/output.json`:
|
|
49
|
+
`trustTier` was locked to `const: 3`; now `minimum: 1, maximum: 3` so
|
|
50
|
+
lower-tier runs validate. (Reproducer: `git diff bec5d86c 80542939 --
|
|
51
|
+
packages/@dzhechkov/p-replicator`.)
|
|
52
|
+
|
|
53
|
+
## [1.5.12] - 2026-07-06
|
|
54
|
+
|
|
55
|
+
Version-sync release after the 1.5.11 publish — no content changes to the
|
|
56
|
+
shipped package. (Reproducer: `git diff 1826ac63 bec5d86c --
|
|
57
|
+
packages/@dzhechkov/p-replicator` → package.json version line only.)
|
|
58
|
+
|
|
59
|
+
## [1.5.11] - 2026-07-06
|
|
60
|
+
|
|
61
|
+
### Changed — baseline-heal: brutal-honesty-review skill hardened
|
|
62
|
+
|
|
63
|
+
Part of the monorepo-wide "baseline-heal" pass (8 allowlisted skills healed
|
|
64
|
+
via per-skill feature-adr). For this package:
|
|
65
|
+
|
|
66
|
+
- `brutal-honesty-review` gained `evals/brutal-honesty-review.yaml`,
|
|
67
|
+
`schemas/output.json` (291 lines), `scripts/validate-config.json`;
|
|
68
|
+
`SKILL.md` updated.
|
|
69
|
+
- Snapshot baseline regenerated.
|
|
70
|
+
|
|
71
|
+
(Reproducer: `git diff 51a29bc7 1826ac63 -- packages/@dzhechkov/p-replicator`.)
|
|
72
|
+
|
|
73
|
+
## [1.5.10] - 2026-07-06
|
|
74
|
+
|
|
75
|
+
Version-sync release after the 1.5.9 publish — no content changes to the
|
|
76
|
+
shipped package. (Reproducer: `git diff 41ec8d36 51a29bc7 --
|
|
77
|
+
packages/@dzhechkov/p-replicator` → package.json version line only.)
|
|
78
|
+
|
|
79
|
+
## [1.5.9] - 2026-07-06
|
|
80
|
+
|
|
81
|
+
### Fixed — goap-ed25519 honesty/security rewrite + `remove` safety (audit waves 1/3/4)
|
|
82
|
+
|
|
83
|
+
- **`goap-research-ed25519` de-hyped and made cryptographically honest.**
|
|
84
|
+
SKILL.md, all three `references/*.md` and the Python scripts
|
|
85
|
+
(`ed25519_verifier.py`, `goap_planner.py`, `test_ed25519_verifier.py`)
|
|
86
|
+
rewritten: Ed25519 provides provenance + tamper-evidence under pinned
|
|
87
|
+
trusted-issuer keys — it does NOT prove truthfulness or prevent
|
|
88
|
+
hallucination, and the skill no longer claims it does. Domain strings alone
|
|
89
|
+
are never trusted; self-attested signatures are capped below issuer-trusted
|
|
90
|
+
confidence. Net −1,696 lines across the package (MEASURED: `git diff --stat
|
|
91
|
+
9f18ec43 41ec8d36 -- packages/@dzhechkov/p-replicator` → 892 insertions,
|
|
92
|
+
2,588 deletions).
|
|
93
|
+
- **`remove --dry-run` no longer deletes the manifest** on the
|
|
94
|
+
already-cleaned path (the dry-run guard ran after the manifest unlink).
|
|
95
|
+
- **`remove` keeps the manifest when any tracked file fails to delete**
|
|
96
|
+
(permissions/locked), so survivors stay tracked instead of being stranded.
|
|
97
|
+
- Assorted P3 doc/script fixes (`update.js`, `assess-tests.sh`,
|
|
98
|
+
`README/ru/html/build.js`, doc-count reconciliations).
|
|
99
|
+
|
|
100
|
+
## [1.5.8] - 2026-06-29
|
|
101
|
+
|
|
102
|
+
### Changed — Phase-3 toolkit drift fixes + provenance record
|
|
103
|
+
|
|
104
|
+
- `trust_tier` frontmatter added to vendored skills `goap-research-ed25519`,
|
|
105
|
+
`problem-solver-enhanced`, `reverse-engineering-unicorn` (bodies unchanged
|
|
106
|
+
apart from the frontmatter — MEASURED: `git diff c9225e8f 9f18ec43 --
|
|
107
|
+
packages/@dzhechkov/p-replicator/templates/.claude/skills` shows only
|
|
108
|
+
`trust_tier*` line additions; `sources.json` records "resynced 2026-06-29 —
|
|
109
|
+
added trust_tier (body identical)").
|
|
110
|
+
- New `sources.json` — ADR-0001 provenance record mapping each of the 10
|
|
111
|
+
skills to its origin (vendored / vendored-adapted / intentional-fork /
|
|
112
|
+
toolkit-original). Documentation-only, not shipped in the tarball.
|
|
113
|
+
- `replicate-pipeline.md` rule: new optional post-pipeline **UI replication**
|
|
114
|
+
section referencing the external `clone-website` skill
|
|
115
|
+
(`@dzhechkov/skills-website-cloner`) — reference, not vendored.
|
|
116
|
+
|
|
117
|
+
(Reproducer: `git diff c9225e8f 9f18ec43 -- packages/@dzhechkov/p-replicator`.)
|
|
118
|
+
|
|
119
|
+
## [1.5.7] - 2026-06-16
|
|
120
|
+
|
|
121
|
+
### Fixed — C4 audit cluster (CLI strictness + manifest safety)
|
|
122
|
+
|
|
123
|
+
- **CLI argument validation:** unknown options (`--nope`) and unexpected
|
|
124
|
+
positional arguments now error with exit 1 instead of being silently
|
|
125
|
+
ignored (`src/cli.js`).
|
|
126
|
+
- **`init` manifest tracks the TEMPLATE source, never a destination scan**
|
|
127
|
+
(`src/commands/init.js`) — walking the destination would adopt user-created
|
|
128
|
+
files into the manifest and a later `remove` would delete them (user data
|
|
129
|
+
loss). Matches `update.js`'s invariant.
|
|
130
|
+
- Doc fixes in `replicate-coordinator.md`, `replicate.md`,
|
|
131
|
+
`cc-toolkit-generator-enhanced` modules; snapshot baseline regenerated.
|
|
132
|
+
|
|
133
|
+
(Reproducer: `git diff 60238ced c9225e8f -- packages/@dzhechkov/p-replicator`.)
|
|
134
|
+
|
|
135
|
+
## [1.5.6] - 2026-06-11
|
|
136
|
+
|
|
137
|
+
### Changed — P6 wave: explore skill trust tier
|
|
138
|
+
|
|
139
|
+
- `explore` skill gained `trust_tier` frontmatter (Tier 1 "Structured").
|
|
140
|
+
- Its handoff reference changed `goap-research-ed25519` → `goap-research`
|
|
141
|
+
(alias documented in `skill-interface-protocol.md`).
|
|
142
|
+
|
|
143
|
+
(Reproducer: `git diff e0be1d53 60238ced -- packages/@dzhechkov/p-replicator`.)
|
|
144
|
+
|
|
145
|
+
## [1.5.5] - 2026-06-11
|
|
146
|
+
|
|
147
|
+
### Changed — First monorepo release (dz-harness-hub)
|
|
148
|
+
|
|
149
|
+
First version published from the `dz-harness-hub` monorepo
|
|
150
|
+
(`packages/@dzhechkov/p-replicator`) instead of the original
|
|
151
|
+
`pu-unicorn-replicate` repo. Metadata-only changes:
|
|
152
|
+
|
|
153
|
+
- `repository` / `homepage` / `bugs` → `github.com/djd1m/dz-harness-hub`
|
|
154
|
+
(with `directory` field).
|
|
155
|
+
- **Destructive `prepublishOnly` sync hook removed** (`scripts/sync-templates.js`
|
|
156
|
+
no longer runs on publish — it could delete pre-shipped files when run from
|
|
157
|
+
the wrong root).
|
|
158
|
+
- `publishConfig.access: public` added; `@dzhechkov/keysarium-core` peer range
|
|
159
|
+
`^1.0.0` → `^1.1.0`.
|
|
160
|
+
|
|
161
|
+
(Reproducer: `git diff e1651fcf e0be1d53 -- packages/@dzhechkov/p-replicator`
|
|
162
|
+
→ package.json only.)
|
|
163
|
+
|
|
164
|
+
## [1.5.4] - 2026-05-13
|
|
165
|
+
|
|
166
|
+
### Fixed — settings.json `$schema` URL
|
|
167
|
+
|
|
168
|
+
The default `settings.json` shipped via `init` had an incorrect `$schema`
|
|
169
|
+
URL (`https://www.schemastore.org/claude-code-settings.json`). Claude Code's
|
|
170
|
+
JSON-schema validator rejected it with:
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
Settings Error
|
|
174
|
+
$schema: Invalid value.
|
|
175
|
+
Expected one of: "https://json.schemastore.org/claude-code-settings.json"
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
The validator then **skipped the entire settings file**, which silently
|
|
179
|
+
disabled the statusline + hooks shipped by p-replicator until the URL was
|
|
180
|
+
manually corrected.
|
|
181
|
+
|
|
182
|
+
**Root cause:** schemastore.org has two host aliases (`www.` and `json.`),
|
|
183
|
+
but Claude Code's strict-schema check accepts only the `json.` variant.
|
|
184
|
+
|
|
185
|
+
**Fix:** corrected the URL to `https://json.schemastore.org/claude-code-settings.json`
|
|
186
|
+
in the source `.claude/settings.json` and propagated through:
|
|
187
|
+
|
|
188
|
+
1. `pu-unicorn-replicate-main/.claude/settings.json` (source-of-truth)
|
|
189
|
+
2. `packages/p-replicator/templates/.claude/settings.json` (auto-synced template
|
|
190
|
+
shipped by `init`)
|
|
191
|
+
3. `README.md` (root, code sample)
|
|
192
|
+
4. `README/eng/03_admin_guide.md`
|
|
193
|
+
5. `README/eng/04_api_reference.md`
|
|
194
|
+
6. `README/ru/03_admin_guide.md`
|
|
195
|
+
7. `README/ru/04_api_reference.md`
|
|
196
|
+
8. `README/ru/html/index.html`
|
|
197
|
+
|
|
198
|
+
Snapshot baseline regenerated (`tests/snapshot/baseline.json`).
|
|
199
|
+
|
|
200
|
+
**Tests:** 105/105 passing.
|
|
201
|
+
|
|
202
|
+
**Migration for existing installations:**
|
|
203
|
+
|
|
204
|
+
Option A (recommended) — run `update`:
|
|
205
|
+
```bash
|
|
206
|
+
npx @dzhechkov/p-replicator update
|
|
207
|
+
```
|
|
208
|
+
The v1.4.2+ `mergeSettingsJson` logic preserves user customizations while
|
|
209
|
+
correcting the `$schema` field via the `shippedDefaults` baseline diff.
|
|
210
|
+
|
|
211
|
+
Option B — manual one-line edit of `.claude/settings.json`:
|
|
212
|
+
```diff
|
|
213
|
+
- "$schema": "https://www.schemastore.org/claude-code-settings.json",
|
|
214
|
+
+ "$schema": "https://json.schemastore.org/claude-code-settings.json",
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Option C — ignore. Claude Code only warns; statusline/hooks STILL load
|
|
218
|
+
because `init`'s code path doesn't depend on the `$schema` value being valid.
|
|
219
|
+
(But the warning is annoying and will appear on every session start.)
|
|
220
|
+
|
|
221
|
+
## [1.5.3] - 2026-05-07
|
|
222
|
+
|
|
223
|
+
### Changed — Comprehensive README.md expansion for npm registry
|
|
224
|
+
|
|
225
|
+
The package-root `README.md` (auto-included in npm tarball, displayed on
|
|
226
|
+
npmjs.com/package/@dzhechkov/p-replicator) was significantly under-detailed
|
|
227
|
+
compared to the bilingual `README/eng/*.md` deep-dives (8 files, ~3000 lines).
|
|
228
|
+
Many users landing on the npm registry page didn't see key features
|
|
229
|
+
(statusline, --feature-branches, Mode 2, validation thresholds, hooks system,
|
|
230
|
+
architecture highlights) without navigating to the eng/ folder.
|
|
231
|
+
|
|
232
|
+
**v1.5.3 expands README.md from ~14.6 kB to ~50+ kB** through strategic
|
|
233
|
+
consolidation of content from `README/eng/01_quickstart.md` through
|
|
234
|
+
`07_changelog.md`, with explicit pointers to the eng/ files for power-user
|
|
235
|
+
deep dives. The README now stands alone for ~95% of users.
|
|
236
|
+
|
|
237
|
+
**New sections added (or significantly expanded):**
|
|
238
|
+
|
|
239
|
+
1. **Table of Contents** — 26 anchor-linked sections (npm registry doesn't
|
|
240
|
+
auto-generate TOC, so explicit links are mandatory for navigability)
|
|
241
|
+
2. **What is p-replicator?** — full intro with use cases, target architecture,
|
|
242
|
+
2-row use-case decision table
|
|
243
|
+
3. **Quick Start** — preserved + clarified
|
|
244
|
+
4. **Already have technical documentation?** — v1.5.1 alt-entry recipe (kept)
|
|
245
|
+
5. **Adding features to an existing project (Mode 2)** — v1.5.2 recipe (kept,
|
|
246
|
+
slightly expanded with caveats)
|
|
247
|
+
6. **Installation** — NEW: prerequisites, common install scenarios table
|
|
248
|
+
7. **What Gets Installed** — expanded to cover both pre-shipped and
|
|
249
|
+
project-generated artifacts
|
|
250
|
+
8. **Verify the install** — NEW: doctor vs verify, exit codes
|
|
251
|
+
9. **Pipeline overview — `/replicate` phases** — NEW: full 5-phase walkthrough
|
|
252
|
+
with validator agents table, verdict thresholds
|
|
253
|
+
10. **Skills Reference** — preserved + module breakdown table for
|
|
254
|
+
cc-toolkit-generator-enhanced + view() syntax explanation
|
|
255
|
+
11. **Commands Reference** — NEW: full 11-command table with when-to-use,
|
|
256
|
+
detailed sections for /run, /go, /myinsights, /harvest
|
|
257
|
+
12. **CLI Commands** — NEW: subcommands table, global flags, slash command flags
|
|
258
|
+
13. **Validation Cycle Details** — NEW: 5-agent swarm, INVEST/SMART criteria,
|
|
259
|
+
verdict matrix, brutal-honesty severity classification
|
|
260
|
+
14. **Feature Lifecycle** — NEW: Mode 1 vs Mode 2, all 4 phases, AUTO mode
|
|
261
|
+
15. **Statusline Dashboard** — NEW: 6-line layout, sources matrix, defensive
|
|
262
|
+
design, disable instructions
|
|
263
|
+
16. **Hooks System** — NEW: 6 hook scripts table, cross-platform discipline,
|
|
264
|
+
state-file flow
|
|
265
|
+
17. **Roadmap & Insights** — NEW: feature-roadmap.json schema, lifecycle states,
|
|
266
|
+
insights system entry format and conventions
|
|
267
|
+
18. **Architecture Highlights** — NEW: two-tier model, SSOT, settings merge
|
|
268
|
+
logic, manifest schema
|
|
269
|
+
19. **Configuration** — NEW: settings.json default, MCP servers, Keysarium
|
|
270
|
+
20. **Update workflow** — NEW: 3 update strategies, merge logic algorithm
|
|
271
|
+
21. **Troubleshooting** — NEW: top 12 issues with diagnostics + commands
|
|
272
|
+
22. **Migration** — NEW: per-version migration table 1.3.x → 1.5.x
|
|
273
|
+
23. **Test Infrastructure** — NEW: 105 tests breakdown, meta-tests, snapshot
|
|
274
|
+
baseline
|
|
275
|
+
24. **Known Limitations** — NEW: highlights of 8 open items + link to full file
|
|
276
|
+
25. **Changelog Highlights** — NEW: 9 versions summary 1.3.0 → 1.5.3 with
|
|
277
|
+
feature emojis
|
|
278
|
+
26. **Contributing** — NEW: dev setup, pre-publish checklist, AQE pattern
|
|
279
|
+
persistence model
|
|
280
|
+
27. **License + Links** — preserved + companion documentation index
|
|
281
|
+
|
|
282
|
+
**What's NOT in the new README (intentional):**
|
|
283
|
+
|
|
284
|
+
- Full `view()` cross-skill loading internals (in `README/eng/05_architecture.md`)
|
|
285
|
+
- Settings merge algorithm pseudocode (in `README/eng/05_architecture.md`)
|
|
286
|
+
- Statusline parser-by-parser breakdown (in `documentation/07-dashboard-howto.md`)
|
|
287
|
+
- All 15+ troubleshooting cases (in `README/eng/06_troubleshooting.md`)
|
|
288
|
+
- Full formal API schemas (in `README/eng/04_api_reference.md`)
|
|
289
|
+
|
|
290
|
+
These remain as deep-dives in eng/ — README.md links to them at appropriate spots.
|
|
291
|
+
|
|
292
|
+
**Bilingual link preservation:** RU + EN docs links remain at the top of the README.
|
|
293
|
+
|
|
294
|
+
### Tests
|
|
295
|
+
|
|
296
|
+
- Snapshot baseline NOT regenerated — README.md is at package root, NOT in
|
|
297
|
+
`templates/` (snapshot only tracks templates/.claude/* contents)
|
|
298
|
+
- All 105 tests still green — README.md expansion has zero test surface
|
|
299
|
+
- npm pack dry-run: tarball grew from ~350 kB to ~390 kB (+40 kB for the
|
|
300
|
+
expanded README; well below npm registry rendering thresholds)
|
|
301
|
+
|
|
302
|
+
### Visual polish (v1.5.3 final pass)
|
|
303
|
+
|
|
304
|
+
Within npm-renderer constraints (no inline `<style>`, stripped CSS classes),
|
|
305
|
+
applied 5 visual contrast improvements to reduce dark-blue link density and
|
|
306
|
+
improve readability on npmjs.com:
|
|
307
|
+
|
|
308
|
+
1. **Hero banner** — `<div align="center">` with centered title, tagline, and
|
|
309
|
+
8 colored badges (npm/MIT/Node + tests/skills/commands/hooks/SPARC) using
|
|
310
|
+
shields.io custom hex colors (red/green/purple/orange/blue/pink/black).
|
|
311
|
+
Reduces blue-link load on first screen.
|
|
312
|
+
|
|
313
|
+
2. **Emoji-icons in TOC** — every entry got a visual anchor (📖 🚀 📑 🔧 📦
|
|
314
|
+
📋 ✅ 🎯 🧠 ⚡ 💻 🎚️ 🔄 📊 🪝 🗺️ 🏛️ ⚙️ 🔄 🆘 📈 🧪 ⚠️ 📜 🤝 📃). Eye
|
|
315
|
+
catches colorful icons, not 26 dark-blue text links.
|
|
316
|
+
|
|
317
|
+
3. **`<details>`/`<summary>` collapsibles** for 4 verbose sections:
|
|
318
|
+
- Troubleshooting (12 cases)
|
|
319
|
+
- Migration table
|
|
320
|
+
- Test Infrastructure
|
|
321
|
+
- Changelog Highlights (9 versions)
|
|
322
|
+
|
|
323
|
+
Reduces visible link density in main view; expand on demand.
|
|
324
|
+
|
|
325
|
+
4. **Callout blocks** — `> ⚠️` for warnings, `> 💡` for tips, `> 📌` for
|
|
326
|
+
important notes, `> ✅` for confirmations. Renders with left-border
|
|
327
|
+
styling that visually pops vs plain text.
|
|
328
|
+
|
|
329
|
+
5. **Two-column TOC layout** via `<table>` with `valign="top"` — splits 26
|
|
330
|
+
items into "Getting Started + Reference" (left) and "Operations + Help"
|
|
331
|
+
(right). Better visual scanning than single-column list.
|
|
332
|
+
|
|
333
|
+
**What was NOT changed:**
|
|
334
|
+
- Link color itself (npm strips `style="color:..."` and CSS — fixed by registry)
|
|
335
|
+
- Information density (zero content removed; only repackaged)
|
|
336
|
+
- TOC anchors (all 26 links still resolve to valid section IDs)
|
|
337
|
+
|
|
338
|
+
### Migration notes
|
|
339
|
+
|
|
340
|
+
- **No breaking changes.** Pure documentation expansion + visual polish.
|
|
341
|
+
- Existing functionality unchanged.
|
|
342
|
+
- Users see significantly more content + better visual contrast on npmjs.com.
|
|
343
|
+
- HTML guide (`README/ru/html/index.html`) NOT regenerated for v1.5.3 since
|
|
344
|
+
it's built from `README/ru/*.md` (not the package-root README.md). The RU
|
|
345
|
+
HTML guide remains the authoritative single-page HTML for Russian-speaking users.
|
|
346
|
+
|
|
347
|
+
---
|
|
348
|
+
|
|
349
|
+
## [1.5.2] - 2026-05-07
|
|
350
|
+
|
|
351
|
+
### Added — Documentation & spec for "Feature workflow in existing project" (Mode 2)
|
|
352
|
+
|
|
353
|
+
`/feature` already supported the existing-project scenario via natural-language
|
|
354
|
+
invocation — v1.5.2 formalizes this entry mode across all documentation surfaces.
|
|
355
|
+
Users who already have a working project (stack defined, PRD/Specification/
|
|
356
|
+
Architecture/CLAUDE.md exist) can now use `/feature` to add new features with
|
|
357
|
+
the same SPARC-mini validation cycle that `/replicate` provides — without
|
|
358
|
+
regenerating their existing scaffold.
|
|
359
|
+
|
|
360
|
+
Two officially supported entry modes for `/feature`:
|
|
361
|
+
- **Mode 1: Post-/replicate** — project bootstrapped via /replicate (default)
|
|
362
|
+
- **Mode 2: Existing project** — `init` ran on top of existing project (NEW formalization)
|
|
363
|
+
|
|
364
|
+
The 4-phase pipeline (PLAN → VALIDATE → IMPLEMENT → REVIEW) is **identical** in
|
|
365
|
+
both modes. Same validation thresholds, same retry logic, same brutal-honesty
|
|
366
|
+
review.
|
|
367
|
+
|
|
368
|
+
**Spec docs (ship in npm tarball — visible to all installed users):**
|
|
369
|
+
- `templates/.claude/commands/feature.md` — new top-level "Use case: existing
|
|
370
|
+
project (Mode 2)" section. Documents prerequisites (init + verify, standard
|
|
371
|
+
SPARC paths), what does NOT happen in Mode 2 (no /start, no scaffold regen,
|
|
372
|
+
no auto feature-roadmap), three sub-paths (A/B/C), verification commands.
|
|
373
|
+
- `templates/.claude/rules/feature-lifecycle.md` — new "Entry modes" section
|
|
374
|
+
documenting Mode 1 vs Mode 2, prerequisites, detection (no automatic — same
|
|
375
|
+
code path), Mode 2 caveats, test contract preservation.
|
|
376
|
+
- `templates/.claude/commands/replicate.md` — new "See also: existing-project
|
|
377
|
+
feature workflow (Mode 2)" cross-reference in Alternative entry section,
|
|
378
|
+
pointing users who only want feature additions to `/feature` instead of
|
|
379
|
+
`/replicate`.
|
|
380
|
+
|
|
381
|
+
**User-facing docs (visible on GitHub + npm registry):**
|
|
382
|
+
- `README.md` (package root, auto-included in npm tarball) — new "Adding
|
|
383
|
+
features to an existing project?" subsection right after v1.5.1's "Already
|
|
384
|
+
have technical documentation?" pointer, with the recipe + 3 sub-paths +
|
|
385
|
+
pointer to user guides.
|
|
386
|
+
- `README/ru/01_quickstart.md` — new "Добавление фич в существующий проект (Mode 2)"
|
|
387
|
+
section with install steps, SPARC-path normalization, 3 sub-paths table,
|
|
388
|
+
validation thresholds, init-preservation guarantees, and caveats.
|
|
389
|
+
- `README/eng/01_quickstart.md` — parallel English version.
|
|
390
|
+
- `README/ru/02_user_guide.md` — new "Feature workflow в существующем проекте (Mode 2)"
|
|
391
|
+
subsection in `/feature` description (full recipe, 3-mode comparison table,
|
|
392
|
+
step-by-step bash, all 3 sub-paths with code examples, init-preservation
|
|
393
|
+
table, validation-thresholds, 4 enumerated caveats, verification, future
|
|
394
|
+
enhancement reference to M3).
|
|
395
|
+
- `README/eng/02_user_guide.md` — parallel English version.
|
|
396
|
+
|
|
397
|
+
**Tracking:**
|
|
398
|
+
- `KNOWN_LIMITATIONS.md` — new entry M3 "`/feature` requires standard SPARC
|
|
399
|
+
doc paths". Documents proposed fix (`docPaths` config in `.p-replicator.json`,
|
|
400
|
+
`init --doc-paths-from <config>` flag, verify + meta-test). Effort: Tier S.
|
|
401
|
+
|
|
402
|
+
### Three supported sub-paths for Mode 2
|
|
403
|
+
|
|
404
|
+
| Path | When | Skills invoked |
|
|
405
|
+
|---|---|---|
|
|
406
|
+
| **A. /feature directly** | Single feature ≥4 files, new capability | sparc-prd-mini → requirements-validator → parallel implement → brutal-honesty-review |
|
|
407
|
+
| **B. /go auto-router** | Mixed complexity | Routes between /plan (≤3 files) and /feature (≥4 files) by heuristics |
|
|
408
|
+
| **C. Direct skill invocation** | Only validation cycle | requirements-validator + brutal-honesty-review skills directly |
|
|
409
|
+
|
|
410
|
+
### Tests
|
|
411
|
+
|
|
412
|
+
- Snapshot baseline regenerated — `templates/.claude/commands/feature.md`,
|
|
413
|
+
`templates/.claude/rules/feature-lifecycle.md`, and
|
|
414
|
+
`templates/.claude/commands/replicate.md` SHA-256 checksums updated.
|
|
415
|
+
- All 105 tests still green. No new tests added (Mode 2 has no CLI-level
|
|
416
|
+
surface to assert; spec consistency covered by existing meta-tests).
|
|
417
|
+
- Meta-tests verified: replicate-pipeline.md still mentions all 11 pre-shipped
|
|
418
|
+
commands; replicate.md Phase 3 still does NOT contain
|
|
419
|
+
`Generate /commands/<pre-shipped>.md` patterns; both v1.5.1 and v1.5.2 spec
|
|
420
|
+
additions coexist without conflict.
|
|
421
|
+
|
|
422
|
+
### HTML guide regeneration
|
|
423
|
+
|
|
424
|
+
`README/ru/html/index.html` regenerated via `node README/ru/html/build.js` to
|
|
425
|
+
pick up the new "Добавление фич в существующий проект (Mode 2)" sections in
|
|
426
|
+
both 01_quickstart.md and 02_user_guide.md. v1.5.1's link-rewriter
|
|
427
|
+
(`rewriteInternalLink`) handles cross-section anchor resolution automatically.
|
|
428
|
+
|
|
429
|
+
### Migration notes
|
|
430
|
+
|
|
431
|
+
- **No breaking changes.** Mode 2 was always supported via natural-language
|
|
432
|
+
invocation — v1.5.2 simply formalizes and documents it across all surfaces.
|
|
433
|
+
- Users on v1.5.1 who already use this workflow continue to do so without
|
|
434
|
+
changes; v1.5.2 just adds explicit spec backing and discoverability.
|
|
435
|
+
- `verify` and `doctor` exit codes unchanged.
|
|
436
|
+
- `manifest.shippedDefaults` schema unchanged.
|
|
437
|
+
- Pre-shipped contract unchanged (10 skills + 11 commands + 4 agents + 5 rules + settings.json).
|
|
438
|
+
|
|
439
|
+
---
|
|
440
|
+
|
|
441
|
+
## [1.5.1] - 2026-05-07
|
|
442
|
+
|
|
443
|
+
### Added — Documentation & spec for "starting from existing tech docs" workflow
|
|
444
|
+
|
|
445
|
+
A long-supported variant of `/replicate` is now formally documented across all
|
|
446
|
+
documentation surfaces. Users with existing technical documentation (tech spec,
|
|
447
|
+
architecture, API specs, design docs) can skip Phase 0 (Product Discovery) and
|
|
448
|
+
feed their docs directly into Phase 1 as pre-filled context.
|
|
449
|
+
|
|
450
|
+
**Spec docs (ship in npm tarball — visible to all installed users):**
|
|
451
|
+
- `templates/.claude/commands/replicate.md` — new top-level "Alternative entry"
|
|
452
|
+
section after the Pipeline overview. Documents trigger detection (4 patterns:
|
|
453
|
+
path reference, explicit skip request, statement of available docs, semantic
|
|
454
|
+
flag), the modified Phase 1 behavior (AUTO mode, internal Explore/Research/Solve
|
|
455
|
+
skipped, `[GAP: ...]` placeholders for missing slots), three sub-paths (A/B/C),
|
|
456
|
+
caveats, verification steps, architecture-constraints reminder.
|
|
457
|
+
- `templates/.claude/commands/replicate.md` — Phase 0 Gate extended with a 4th
|
|
458
|
+
rule: "Existing technical documentation provided → skip".
|
|
459
|
+
- `templates/.claude/rules/replicate-pipeline.md` — new "Alternative entry" section
|
|
460
|
+
documenting the variant as officially supported, with trigger detection,
|
|
461
|
+
modified flow, sub-path matrix, and explicit test-contract preservation note.
|
|
462
|
+
|
|
463
|
+
**User-facing docs (visible on GitHub + npm registry):**
|
|
464
|
+
- `README.md` (package root, auto-included in npm tarball) — new "Already have
|
|
465
|
+
technical documentation?" subsection right after Quick Start, pointing to RU/EN
|
|
466
|
+
user guides for the full recipe.
|
|
467
|
+
- `README/ru/01_quickstart.md` — new "Альтернативный вход — у меня уже есть
|
|
468
|
+
техдокументация" section (3 sub-paths table, what changes per phase, caveats).
|
|
469
|
+
- `README/eng/01_quickstart.md` — parallel English version.
|
|
470
|
+
- `README/ru/02_user_guide.md` — new "Альтернативный вход" subsection in the
|
|
471
|
+
`/replicate` description (full 3-path recipe with code examples, per-phase
|
|
472
|
+
comparison table, caveats, verification, future enhancement reference).
|
|
473
|
+
- `README/eng/02_user_guide.md` — parallel English version.
|
|
474
|
+
|
|
475
|
+
**Tracking:**
|
|
476
|
+
- `KNOWN_LIMITATIONS.md` — new entry M2 "No formal `--from-docs` CLI flag for
|
|
477
|
+
/replicate". The workflow is invoked via natural-language overrides; a formal
|
|
478
|
+
flag with deterministic parsing is on the roadmap (Tier S effort).
|
|
479
|
+
|
|
480
|
+
### Three supported sub-paths
|
|
481
|
+
|
|
482
|
+
| Path | When | Skills invoked |
|
|
483
|
+
|---|---|---|
|
|
484
|
+
| **A. Full /replicate with override** | Have tech docs, want full pipeline + toolkit + scaffold | sparc-prd-mini (AUTO) → requirements-validator → cc-toolkit-generator-enhanced |
|
|
485
|
+
| **B. Direct sparc-prd-mini invocation** | Want only the 11 SPARC docs, no toolkit | sparc-prd-mini (AUTO) only |
|
|
486
|
+
| **C. Validation-only** | Existing docs already SPARC-shaped | requirements-validator only |
|
|
487
|
+
|
|
488
|
+
### Tests
|
|
489
|
+
|
|
490
|
+
- Snapshot baseline regenerated — `templates/.claude/commands/replicate.md` and
|
|
491
|
+
`templates/.claude/rules/replicate-pipeline.md` SHA-256 checksums updated.
|
|
492
|
+
- All 105 tests still green. No new tests added (workflow has no CLI-level
|
|
493
|
+
surface to assert; spec consistency covered by existing meta-tests).
|
|
494
|
+
- Meta-tests verified: replicate-pipeline.md still mentions all 11 pre-shipped
|
|
495
|
+
commands; replicate.md Phase 3 still does NOT contain
|
|
496
|
+
`Generate /commands/<pre-shipped>.md` patterns.
|
|
497
|
+
|
|
498
|
+
### Migration notes
|
|
499
|
+
|
|
500
|
+
- **No breaking changes.** The new entry mode is OPT-IN and additive.
|
|
501
|
+
- Users on v1.5.0 can already invoke this workflow via natural-language; v1.5.1
|
|
502
|
+
formalizes and documents it across all surfaces.
|
|
503
|
+
- `verify` and `doctor` exit codes unchanged.
|
|
504
|
+
- `manifest.shippedDefaults` schema unchanged.
|
|
505
|
+
- HTML guide (`README/ru/html/index.html`) regenerated via
|
|
506
|
+
`node README/ru/html/build.js` to pick up the MD updates.
|
|
507
|
+
|
|
508
|
+
---
|
|
509
|
+
|
|
510
|
+
## [1.5.0] - 2026-05-07
|
|
511
|
+
|
|
512
|
+
### Added — Two new user-facing features
|
|
513
|
+
|
|
514
|
+
#### 1. Multi-line statusLine dashboard (RuFlo-style)
|
|
515
|
+
|
|
516
|
+
Pre-shipped `statusline.cjs` script displays a dashboard above Claude Code's
|
|
517
|
+
prompt with real-time pipeline + roadmap + toolkit + status metrics. Six
|
|
518
|
+
content lines, ANSI-colored, defensive (every section wrapped in safe-guard
|
|
519
|
+
so a single parse error never breaks the whole bar).
|
|
520
|
+
|
|
521
|
+
**Layout:**
|
|
522
|
+
```
|
|
523
|
+
P-Replicator V1.5.0 ● user │ Sonnet 4.7
|
|
524
|
+
🚀 Pipeline /<cmd> ▓▓▓░░░░ 50% │ Phase: VALIDATE (2/4) │ Last: /replicate
|
|
525
|
+
🎯 Roadmap [●●●○○○○○] mvp 3/8 │ Done 5/12 │ ▶ auth-jwt │ Domain: banking
|
|
526
|
+
📊 SPARC ●11/11 │ 🟢 78/100 │ Plans ●3 │ ADRs ●2 │ Harvest 2026-05-05
|
|
527
|
+
🛠️ Toolkit Skills ●10/10 │ Cmds ●11/11 │ Agents ●4+3 │ Rules ●5+2 │ Hooks ●6/6
|
|
528
|
+
💡 Insights ●12 (2026-05-06) │ Tests 85/85 ✓ │ MCP ●1/1 │ Settings ✓ │ 🧬 Keysarium ✓
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
**Sources (heuristic from filesystem + optional state-file):**
|
|
532
|
+
- Pipeline + phase: `.claude/.p-replicator-state.json` (commands write via `state-update.cjs`)
|
|
533
|
+
- Roadmap progress: `.claude/feature-roadmap.json`
|
|
534
|
+
- SPARC docs: `docs/PRD.md` ... `docs/ADR.md` (11 expected)
|
|
535
|
+
- Validation score: `docs/validation-report.md` (regex extracts `Score: NN`)
|
|
536
|
+
- Plans: `docs/plans/*.md` count
|
|
537
|
+
- ADRs: `docs/ADR.md` H2/H3 headings, or `docs/adr/*.md`, or `docs/ddd/adr/*.md`
|
|
538
|
+
- Insights: `.claude/insights/index.md` (`## YYYY-MM-DD` headings count + last date)
|
|
539
|
+
- Toolkit health: filesystem walks of `.claude/{skills,commands,agents,rules,hooks}/`
|
|
540
|
+
- Settings status: deep-equals `.claude/settings.json` vs `manifest.shippedDefaults` → `defaults` / `merged`
|
|
541
|
+
- MCP servers: `.mcp.json` server count
|
|
542
|
+
- Keysarium: `.keysarium.json` presence
|
|
543
|
+
- Domain: keyword grep in `CLAUDE.md` (banking / retail / enterprise / healthcare)
|
|
544
|
+
- Last harvest: `TOOLKIT_HARVEST.md` mtime
|
|
545
|
+
- Last test: optional `.claude/.last-test.json` cache
|
|
546
|
+
|
|
547
|
+
**Configuration:**
|
|
548
|
+
`templates/.claude/settings.json` registers the statusLine via Claude Code's standard config:
|
|
549
|
+
```json
|
|
550
|
+
{
|
|
551
|
+
"statusLine": {
|
|
552
|
+
"type": "command",
|
|
553
|
+
"command": "node .claude/hooks/statusline.cjs"
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
```
|
|
557
|
+
|
|
558
|
+
**`state-update.cjs` companion script** — argv-driven helper for pipeline
|
|
559
|
+
commands. Pipeline commands can publish current state for the statusline:
|
|
560
|
+
```
|
|
561
|
+
node .claude/hooks/state-update.cjs --command /feature --phase VALIDATE --index 2 --total 4 --progress 0.5
|
|
562
|
+
```
|
|
563
|
+
Stale state (>30 min old) is automatically ignored by the statusline.
|
|
564
|
+
|
|
565
|
+
#### 2. `--feature-branches` flag for `/run` and `/go`
|
|
566
|
+
|
|
567
|
+
Per-feature git branch workflow for **teaching, code-review, and demo** use
|
|
568
|
+
cases. Each feature is implemented on a separate branch named
|
|
569
|
+
`feature/{NNN}-{id}` (e.g., `feature/001-auth-jwt`), pushed individually,
|
|
570
|
+
and the instructor can checkout any specific feature for demonstration.
|
|
571
|
+
|
|
572
|
+
**Usage:**
|
|
573
|
+
```bash
|
|
574
|
+
/run mvp --feature-branches # autonomous loop, branch per feature
|
|
575
|
+
/run all --feature-branches --auto-merge # also merge each branch into main
|
|
576
|
+
/go auth-jwt --feature-branches # single feature on its own branch
|
|
577
|
+
```
|
|
578
|
+
|
|
579
|
+
**Per-feature workflow (when `--feature-branches` is set):**
|
|
580
|
+
1. Verify on `main` (else fail with hint to switch)
|
|
581
|
+
2. If working tree dirty: `git stash push -u -m "auto-stash before /run feature-branches"`
|
|
582
|
+
3. Read roadmap entry; assign `number` if absent (`max(numbers) + 1`)
|
|
583
|
+
4. `git checkout -b feature/{NNN}-{id}` from main
|
|
584
|
+
5. Run delegated pipeline (`/plan` or `/feature`)
|
|
585
|
+
6. `git push origin feature/{NNN}-{id} --set-upstream`
|
|
586
|
+
7. Update roadmap: `status: done`, `branch: "feature/{NNN}-{id}"`
|
|
587
|
+
8. `git checkout main`
|
|
588
|
+
9. If `--auto-merge` flag: `git merge --no-ff feature/{NNN}-{id}`
|
|
589
|
+
|
|
590
|
+
**`--auto-merge` companion flag** — off by default. When passed alongside
|
|
591
|
+
`--feature-branches`, each feature branch is merged into `main` after the
|
|
592
|
+
feature completes. Without it, branches stay unmerged for instructor /
|
|
593
|
+
reviewer to handle (PR or manual merge).
|
|
594
|
+
|
|
595
|
+
**Roadmap schema extension:**
|
|
596
|
+
```json
|
|
597
|
+
{
|
|
598
|
+
"id": "auth-jwt",
|
|
599
|
+
"number": 1, // ← v1.5.0: auto-assigned
|
|
600
|
+
"branch": "feature/001-auth-jwt", // ← v1.5.0: populated when feature done
|
|
601
|
+
...
|
|
602
|
+
}
|
|
603
|
+
```
|
|
604
|
+
|
|
605
|
+
### Added (technical)
|
|
606
|
+
|
|
607
|
+
- `templates/.claude/hooks/statusline.cjs` (~330 LOC, standalone, zero deps)
|
|
608
|
+
- `templates/.claude/hooks/state-update.cjs` (~70 LOC, argv-driven)
|
|
609
|
+
- `statusLine` field in `templates/.claude/settings.json`
|
|
610
|
+
- `statusline` and `state-update` keys in `COMPONENTS.hooks.items` (now 6 hooks)
|
|
611
|
+
- `--feature-branches` flag documentation in `/run.md`, `/go.md`
|
|
612
|
+
- Roadmap schema extension (`number`, `branch` fields) documented in `/next.md`
|
|
613
|
+
|
|
614
|
+
### Tests
|
|
615
|
+
|
|
616
|
+
Suite grew from 93 to 105 (+12):
|
|
617
|
+
- 2 unit tests for hooks group items count (post-v1.5.0)
|
|
618
|
+
- 7 e2e tests for statusline (install, settings registration, exit code, output sections, ADRs/Plans counts, roadmap progress, defensive)
|
|
619
|
+
- 3 meta-tests for `--feature-branches` documentation in `/run.md`, `/go.md`, `/next.md`
|
|
620
|
+
|
|
621
|
+
Snapshot baseline: 113 → 115 files (+2: statusline.cjs + state-update.cjs).
|
|
622
|
+
|
|
623
|
+
### Migration notes
|
|
624
|
+
|
|
625
|
+
- **No breaking changes.** Run `npx @dzhechkov/p-replicator@1.5.0 update` or `init --force` (settings.json auto-merges, preserving customizations).
|
|
626
|
+
- **Statusline is opt-out via Claude Code's own config:** if you don't want it, remove the `statusLine` field from `.claude/settings.json` (the merge will preserve removal on next upgrade since the field is detected as a deletion).
|
|
627
|
+
- **Branch workflow is opt-in:** `--feature-branches` flag must be explicitly passed; legacy `/run mvp` works exactly as before.
|
|
628
|
+
|
|
629
|
+
## [1.4.3] - 2026-05-07
|
|
630
|
+
|
|
631
|
+
### Fixed (the v1.4.2 last known limitation)
|
|
632
|
+
|
|
633
|
+
- **Orphan hook detection on upgrade.** `mergeSettingsJson` (v1.4.2) preserved both user customizations AND old default hooks indefinitely. If a future package version removed a default hook (e.g., deprecated `autocommit-something.cjs` between v1.5 and v1.6), the user's `settings.json` would keep the obsolete hook forever — calling a script that no longer exists.
|
|
634
|
+
|
|
635
|
+
**Solution:** v1.4.3 introduces a **shipped-defaults baseline** in the manifest. Each install/update snapshots the template's `settings.json` content into `manifest.shippedDefaults["settings.json"]`. On the next upgrade:
|
|
636
|
+
- `oldTpl` = `manifest.shippedDefaults["settings.json"]` (what we shipped before)
|
|
637
|
+
- `newTpl` = current `templates/.claude/settings.json`
|
|
638
|
+
- Orphans = command strings in `oldTpl` but not in `newTpl`
|
|
639
|
+
- User's `settings.json` is cleaned of orphans BEFORE merge
|
|
640
|
+
|
|
641
|
+
**Identity model:** hooks are matched by their `command` string (set-comparison). User-modified defaults (different command-string) are correctly classified as user-added and preserved.
|
|
642
|
+
|
|
643
|
+
**Backward compatibility:** Pre-1.4.3 manifests have no `shippedDefaults` field → orphan detection skipped on first upgrade (graceful degradation), then populated for next upgrade onward.
|
|
644
|
+
|
|
645
|
+
- **`update` now respects user customizations to settings.json.** Pre-v1.4.3, `npx p-replicator update` blindly overwrote `settings.json` if it appeared in the diff's `modified` array. Now it applies the same merge + orphan-cleanup logic as `init --force`. `--reset-settings` flag still available for explicit overwrite.
|
|
646
|
+
|
|
647
|
+
### Added
|
|
648
|
+
|
|
649
|
+
- `utils.removeOrphanHooks(existing, oldTemplate, newTemplate)` — orphan detection helper. Returns existing with all command-strings present in `oldTemplate` but absent in `newTemplate` removed. Pass-through if `oldTemplate` is null.
|
|
650
|
+
- `utils.extractCommands(hooksRoot)` — internal helper extracting Set of command strings from a hooks config.
|
|
651
|
+
- `manifest.shippedDefaults["settings.json"]` — snapshot of last-shipped settings template content.
|
|
652
|
+
|
|
653
|
+
### Changed
|
|
654
|
+
|
|
655
|
+
- `createManifest()` accepts optional 4th parameter `shippedDefaults`. Manifest schema is forward-compatible: old manifests without the field still load; tools without v1.4.3 logic ignore it.
|
|
656
|
+
- `init.js` reads `previousManifest` BEFORE overwriting; passes its `shippedDefaults` to `installComponent` for orphan detection.
|
|
657
|
+
- `update.js` now branches on settings.json files: regular files use `copyDirRecursive`, settings.json runs full merge + orphan-cleanup pipeline.
|
|
658
|
+
- `--reset-settings` flag now works for `update` too (was only init in v1.4.2).
|
|
659
|
+
|
|
660
|
+
### Tests
|
|
661
|
+
|
|
662
|
+
Suite grew from 85 to 93 (+8):
|
|
663
|
+
- 5 unit tests for `removeOrphanHooks` (null oldTemplate, orphan removal, kept-in-newTemplate, user-modified preserved, no-crash on missing hooks)
|
|
664
|
+
- 1 e2e test verifying `manifest.shippedDefaults` is populated after init
|
|
665
|
+
- 2 e2e tests for orphan detection on `init --force` (orphan removed, user-added preserved alongside orphan removal)
|
|
666
|
+
|
|
667
|
+
### Migration notes
|
|
668
|
+
|
|
669
|
+
- **Strictly safer behavior.** Existing customizations preserved as before; orphans now also cleaned up properly across version bumps.
|
|
670
|
+
- **First upgrade from pre-1.4.3** has no `shippedDefaults` baseline available, so orphan detection skips for that one upgrade. Manifest gets populated for next time onward. No user action required.
|
|
671
|
+
- **`update` now also merges settings.json.** If you relied on `update` overwriting custom settings, add `--reset-settings` flag.
|
|
672
|
+
|
|
673
|
+
## [1.4.2] - 2026-05-06
|
|
674
|
+
|
|
675
|
+
### Fixed (the 3 v1.4.1 known limitations)
|
|
676
|
+
|
|
677
|
+
- **`init --force` now MERGES `settings.json` with user customizations** instead of overwriting. New algorithm in `utils.mergeSettingsJson`:
|
|
678
|
+
- Top-level fields: template fills only what user lacks (no overwrite of user-only fields)
|
|
679
|
+
- `hooks` per event-type: template hooks added if event missing; existing matchers get template hooks appended (de-duped by command string); user-only matchers (e.g., custom `Bash` matcher) preserved
|
|
680
|
+
- User-added event types (e.g., `PreToolUse`) preserved verbatim
|
|
681
|
+
- Identical commands (same string) NOT duplicated
|
|
682
|
+
- **`--reset-settings` flag added** for explicit nuclear-overwrite of settings.json. Use when you want to discard all customizations and start from package defaults: `npx p-replicator init --force --reset-settings`.
|
|
683
|
+
- **Stronger meta-test for `replicate.md` Phase 3 drift.** Old test caught only `Generate \.claude/commands/<cmd>\.md` literal phrasing; new test:
|
|
684
|
+
- Multi-verb pattern: `(generate|create|produce|write|make|output)\\s+...<cmd>\\.md`
|
|
685
|
+
- Section-scoped to "Generate these project-specific files" sub-section (so legitimate "do NOT overwrite" mentions don't trigger false positives)
|
|
686
|
+
- List-style detection: `[-*]\\s*\`<cmd>\\.md\`` catches bullet-listed filenames
|
|
687
|
+
- Allowlist for `feature-ent` (legitimate Phase 3 conditional generation)
|
|
688
|
+
- **`doctor` now checks `git` on PATH.** New "Prerequisites" section reports: pass if `git --version` succeeds, fail with clear message if not — explains why autocommit hooks (roadmap, insights, plans) would silently no-op without git.
|
|
689
|
+
|
|
690
|
+
### Added
|
|
691
|
+
|
|
692
|
+
- `utils.mergeSettingsJson(existing, template)` — public helper for JSON-aware merge
|
|
693
|
+
- `utils.mergeHookEvents(existing, template)` — internal helper for per-event merge
|
|
694
|
+
- `utils.mergeHookMatchers(existing, template)` — internal helper for per-matcher merge with command-string de-dup
|
|
695
|
+
- CLI flag `--reset-settings`
|
|
696
|
+
|
|
697
|
+
### Changed
|
|
698
|
+
|
|
699
|
+
- `installComponent()` in `init.js` accepts an `options` parameter; for single-file JSON components with `fileExists(dest)`, MERGES instead of overwriting (unless `options.resetSettings` is true)
|
|
700
|
+
- `--help` mentions the new `--reset-settings` flag
|
|
701
|
+
|
|
702
|
+
### Tests
|
|
703
|
+
|
|
704
|
+
Suite grew from 74 to 85 (+11):
|
|
705
|
+
- 6 unit tests for `mergeSettingsJson` (null cases, hook merge, de-dup, custom event preservation, top-level user fields)
|
|
706
|
+
- 3 e2e tests for settings merge behavior (preserve, reset, custom event)
|
|
707
|
+
- 1 e2e test for doctor Prerequisites section
|
|
708
|
+
- 1 strengthened meta-test (replaces old single-verb pattern)
|
|
709
|
+
|
|
710
|
+
### Migration notes
|
|
711
|
+
|
|
712
|
+
- **No breaking changes for typical workflow.** `init --force` now PRESERVES user customizations by default — strictly safer than v1.4.1.
|
|
713
|
+
- **Users who relied on `init --force` to fully reset settings.json**: add `--reset-settings` flag explicitly.
|
|
714
|
+
|
|
715
|
+
## [1.4.1] - 2026-05-06
|
|
716
|
+
|
|
717
|
+
### Fixed (the 3 v1.4.0 known limitations)
|
|
718
|
+
|
|
719
|
+
- **Cross-platform hooks (no more bash dependency).** Replaced inline `git ... 2>/dev/null || true` shell chains in `settings.json` with calls to dedicated Node scripts (`node .claude/hooks/<name>.cjs`). 4 new hook scripts shipped — all use `execFileSync('git', [...])` (no shell pipes, no platform-specific redirect syntax). Works identically on Windows-cmd, macOS/Linux bash, and Git Bash on Windows.
|
|
720
|
+
- **`verify.js` now derives both contracts from SSOT — no more hardcoded `POST_REPLICATE_HINTS`.** `utils.COMPONENTS` extended with `kind: 'pre-shipped' | 'project-generated'` field, plus 3 new project-generated groups (`projectAgents`, `projectRules`, `projectFiles`). `verify` iterates by kind, removing the duplicated post-/replicate artifact list. Adding/removing project-specific artifacts now requires editing only `utils.js`.
|
|
721
|
+
- **Meta-tests for replicate.md ↔ replicate-pipeline.md consistency.** Two new tests detect future drift: (a) `replicate-pipeline.md` mentions every pre-shipped command name (drift = silent contract violation), (b) `replicate.md` Phase 3 does NOT contain `Generate .claude/commands/<pre-shipped>.md` patterns. Catches the most common drift signatures.
|
|
722
|
+
|
|
723
|
+
### Fixed (architectural sync regression discovered during v1.4.1 development)
|
|
724
|
+
|
|
725
|
+
- **`scripts/sync-templates.js` now operates in MERGE mode** (not destructive clean-and-replace). Previous behavior: `cleanDir(dest)` before `copyRecursive(src, dest)` — which silently DELETED any file in `templates/.claude/<dir>/` not present in source `.claude/<dir>/`. This caused all v1.4.0 pre-shipped commands and rules to be wiped on every `npm publish --dry-run`. New behavior: `ensureDir(dest)` + `copyRecursive(src, dest)` — source files overwrite (canonical SoT preserved), but pre-shipped target-only files survive.
|
|
726
|
+
- **Source repo `.claude/` updated to mirror v1.4 pre-shipped templates.** The 11 commands + 5 rules + hooks + settings.json now live in `pu-unicorn-replicate-main/.claude/` (canonical SoT), so future syncs are idempotent.
|
|
727
|
+
|
|
728
|
+
### Added
|
|
729
|
+
|
|
730
|
+
- **6th pre-shipped COMPONENTS group: `hooks`** — describes the 4 cross-platform Node hook scripts as a manifest-tracked component group. Doctor now reports a "Hook scripts (expected 4)" section.
|
|
731
|
+
- **`utils.getItemRelativePath(comp, itemKey)` helper** — centralizes path derivation for both pre-shipped (skills: `<src>/<name>/SKILL.md`, commands: `<src>/<name>.md`, hooks: `<src>/<name>.cjs`) and project-generated (items keys ARE full paths) groups. Used by `verify.js`.
|
|
732
|
+
|
|
733
|
+
### Changed
|
|
734
|
+
|
|
735
|
+
- **`init.js` and `update.js` filter `Object.keys(COMPONENTS)` by `kind === 'pre-shipped'`** before installing/manifest-tracking. Project-generated groups have no `src` field and are not installable.
|
|
736
|
+
- **`doctor.js` now uses dynamic counts** (`Skills (expected ${EXPECTED_SKILLS.length})`) and includes a hooks section.
|
|
737
|
+
- **Manifest grew from 5 components to 6** (added `hooks` group). `manifest.components.sort()` now equals `['agents', 'commands', 'hooks', 'rules', 'settings', 'skills']`.
|
|
738
|
+
|
|
739
|
+
### Tests
|
|
740
|
+
|
|
741
|
+
Suite grew from 60 to 74 (+14). New tests:
|
|
742
|
+
- 4 unit tests for `COMPONENTS.kind` discrimination + group counts
|
|
743
|
+
- 5 unit tests for `getItemRelativePath` (settings.json, skills, commands, hooks, project-generated)
|
|
744
|
+
- 3 e2e tests for hook scripts (existence, settings.json references Node not bash, syntax validity)
|
|
745
|
+
- 2 meta-tests for `replicate-pipeline.md` ↔ `replicate.md` consistency
|
|
746
|
+
|
|
747
|
+
Snapshot baseline regenerated: 109 → 113 files in `templates/`.
|
|
748
|
+
|
|
749
|
+
### Migration notes
|
|
750
|
+
|
|
751
|
+
- **No breaking changes.** Run `npx @dzhechkov/p-replicator@1.4.1 init --force` to update an existing project.
|
|
752
|
+
- **Settings.json change is NON-DESTRUCTIVE.** If a user has customized their `settings.json` with project-specific hooks, `init --force` will overwrite. Recommendation: review settings.json after upgrade and re-add custom hooks. Future enhancement: settings.json merge instead of overwrite.
|
|
753
|
+
|
|
754
|
+
## [1.4.0] - 2026-05-06
|
|
755
|
+
|
|
756
|
+
### Added — Pre-shipped post-/replicate workflow toolkit
|
|
757
|
+
|
|
758
|
+
Closes the long-standing pain where users had to manually verify (via a
|
|
759
|
+
dedicated prompt) that `/replicate` Phase 3 generated all expected artifacts.
|
|
760
|
+
Sherlock-style audit found **5 internal sources of truth had drifted** (see
|
|
761
|
+
`docs/ADR-001` notes below). Resolution: pre-ship project-agnostic artifacts
|
|
762
|
+
in the npm tarball so `/replicate` Phase 3 can ENHANCE rather than CREATE
|
|
763
|
+
them.
|
|
764
|
+
|
|
765
|
+
**9 new commands shipped by `init`** (added to `templates/.claude/commands/`):
|
|
766
|
+
- `/start` — bootstrap project from SPARC docs (4-phase: Foundation → Packages parallel → Integration → Finalize)
|
|
767
|
+
- `/plan` — lightweight planning to `docs/plans/<feature>.md` (auto-commit via Stop hook)
|
|
768
|
+
- `/feature` — full SPARC-mini feature lifecycle (PLAN → VALIDATE → IMPLEMENT → REVIEW)
|
|
769
|
+
- `/go` — intelligent pipeline router (delegates to `/plan` or `/feature` based on complexity scoring)
|
|
770
|
+
- `/run` — autonomous build loop (`/next` → `/go` → repeat over MVP or all features)
|
|
771
|
+
- `/next` — pick next feature from `.claude/feature-roadmap.json` (with `update` and `<feature-id>` subcommands)
|
|
772
|
+
- `/myinsights` — capture and recall development insights
|
|
773
|
+
- `/docs` — bilingual documentation generator (RU + EN)
|
|
774
|
+
- `/deploy` — deployment workflow (dev / staging / prod tiers)
|
|
775
|
+
|
|
776
|
+
**3 new rules shipped by `init`** (added to `templates/.claude/rules/`):
|
|
777
|
+
- `git-workflow` — commit/push discipline + Conventional Commits
|
|
778
|
+
- `insights-capture` — when/how to record development "грабли" (rakes)
|
|
779
|
+
- `feature-lifecycle` — `/feature` 4-phase governance + scoring thresholds
|
|
780
|
+
|
|
781
|
+
**`.claude/settings.json` shipped** with hooks:
|
|
782
|
+
- `SessionStart`: inject the 3 most recent insights into Claude's initial context
|
|
783
|
+
- `Stop`: auto-commit `.claude/feature-roadmap.json`, `.claude/insights/`, and `docs/plans/` if changed
|
|
784
|
+
|
|
785
|
+
**New CLI command — `npx @dzhechkov/p-replicator verify`:**
|
|
786
|
+
- Checks pre-shipped contract (10 skills + 11 commands + 4 agents + 5 rules + settings.json)
|
|
787
|
+
- Detects whether `/replicate` was run (via CLAUDE.md / feature-roadmap.json presence)
|
|
788
|
+
- Reports project-specific artifact status (planner/code-reviewer/architect agents, security/coding-style rules, project-context skill, etc.) as advisory hints
|
|
789
|
+
- Replaces the user's manual verification prompt with a single, repeatable command
|
|
790
|
+
- Exit code 0 if pre-shipped contract OK, non-zero if any pre-shipped artifact missing
|
|
791
|
+
|
|
792
|
+
### Changed
|
|
793
|
+
|
|
794
|
+
- **`utils.COMPONENTS` extended with `settings` group.** Single-file component
|
|
795
|
+
(`src: '.claude/settings.json'`, `isFile: true`). `installComponent()` in
|
|
796
|
+
`init.js` now handles single-file vs directory components correctly.
|
|
797
|
+
- **`utils.COMPONENTS.<group>.items` extended.** Commands map grew from 2 to 11
|
|
798
|
+
entries; rules map grew from 2 to 5. Doctor counts (`Skills (expected N)`)
|
|
799
|
+
derive `N` dynamically from `EXPECTED_*.length`, so further additions to
|
|
800
|
+
`items` automatically update doctor output.
|
|
801
|
+
- **`templates/.claude/commands/replicate.md` Phase 3 rewritten.** Removed
|
|
802
|
+
generation steps for files now pre-shipped (`start.md`, `plan.md`, `deploy.md`,
|
|
803
|
+
`feature.md`, `myinsights.md`, generic rules, settings.json). Phase 3 now
|
|
804
|
+
generates ONLY project-specific artifacts (project agents, security rules
|
|
805
|
+
derived from NFRs, project-context skill, CLAUDE.md, scaffolds).
|
|
806
|
+
- **`templates/.claude/rules/replicate-pipeline.md` rewritten.** "What Gets
|
|
807
|
+
Generated vs Pre-existing" section now reflects reality: 11 commands, 5
|
|
808
|
+
rules, settings.json, all 4 pipeline agents, all 10 skills are pre-shipped.
|
|
809
|
+
|
|
810
|
+
### Fixed (root cause of "manual-verification pain")
|
|
811
|
+
|
|
812
|
+
Five internal sources of truth had drifted in v1.3.x:
|
|
813
|
+
1. `replicate.md` Phase 3 spec (line 222-225) claimed `/feature` and `/myinsights` "already exist"
|
|
814
|
+
2. `replicate-pipeline.md` rule listed those same commands as "Generated by /replicate"
|
|
815
|
+
3. `cc-toolkit-generator-enhanced/modules/04-05` had reference templates for `/run`, `/next`, `/go`, `/docs` that the LLM was expected to read and copy verbatim — but did so unreliably (skill itself documents `In a real project, skipping modules/04-generate-p1.md caused 10+ artifacts to be silently omitted`)
|
|
816
|
+
4. README.md promised post-pipeline commands as outputs
|
|
817
|
+
5. `cli.js showHelp` advertised "1 rule" while `EXPECTED_RULES` had 2 entries (regression fixed in 1.3.1)
|
|
818
|
+
|
|
819
|
+
After v1.4.0 there is **one source of truth** — `utils.COMPONENTS.items` —
|
|
820
|
+
consumed by all 5 surfaces (init, doctor, list, verify, cli help).
|
|
821
|
+
|
|
822
|
+
### Migration notes
|
|
823
|
+
|
|
824
|
+
- **No code changes for v1.3.x users.** Run `npx @dzhechkov/p-replicator@1.4.0 init --force` in any project to land the new pre-shipped workflow commands. Existing project-generated files (`CLAUDE.md`, `planner.md`, etc.) are not touched.
|
|
825
|
+
- **Existing manifest entries are preserved.** The v1.4 manifest is a superset; remove or re-init does not lose project state.
|
|
826
|
+
- **No breaking changes to existing commands.** `/replicate`, `/harvest`, `init`, `update`, `remove`, `list`, `doctor` behave as before — but now coexist with the new pre-shipped commands.
|
|
827
|
+
|
|
828
|
+
### Tests
|
|
829
|
+
|
|
830
|
+
Suite grew from 52 to 60 tests (45 baseline + 5 SSOT + 2 manifest preservation + 8 v1.4: 4 unit covering `COMPONENTS.items` post-v1.4 contract, 4 e2e covering pre-shipped commands/rules/settings.json + verify command). All green on baseline. Snapshot baseline regenerated: 96 → 109 files in `templates/`.
|
|
831
|
+
|
|
832
|
+
## [1.3.1] - 2026-05-06
|
|
833
|
+
|
|
834
|
+
### Fixed
|
|
835
|
+
|
|
836
|
+
- **`--help` displays correct component counts.** Previously hardcoded `"1 rule"` while `doctor.js` `EXPECTED_RULES` had two entries (`replicate-pipeline`, `skill-interface-protocol`). All counts (`10 skills`, `2 commands`, `4 agents`, `2 rules`) are now derived from `utils.COMPONENTS.items` and stay in sync automatically.
|
|
837
|
+
- **`update` + `remove` no longer destroys project-generated files.** `update.js` previously rebuilt `manifest.files` by walking the user's full `.claude/` directory, which captured files generated by `/replicate` (e.g. `start.md`, `feature.md`, `plan.md`) into the manifest. A subsequent `remove` would then delete those user-owned files, contradicting `remove.js`'s own footer guarantee:
|
|
838
|
+
> "Project-specific files were NOT removed: Generated commands (/start, /feature, /plan, etc.)"
|
|
839
|
+
|
|
840
|
+
`update.js` now tracks only files shipped by the package's `templates/`, so user-generated files are never recorded in `manifest.files` and are never deleted by `remove`.
|
|
841
|
+
- **Orphan template files are now cleaned up on update.** When a file previously shipped by the package is removed in a new version, `update` deletes it from the user's `.claude/`. Project-generated files are unaffected because they were never in the old manifest's `files` list.
|
|
842
|
+
|
|
843
|
+
### Changed
|
|
844
|
+
|
|
845
|
+
- **`utils.COMPONENTS.items` is the single source of truth for component names + descriptions.** Each component group (`skills`, `commands`, `agents`, `rules`) now declares an `items: { name: description }` map. Replaces hardcoded duplicates that previously lived independently in:
|
|
846
|
+
- `doctor.js` (`EXPECTED_SKILLS`, `EXPECTED_COMMANDS`, `EXPECTED_AGENTS`, `EXPECTED_RULES`)
|
|
847
|
+
- `list.js` (`SKILL_DETAILS`, `COMMAND_DETAILS`, `AGENT_DETAILS`)
|
|
848
|
+
- `cli.js` `showHelp()` (count strings)
|
|
849
|
+
- **`update.js` manifest source switched from project to package.** New `manifest.files` is built from `getRelativePaths(templateClaude)` instead of `getRelativePaths(projectClaude)`. Closes the data-loss path described above and makes the manifest a true list of "files this package owns."
|
|
850
|
+
|
|
851
|
+
### Added
|
|
852
|
+
|
|
853
|
+
- **Regression test suite (52 tests, ~9 sec, zero runtime deps).** Three layers using the built-in `node:test` runner:
|
|
854
|
+
|
|
855
|
+
| Layer | File | Tests | Covers |
|
|
856
|
+
|-------|------|-------|--------|
|
|
857
|
+
| L2 unit | `tests/unit/utils.test.js` | 30 | `createManifest`, `readJSON`/`writeJSON`, `fileExists`, `ensureDir`, `getRelativePaths`, `copyDirRecursive`, `copyDirFiltered`, `diffFiles`, `COMPONENTS` shape + `items` SSOT |
|
|
858
|
+
| L1 e2e | `tests/e2e/lifecycle.test.js` | 19 | full CLI lifecycle (`--version`, `--help`, `init`, `list`, `doctor`, `update`, `remove`, unknown command) + the two regressions fixed in this release |
|
|
859
|
+
| L3 snapshot | `tests/snapshot/templates.test.js` + `update-baseline.js` + `baseline.json` | 3 | SHA-256 baseline of all 96 files in `templates/` — fails on any unintended drift |
|
|
860
|
+
|
|
861
|
+
- **New npm scripts:**
|
|
862
|
+
- `npm test` — full suite
|
|
863
|
+
- `npm run test:unit`, `test:e2e`, `test:snapshot` — by layer
|
|
864
|
+
- `npm run test:doctor` — legacy smoke (`node bin/cli.js doctor`)
|
|
865
|
+
- `npm run snapshot:baseline` — regenerate `tests/snapshot/baseline.json` after intentional template changes
|
|
866
|
+
|
|
867
|
+
### Migration notes
|
|
868
|
+
|
|
869
|
+
- **No action required for existing installs.** Run `npx @dzhechkov/p-replicator@1.3.1 update` in any project. The new `update` will preserve user-generated files automatically.
|
|
870
|
+
- **Users on 1.3.0 who experienced data loss** from an `update → remove` sequence after running `/replicate` can simply re-run `/replicate` to regenerate the lost files. The bug is fixed going forward.
|
|
871
|
+
|
|
872
|
+
## [1.3.0]
|
|
873
|
+
|
|
874
|
+
Initial published baseline. 10 skills (foundation + composite + master orchestrator `cc-toolkit-generator-enhanced` with 9 modules), 2 commands (`/replicate`, `/harvest`), 4 agents (`replicate-coordinator`, `product-discoverer`, `doc-validator`, `harvest-coordinator`), 2 rules (`replicate-pipeline`, `skill-interface-protocol`). 5-phase pipeline: Discovery → Planning (SPARC docs) → Validation (5-agent swarm, score ≥ 70 = READY) → Toolkit Generation → Finalization.
|