@dzhechkov/p-replicator 1.5.13 → 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/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
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
# Known Limitations
|
|
2
|
+
|
|
3
|
+
Open limitations of `@dzhechkov/p-replicator` that are accepted trade-offs in
|
|
4
|
+
the current version but warrant attention in future iterations. Each item
|
|
5
|
+
lists severity, version introduced, proposed fix, and effort estimate.
|
|
6
|
+
|
|
7
|
+
For *resolved* limitations, see [CHANGELOG.md](./CHANGELOG.md).
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Medium priority
|
|
12
|
+
|
|
13
|
+
### M1. `--feature-branches` behavior tested only via documentation-presence
|
|
14
|
+
|
|
15
|
+
- **Introduced:** v1.5.0
|
|
16
|
+
- **Status:** open
|
|
17
|
+
- **Severity:** Medium
|
|
18
|
+
- **Tags:** testing, e2e, git-workflow
|
|
19
|
+
|
|
20
|
+
**Why it's a limitation:**
|
|
21
|
+
The flag's docs are validated by meta-tests (`/run.md` and `/go.md` mention
|
|
22
|
+
`--feature-branches`, `feature/{NNN}-{id}` format, `--auto-merge`,
|
|
23
|
+
`auto-stash`). But the actual git workflow (branch creation, push, roadmap
|
|
24
|
+
update, optional merge, recovery from dirty tree) is **not** exercised in any
|
|
25
|
+
test. Regression in the documented workflow would slip past the suite.
|
|
26
|
+
|
|
27
|
+
**Proposed fix:**
|
|
28
|
+
Add an e2e test that:
|
|
29
|
+
1. Initializes a tmp project with `git init`
|
|
30
|
+
2. Creates a fake `.claude/feature-roadmap.json` with 2-3 features
|
|
31
|
+
3. Spawns Claude Code (or simulates the workflow with a stub) running
|
|
32
|
+
`/run mvp --feature-branches --auto-merge`
|
|
33
|
+
4. Asserts: feature branches created with correct names, pushed (to local
|
|
34
|
+
bare remote), roadmap updated with `number`+`branch`, main contains merge
|
|
35
|
+
commits.
|
|
36
|
+
|
|
37
|
+
**Effort:** Tier M (~3-4 hours). Requires git stub or real spawn of Claude
|
|
38
|
+
Code which complicates CI portability. Could use `simple-git` library or
|
|
39
|
+
shell out to git directly.
|
|
40
|
+
|
|
41
|
+
**Workaround until fixed:** Manual smoke test in a real Claude Code session.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
### M2. No formal `--from-docs` CLI flag for /replicate
|
|
46
|
+
|
|
47
|
+
- **Introduced:** v1.5.1 (workflow documented but invocation is heuristic)
|
|
48
|
+
- **Status:** open
|
|
49
|
+
- **Severity:** Medium
|
|
50
|
+
- **Tags:** cli, ergonomics, replicate-flow
|
|
51
|
+
|
|
52
|
+
**Why it's a limitation:**
|
|
53
|
+
The "starting from existing technical docs" workflow (added in v1.5.1 to all
|
|
54
|
+
documentation surfaces — README.md root, RU/EN user guides, replicate.md spec,
|
|
55
|
+
replicate-pipeline.md rule) is invoked via natural-language overrides in
|
|
56
|
+
`/replicate` input ("use my docs in `<path>`, skip Phase 0"). There is no
|
|
57
|
+
formal CLI flag like `/replicate --from-docs <path> --skip-discovery` that the
|
|
58
|
+
LLM can detect deterministically. The trigger detection is heuristic — it works
|
|
59
|
+
in practice but isn't easy to test or guarantee.
|
|
60
|
+
|
|
61
|
+
**Proposed fix:**
|
|
62
|
+
1. Extend `templates/.claude/commands/replicate.md` with explicit flag-parsing
|
|
63
|
+
instructions in the command's frontmatter (`argument-hint: --from-docs <path>`)
|
|
64
|
+
2. Add deterministic flag-detection logic at the start of /replicate:
|
|
65
|
+
- Parse `--from-docs <path>` and `--skip-discovery` from the command input
|
|
66
|
+
- Set state-file fields: `entry_mode: "from-docs"`, `existing_docs_path: <path>`
|
|
67
|
+
3. Document the formal flags in the user guide (RU + EN) Path A snippet
|
|
68
|
+
4. Optionally — add a thin wrapper command `/replicate-from-docs <path>` that
|
|
69
|
+
delegates to `/replicate` with pre-set overrides
|
|
70
|
+
5. Add a meta-test asserting that the documented flags are consistently mentioned
|
|
71
|
+
in spec + rule + user guides
|
|
72
|
+
|
|
73
|
+
**Effort:** Tier S (~2-3 hours). Pure markdown spec + docs sync. No CLI code
|
|
74
|
+
changes (the flag is parsed by the LLM, not by `bin/cli.js`).
|
|
75
|
+
|
|
76
|
+
**Workaround until fixed:** Use natural-language pattern documented in
|
|
77
|
+
`README/{ru,eng}/02_user_guide.md` "Starting from existing tech docs" / "Альтернативный вход".
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
### M3. `/feature` requires standard SPARC doc paths (no `--prd-path` flag)
|
|
82
|
+
|
|
83
|
+
- **Introduced:** v1.5.2 (Mode 2 workflow formalized but doc paths are hardcoded)
|
|
84
|
+
- **Status:** open
|
|
85
|
+
- **Severity:** Medium
|
|
86
|
+
- **Tags:** ergonomics, feature-flow, doc-paths, mode-2
|
|
87
|
+
|
|
88
|
+
**Why it's a limitation:**
|
|
89
|
+
The "Feature workflow in existing project" scenario (Mode 2, added in v1.5.2 to
|
|
90
|
+
all documentation surfaces — README.md root, RU/EN quickstart + user guides,
|
|
91
|
+
feature.md spec, feature-lifecycle.md rule) requires the user to have their PRD,
|
|
92
|
+
Specification, and Architecture docs at standard SPARC paths (`docs/PRD.md`,
|
|
93
|
+
`docs/Specification.md`, `docs/Architecture.md`). There are no `--prd-path`,
|
|
94
|
+
`--spec-path`, or `--docs-dir` flags for `/feature`. Existing projects with
|
|
95
|
+
docs at non-standard locations (e.g., `docs/product/PRD.md`,
|
|
96
|
+
`documentation/architecture.md`) must rename files or create symlinks one-time.
|
|
97
|
+
|
|
98
|
+
**Proposed fix:**
|
|
99
|
+
1. Add `docPaths` config in `.p-replicator.json` schema:
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"docPaths": {
|
|
103
|
+
"prd": "docs/product/PRD.md",
|
|
104
|
+
"specification": "docs/specs/main-spec.md",
|
|
105
|
+
"architecture": "docs/architecture/system.md"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
2. `/feature` resolves paths via `docPaths.<slot>` (with fallback to standard
|
|
110
|
+
`docs/<Slot>.md` if config missing)
|
|
111
|
+
3. `verify` validates all `docPaths` entries exist
|
|
112
|
+
4. `init --doc-paths-from <config>` flag for one-shot config bootstrap from
|
|
113
|
+
existing project layout
|
|
114
|
+
5. Update RU + EN user guides with the config example
|
|
115
|
+
6. Add meta-test asserting docPaths resolution honored
|
|
116
|
+
|
|
117
|
+
**Effort:** Tier S (~3-4 hours). Pure config + spec read changes; no CLI
|
|
118
|
+
command code rewrites. Backward-compatible (default behavior preserved).
|
|
119
|
+
|
|
120
|
+
**Workaround until fixed:** Rename or symlink existing docs to standard SPARC
|
|
121
|
+
slot names. This is a one-time operation per project. Documented in
|
|
122
|
+
`README/{ru,eng}/02_user_guide.md` "Feature workflow в существующем проекте (Mode 2)" /
|
|
123
|
+
"Feature workflow in an existing project (Mode 2)".
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Low priority
|
|
128
|
+
|
|
129
|
+
### L1. `shippedDefaults` baseline tracks only `settings.json`
|
|
130
|
+
|
|
131
|
+
- **Introduced:** v1.4.3
|
|
132
|
+
- **Status:** open
|
|
133
|
+
- **Severity:** Low
|
|
134
|
+
- **Tags:** orphan-detection, manifest-schema, generality
|
|
135
|
+
|
|
136
|
+
**Why:**
|
|
137
|
+
v1.4.3's `shippedDefaults` mechanism solves orphan detection only for
|
|
138
|
+
`settings.json`. If a future version needs the same protection for another
|
|
139
|
+
shipped JSON file (e.g., `.claude/feature-roadmap.json` defaults, or a new
|
|
140
|
+
`.mcp.json` template) — the baseline tracking has to be extended.
|
|
141
|
+
|
|
142
|
+
**Proposed fix:**
|
|
143
|
+
Generalize `shippedDefaults` from a single-file snapshot to a multi-file map.
|
|
144
|
+
`removeOrphanHooks` would become `removeOrphanFromConfig(existing, oldTpl,
|
|
145
|
+
newTpl, configType)` with type-aware diff strategies (hooks for
|
|
146
|
+
settings.json, items for roadmap, etc.).
|
|
147
|
+
|
|
148
|
+
**Effort:** Tier S-M (~1-2 hours). Mostly schema generalization + tests.
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
### L2. Hook identity via `command` string is fragile
|
|
153
|
+
|
|
154
|
+
- **Introduced:** v1.4.2 (`mergeSettingsJson`), v1.4.3 (`removeOrphanHooks`)
|
|
155
|
+
- **Status:** open
|
|
156
|
+
- **Severity:** Low
|
|
157
|
+
- **Tags:** identity-model, settings-json, false-positives
|
|
158
|
+
|
|
159
|
+
**Why:**
|
|
160
|
+
Hook commands are compared by their `command` string for de-dup and orphan
|
|
161
|
+
detection. If a template changes a hook's command string slightly (e.g., adds
|
|
162
|
+
a flag like `--silent`), the old version is treated as orphan and the new as
|
|
163
|
+
addition — usually correct. But if a user customized the command (e.g.,
|
|
164
|
+
changed timeout from 10 to 30 — but command unchanged), they keep their
|
|
165
|
+
customization (correct). Edge case: user TWEAKED the command (e.g., adjusted
|
|
166
|
+
script path), then on upgrade the old command is removed AND the new
|
|
167
|
+
command is added — the user's tweak is discarded.
|
|
168
|
+
|
|
169
|
+
**Proposed fix (option A):** Add stable `_id` field to template hooks.
|
|
170
|
+
Identity by id, not command-string. Pollutes settings.json schema slightly.
|
|
171
|
+
|
|
172
|
+
**Proposed fix (option B):** Track per-hook ownership (template vs user) in
|
|
173
|
+
manifest. More intrusive but cleaner.
|
|
174
|
+
|
|
175
|
+
**Effort:** Tier M (~4 hours). Need careful migration for existing manifests.
|
|
176
|
+
|
|
177
|
+
**Workaround:** User can re-customize after upgrade if their tweaks were lost.
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
### L3. No e2e tests for `update` + orphan detection (only for `init --force`)
|
|
182
|
+
|
|
183
|
+
- **Introduced:** v1.4.3
|
|
184
|
+
- **Status:** open
|
|
185
|
+
- **Severity:** Low
|
|
186
|
+
- **Tags:** testing, e2e, regression-risk
|
|
187
|
+
|
|
188
|
+
**Why:**
|
|
189
|
+
v1.4.3 added the same `mergeSettingsJson` + `removeOrphanHooks` pipeline to
|
|
190
|
+
both `init.js` and `update.js`. E2E tests cover `init --force` thoroughly
|
|
191
|
+
(orphan removed, user-added preserved, --reset-settings resets). Equivalent
|
|
192
|
+
tests for `update` path don't exist — `update.js` is implicitly trusted
|
|
193
|
+
because it uses the same helpers.
|
|
194
|
+
|
|
195
|
+
**Proposed fix:**
|
|
196
|
+
Add 3 e2e tests mirroring the v1.4.3 init e2e tests, but for `update`
|
|
197
|
+
command. Same setup (init → mutate settings.json → modify template → call
|
|
198
|
+
update), same assertions.
|
|
199
|
+
|
|
200
|
+
**Effort:** Tier S (~30 min, copy-paste-adapt of existing init tests).
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
### L4. Validation score regex pattern catches only one format
|
|
205
|
+
|
|
206
|
+
- **Introduced:** v1.5.0 (statusline.cjs)
|
|
207
|
+
- **Status:** open
|
|
208
|
+
- **Severity:** Low
|
|
209
|
+
- **Tags:** statusline, parsing, fragility
|
|
210
|
+
|
|
211
|
+
**Why:**
|
|
212
|
+
`statusline.cjs` extracts validation score from `docs/validation-report.md`
|
|
213
|
+
via regex: `(?:average\s+)?score[:\s]+(\d{1,3})(?:\s*\/\s*100)?`. This
|
|
214
|
+
catches "Score: 78", "Average Score: 78/100", but if a future
|
|
215
|
+
`requirements-validator` skill outputs a different format (e.g.,
|
|
216
|
+
"Total: 78", "Final: 78%", or YAML-style `score: 78`), the parser misses
|
|
217
|
+
and statusline shows no score badge.
|
|
218
|
+
|
|
219
|
+
**Proposed fix:**
|
|
220
|
+
Extend the regex with multiple patterns:
|
|
221
|
+
```js
|
|
222
|
+
const patterns = [
|
|
223
|
+
/(?:average\s+)?score[:\s]+(\d{1,3})/i,
|
|
224
|
+
/total[:\s]+(\d{1,3})\s*\/?\s*100/i,
|
|
225
|
+
/final[:\s]+(\d{1,3})/i,
|
|
226
|
+
/^score:\s*(\d{1,3})\s*$/im,
|
|
227
|
+
];
|
|
228
|
+
```
|
|
229
|
+
Or formalize: `requirements-validator` skill outputs a machine-readable
|
|
230
|
+
sidecar `docs/validation-summary.json` with `{score: N}`, parse that
|
|
231
|
+
directly. More robust.
|
|
232
|
+
|
|
233
|
+
**Effort:** Tier S (~30 min for regex extension, Tier M for sidecar).
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
### L5. State-file `.claude/.p-replicator-state.json` not auto-gitignored
|
|
238
|
+
|
|
239
|
+
- **Introduced:** v1.5.0 (state-update.cjs + statusline.cjs)
|
|
240
|
+
- **Status:** open
|
|
241
|
+
- **Severity:** Low
|
|
242
|
+
- **Tags:** gitignore, ephemeral-state, accidental-commit
|
|
243
|
+
|
|
244
|
+
**Why:**
|
|
245
|
+
The state-file is ephemeral — it tracks *current* command + phase + progress
|
|
246
|
+
for live statusline display. It changes every few seconds during a pipeline
|
|
247
|
+
run. If a user commits everything in `.claude/` (which is normal because
|
|
248
|
+
that's the project's Claude Code config), the state-file gets committed too,
|
|
249
|
+
then changes again, creating noisy diff churn.
|
|
250
|
+
|
|
251
|
+
**Proposed fix (option A):** `init` appends `.claude/.p-replicator-state.json`
|
|
252
|
+
to project's `.gitignore` if not already present. Less invasive: add to
|
|
253
|
+
`/start.md` template the instruction "Add `.claude/.p-replicator-state.json`
|
|
254
|
+
and `.claude/.last-test.json` to .gitignore".
|
|
255
|
+
|
|
256
|
+
**Proposed fix (option B):** Move ephemeral state out of `.claude/` to a
|
|
257
|
+
separate cache dir `.p-replicator-cache/` (which has its own gitignore
|
|
258
|
+
expectation). Cleaner separation of project-config vs runtime-cache.
|
|
259
|
+
|
|
260
|
+
**Effort:** Option A: Tier S (~15 min). Option B: Tier S-M (~1 hour, requires
|
|
261
|
+
updating statusline.cjs paths).
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
### L6. Statusline render time not measured
|
|
266
|
+
|
|
267
|
+
- **Introduced:** v1.5.0
|
|
268
|
+
- **Status:** open
|
|
269
|
+
- **Severity:** Low
|
|
270
|
+
- **Tags:** performance, observability
|
|
271
|
+
|
|
272
|
+
**Why:**
|
|
273
|
+
The statusline runs on every Claude Code prompt. If filesystem operations
|
|
274
|
+
get slow (very large `docs/` tree, network drives, etc.), the prompt
|
|
275
|
+
visibly lags. There's no instrumentation to detect or report this. User
|
|
276
|
+
notices "prompt is slow" without a clear signal that statusline is the
|
|
277
|
+
culprit.
|
|
278
|
+
|
|
279
|
+
**Proposed fix:**
|
|
280
|
+
Add optional `STATUSLINE_PROFILE=1` env-var that prints elapsed time per
|
|
281
|
+
section to stderr. Captured by Claude Code as debug output. Not visible by
|
|
282
|
+
default — opt-in via `STATUSLINE_PROFILE=1 claude`.
|
|
283
|
+
|
|
284
|
+
**Effort:** Tier S (~30 min, just `process.hrtime.bigint()` deltas around
|
|
285
|
+
each parser).
|
|
286
|
+
|
|
287
|
+
**Workaround:** None until measured. If render becomes slow, suspect
|
|
288
|
+
statusline first; can disable by removing `statusLine` field from
|
|
289
|
+
`.claude/settings.json`.
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
### L7. Statusline assumes 5 SPARC docs always required
|
|
294
|
+
|
|
295
|
+
- **Introduced:** v1.5.0
|
|
296
|
+
- **Status:** open
|
|
297
|
+
- **Severity:** Low
|
|
298
|
+
- **Tags:** statusline, hardcoded-list, generality
|
|
299
|
+
|
|
300
|
+
**Why:**
|
|
301
|
+
`statusline.cjs:parseSparcDocs()` has a hardcoded list of 11 expected SPARC
|
|
302
|
+
docs. If `sparc-prd-mini` skill evolves to add a 12th doc or rename one,
|
|
303
|
+
statusline shows incorrect "N/11". Same SSOT-divergence pattern as Fix #1
|
|
304
|
+
fought.
|
|
305
|
+
|
|
306
|
+
**Proposed fix:**
|
|
307
|
+
Source the expected list from the `sparc-prd-mini` skill itself (e.g., its
|
|
308
|
+
SKILL.md frontmatter or a `references/expected-outputs.json`). Statusline
|
|
309
|
+
reads that at runtime.
|
|
310
|
+
|
|
311
|
+
**Effort:** Tier M (~2 hours, requires schema decision in sparc-prd-mini
|
|
312
|
+
side too).
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## Summary
|
|
317
|
+
|
|
318
|
+
| Priority | Count | Total effort estimate |
|
|
319
|
+
|----------|-------|----------------------|
|
|
320
|
+
| Medium | 1 | ~3-4 hours |
|
|
321
|
+
| Low | 6 | ~6-8 hours |
|
|
322
|
+
| **Total** | **7** | **~10-12 hours** |
|
|
323
|
+
|
|
324
|
+
Pick the items that match current goals; each is independent and can be
|
|
325
|
+
addressed in any order. The Medium-priority M1 (real git e2e for
|
|
326
|
+
`--feature-branches`) gives the highest confidence boost for the v1.5.0
|
|
327
|
+
teaching workflow if the package gets real classroom usage.
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
# Multi-Platform Compatibility Roadmap
|
|
2
|
+
|
|
3
|
+
**Status:** roadmap (not committed). Captured 2026-05-07 for future review.
|
|
4
|
+
|
|
5
|
+
This document analyzes the cost/benefit of expanding `@dzhechkov/p-replicator`
|
|
6
|
+
from Claude Code-only to also supporting **Codex CLI**, **OpenCode**, and
|
|
7
|
+
**KiloCode**. Tracking the analysis here so we can return to the question
|
|
8
|
+
when real demand for non-Claude platforms appears.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Why this matters
|
|
13
|
+
|
|
14
|
+
`p-replicator` ships a workflow toolkit (slash commands, skills, agents,
|
|
15
|
+
rules, hooks, statusline) that currently targets Claude Code's config layout
|
|
16
|
+
(`.claude/...`, `settings.json`). For teaching/demo use cases (the
|
|
17
|
+
`--feature-branches` flag in v1.5.0), students using other AI coding tools
|
|
18
|
+
hit a wall — they have to either install Claude Code or copy artifacts
|
|
19
|
+
manually.
|
|
20
|
+
|
|
21
|
+
The opportunity: 80%+ of the toolkit's *content* (markdown-based skills,
|
|
22
|
+
commands, rules) is platform-neutral. Only delivery paths and a few unique
|
|
23
|
+
features (hooks, statusline) need adapter logic.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Compatibility matrix (concept → platform)
|
|
28
|
+
|
|
29
|
+
| Concept | Claude Code | Codex CLI | OpenCode (sst) | KiloCode (VS Code ext.) |
|
|
30
|
+
|---|---|---|---|---|
|
|
31
|
+
| **Slash commands** | `.claude/commands/<name>.md` | `~/.codex/prompts/<name>.md` (global) or per-project | `opencode.json` commands array | `.kilocode/commands/<name>.md` |
|
|
32
|
+
| **Project context** | `CLAUDE.md` | `AGENTS.md` (canonical) | `AGENTS.md` or `opencode.json` instructions | `.kilocode/rules/` |
|
|
33
|
+
| **Skills (composable, `view()`)** | `.claude/skills/<name>/SKILL.md` | ❌ none — must inline | ❌ none — folder of refs | ⚠️ via custom modes |
|
|
34
|
+
| **Subagents** | `.claude/agents/<name>.md` + Task tool | Subtasks (different API) | Modes/agents in config | Custom modes |
|
|
35
|
+
| **Rules** | `.claude/rules/<name>.md` | Sections in AGENTS.md | `opencode.json:rules` | `.kilocode/rules/<name>.md` |
|
|
36
|
+
| **Hooks (SessionStart, Stop)** | `settings.json:hooks` | ❌ none (only approval policies) | ⚠️ limited | ❌ only VS Code event API |
|
|
37
|
+
| **Statusline** | `settings.json:statusLine` | ❌ none (text CLI) | ⚠️ TUI status (different model) | ❌ requires VS Code ext. API |
|
|
38
|
+
| **MCP servers** | `.mcp.json` | `~/.codex/config.toml` `[mcp_servers.X]` | `opencode.json:mcp` | `.kilocode/mcp.json` |
|
|
39
|
+
| **Manifest tracking** | `.p-replicator.json` | universal — any project | universal | universal |
|
|
40
|
+
|
|
41
|
+
### Universality verdict
|
|
42
|
+
|
|
43
|
+
- ✅ **Universal (~80-100%):** slash commands, rules, MCP, manifest, project context
|
|
44
|
+
- ⚠️ **Lossy (~50-60%):** skills (require inline-compilation), subagents (different runtime models)
|
|
45
|
+
- ❌ **Claude-only:** hooks, statusline (graceful degradation needed)
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Three levels of approach
|
|
50
|
+
|
|
51
|
+
### Level 1 — Concept-portable, manual copy
|
|
52
|
+
|
|
53
|
+
**Effort:** Tier M, **~6-8 hours**.
|
|
54
|
+
|
|
55
|
+
**What changes:**
|
|
56
|
+
- Remove `.claude/skills/<X>/SKILL.md` paths from command markdown
|
|
57
|
+
- Replace `view("/mnt/skills/...")` with platform-neutral "load skill X"
|
|
58
|
+
- Hooks/statusline remain Claude-only (documented as advanced features)
|
|
59
|
+
- Add `compatibility/MANUAL_INSTALL.md` with per-platform copy instructions
|
|
60
|
+
|
|
61
|
+
**Result:** ~70% functionality preserved on any platform via manual file copy.
|
|
62
|
+
Lost: hooks (auto-commit), statusline.
|
|
63
|
+
|
|
64
|
+
### Level 2 — Adapter pattern with `init --target <platform>`
|
|
65
|
+
|
|
66
|
+
**Effort:** Tier L, **~16-30 hours total** (per-platform varies).
|
|
67
|
+
|
|
68
|
+
Mirror existing `product-keysarium-2026/lib/platform-adapters.md` pattern
|
|
69
|
+
(`/init-platform --platform <name>`).
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
src/adapters/
|
|
73
|
+
├── claude-code.js # default (current behavior)
|
|
74
|
+
├── codex.js # → ~/.codex/prompts/ + AGENTS.md
|
|
75
|
+
├── opencode.js # → opencode.json
|
|
76
|
+
└── kilocode.js # → .kilocode/
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Each adapter implements:**
|
|
80
|
+
- `getPaths()` — where each artifact type belongs on this platform
|
|
81
|
+
- `translateCommand(content)` — `$ARGUMENTS` → platform syntax
|
|
82
|
+
- `installCommand|Rule|Skill|Agent` — with path-mapping
|
|
83
|
+
- `installSettings|Hooks|Statusline` — skip on platforms without them (graceful)
|
|
84
|
+
|
|
85
|
+
**Per-platform effort:**
|
|
86
|
+
- Codex: ~8-10h (well-documented, AGENTS.md + prompts/, MCP) — closest model
|
|
87
|
+
- OpenCode: ~8-10h (`opencode.json` schema, modes API)
|
|
88
|
+
- KiloCode: ~12-20h (VS Code paradigm, may need companion extension)
|
|
89
|
+
|
|
90
|
+
**Result:** 80-90% feature parity per platform. Hooks/statusline still degraded.
|
|
91
|
+
|
|
92
|
+
### Level 3 — Full feature parity with workaround logic
|
|
93
|
+
|
|
94
|
+
**Effort:** Tier XL, **multi-week project**.
|
|
95
|
+
|
|
96
|
+
Beyond Level 2 — adapt logic for platform-specific capabilities:
|
|
97
|
+
- Codex: bake auto-commit into commands themselves (no SessionStart/Stop)
|
|
98
|
+
- OpenCode: use TUI status API for statusline
|
|
99
|
+
- KiloCode: companion VS Code extension with TreeView progress, status bar item
|
|
100
|
+
|
|
101
|
+
**Verdict:** Premature optimization for current scope. Skip until concrete demand.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Per-feature breakdown — what's worth adapting
|
|
106
|
+
|
|
107
|
+
| Feature | Universal | Adapt effort | Recommendation |
|
|
108
|
+
|---|---|---|---|
|
|
109
|
+
| `/replicate` pipeline | ✅ logic universal | path-translate commands | **Yes** — primary value |
|
|
110
|
+
| `/run`, `/go`, `/next` workflow | ✅ universal | translate `$ARGUMENTS` | **Yes** |
|
|
111
|
+
| `/feature`, `/plan` SPARC lifecycle | ✅ universal | inline skill content | **Yes** |
|
|
112
|
+
| `/myinsights`, `/docs`, `/harvest`, `/start`, `/deploy` | ✅ universal | path-translate | **Yes** |
|
|
113
|
+
| 10 skills (sparc-prd-mini, etc.) | ⚠️ Claude-specific composition | inline-compile into commands | **Compromise** — sacrifice runtime-loading |
|
|
114
|
+
| 4 pre-shipped agents | ⚠️ Claude Task-tool specific | translate to platform sub-agents | **Yes if platform supports** |
|
|
115
|
+
| 5 rules | ✅ universal markdown | path-translate | **Yes** |
|
|
116
|
+
| Hooks (SessionStart insights, Stop autocommit) | ❌ Claude-only | bake into commands as instructions | **Compromise** — degraded UX |
|
|
117
|
+
| Statusline dashboard | ❌ Claude-only | optional `progress.md` file? | **Skip** — Claude-exclusive feature |
|
|
118
|
+
| `verify` CLI command | ✅ universal | works as-is | **Yes** (already works) |
|
|
119
|
+
| `feature-roadmap.json` + `--feature-branches` | ✅ git-based | works as-is | **Yes** |
|
|
120
|
+
| MCP server config | ✅ universal | path-translate config file | **Yes** |
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Hidden complexities
|
|
125
|
+
|
|
126
|
+
1. **Slash command argument syntax differs:**
|
|
127
|
+
- Claude: `$ARGUMENTS`, `$ARG1`
|
|
128
|
+
- Codex: `{{arg}}` or appended params
|
|
129
|
+
- OpenCode: configurable
|
|
130
|
+
- **Adapter responsibility:** substitution at install time
|
|
131
|
+
|
|
132
|
+
2. **Skill composition (`view()` syntax):**
|
|
133
|
+
- Claude runtime resolves `view(.claude/skills/X/SKILL.md)` dynamically
|
|
134
|
+
- On other platforms, SKILL.md content must be **inlined** into command at install time
|
|
135
|
+
- Compile step: recursively replace `view()` references with content
|
|
136
|
+
- Complexity: cross-skill dependencies (cc-toolkit-generator-enhanced → 9 modules), deep recursion
|
|
137
|
+
|
|
138
|
+
3. **Subagent semantics:**
|
|
139
|
+
- Claude: `Task` tool spawns parallel sub-conversations with their own model
|
|
140
|
+
- Codex: sub-tasks (similar but different API)
|
|
141
|
+
- Some platforms: parallel → sequential fallback
|
|
142
|
+
- Performance hit on large pipelines
|
|
143
|
+
|
|
144
|
+
4. **Settings schema differences:**
|
|
145
|
+
- Claude: JSON schema X
|
|
146
|
+
- OpenCode: JSON schema Y
|
|
147
|
+
- Codex: TOML
|
|
148
|
+
- Adapter generates platform-specific config from common abstract spec
|
|
149
|
+
|
|
150
|
+
5. **MCP config location/format:**
|
|
151
|
+
- All 4 support MCP, but file/format differ (JSON vs TOML, project-local vs global)
|
|
152
|
+
- Translatable, but requires per-platform writer
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Recommended phased path
|
|
157
|
+
|
|
158
|
+
### Phase A — Documentation only (Tier S, ~2h)
|
|
159
|
+
|
|
160
|
+
Add a "Compatibility" section to `README.md` and `CHANGELOG.md`:
|
|
161
|
+
|
|
162
|
+
> «p-replicator v1.5.0 is designed primarily for Claude Code. Other platforms
|
|
163
|
+
> (Codex, OpenCode, KiloCode) are supported via Level 1 manual copy. Full
|
|
164
|
+
> per-platform adapters are tracked in `MULTIPLATFORM_ROADMAP.md`.»
|
|
165
|
+
|
|
166
|
+
Honest communication; sets expectations.
|
|
167
|
+
|
|
168
|
+
### Phase B — Level 1 adaptation (Tier M, ~6-8h)
|
|
169
|
+
|
|
170
|
+
Make commands platform-neutral. Add `compatibility/` directory with
|
|
171
|
+
per-platform manual install guides. Optional `init --target <platform>`
|
|
172
|
+
flag that just prints copy instructions.
|
|
173
|
+
|
|
174
|
+
### Phase C — Level 2 per-platform adapter (Tier L, ~10-20h per platform)
|
|
175
|
+
|
|
176
|
+
Implement adapter when concrete user demand for that platform appears.
|
|
177
|
+
Recommended order: **Codex first** (closest model, biggest user base),
|
|
178
|
+
then OpenCode, then KiloCode (different paradigm).
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Most-bang-for-buck: Codex first
|
|
183
|
+
|
|
184
|
+
If only one adapter ever gets built, **Codex** is the highest-value pick:
|
|
185
|
+
- Closest model to Claude Code (CLI agent + AGENTS.md + slash prompts + MCP)
|
|
186
|
+
- Largest non-Claude user base
|
|
187
|
+
- Cleanest translation (skills → AGENTS.md compilation; commands → prompts/; MCP straightforward)
|
|
188
|
+
- Estimated 85% feature parity post-adapter
|
|
189
|
+
|
|
190
|
+
OpenCode and KiloCode follow as demand appears.
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Effort matrix
|
|
195
|
+
|
|
196
|
+
| Approach | Time | Result |
|
|
197
|
+
|---|---|---|
|
|
198
|
+
| **Phase A** (documentation) | **2h** | Honest user communication |
|
|
199
|
+
| **Phase B** (Level 1 manual-copy) | **+6-8h** | ~70% functionality on any platform via copy |
|
|
200
|
+
| **Phase C — Codex adapter** | **+10-14h** | Native install on Codex with ~85% functionality |
|
|
201
|
+
| **Phase C — OpenCode adapter** | **+10-14h** | Native install on OpenCode |
|
|
202
|
+
| **Phase C — KiloCode adapter** | **+15-20h** (different paradigm, harder) | Native install on KiloCode |
|
|
203
|
+
| **Full Phase A+B+C for all 3 platforms** | **~50-60h** | Full multi-platform v2.0 |
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Reuse from product-keysarium-2026
|
|
208
|
+
|
|
209
|
+
The parent monorepo already has prior art:
|
|
210
|
+
- `lib/platform-adapters.md` — adapter registry concept
|
|
211
|
+
- `lib/platform-templates/{cursor,opencode,copilot}.md` — example templates
|
|
212
|
+
- `/init-platform --platform <name>` slash command in `.claude/commands/`
|
|
213
|
+
|
|
214
|
+
When implementing Phase B/C, **reuse these patterns** rather than designing
|
|
215
|
+
from scratch. The keysarium pattern already establishes conventions for
|
|
216
|
+
multi-platform support across the dz-* package family.
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Open decisions for future review
|
|
221
|
+
|
|
222
|
+
1. **Which platforms actually needed?** All 4 or just Claude+Codex?
|
|
223
|
+
2. **Depth of compatibility?** Manual-copy-friendly (Phase B) vs `init --target X` (Phase C) vs full feature parity (Level 3)?
|
|
224
|
+
3. **Timing:** start with Phase A docs only, or build Phase B+C immediately?
|
|
225
|
+
4. **Scope:** v2.0 milestone or incremental (v1.6 = Phase A+B, v1.7 = Codex adapter, etc.)?
|
|
226
|
+
5. **Reuse strategy:** copy keysarium-2026's adapter pattern verbatim or design lighter version?
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## Companion files
|
|
231
|
+
|
|
232
|
+
- `KNOWN_LIMITATIONS.md` — open issues with current Claude-only implementation (7 items)
|
|
233
|
+
- `CHANGELOG.md` — version history
|
|
234
|
+
- `README.md` — user-facing docs
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
*Last updated: 2026-05-07. Re-evaluate when concrete demand for non-Claude
|
|
239
|
+
platform support emerges (e.g., classroom usage with mixed-tool students).*
|
|
@@ -349,5 +349,5 @@ Full history — in [07_changelog.md](./07_changelog.md) or `CHANGELOG.md`
|
|
|
349
349
|
|
|
350
350
|
1. Read `KNOWN_LIMITATIONS.md` — might be a known limitation
|
|
351
351
|
2. Run `verify` + `doctor` — collect exact output
|
|
352
|
-
3. File issue: https://github.com/
|
|
352
|
+
3. File issue: https://github.com/djd1m/dz-harness-hub/issues
|
|
353
353
|
include: version, `verify` output, repro steps
|
|
@@ -2,6 +2,63 @@
|
|
|
2
2
|
|
|
3
3
|
Per-release evolution. Full details — in `../../CHANGELOG.md` (authoritative).
|
|
4
4
|
|
|
5
|
+
## v1.5.14 — 2026-07-28
|
|
6
|
+
|
|
7
|
+
**Docs & packaging fixes** (package-verification findings; no runtime code changes).
|
|
8
|
+
|
|
9
|
+
- 📚 Changelog gap v1.5.5–v1.5.13 closed in `CHANGELOG.md` + README highlights
|
|
10
|
+
- 📦 `CHANGELOG.md` / `KNOWN_LIMITATIONS.md` / `MULTIPLATFORM_ROADMAP.md` /
|
|
11
|
+
`tests/` now ship in the tarball (doc links resolve; `npm test` works in the
|
|
12
|
+
installed package — MEASURED: 105/105 in the unpacked pack)
|
|
13
|
+
- 🔗 GitHub links → monorepo `github.com/djd1m/dz-harness-hub`
|
|
14
|
+
(`packages/@dzhechkov/p-replicator`)
|
|
15
|
+
- 🔢 npm description skill char-count 194K+ → 880K+ (MEASURED:
|
|
16
|
+
`find templates/.claude/skills -type f -exec cat {} + | wc -c` → 880,679)
|
|
17
|
+
|
|
18
|
+
## v1.5.13 — 2026-07-10
|
|
19
|
+
|
|
20
|
+
- 🐛 `brutal-honesty-review/schemas/output.json`: `trustTier` `const: 3` →
|
|
21
|
+
range 1–3
|
|
22
|
+
|
|
23
|
+
## v1.5.11 / v1.5.12 — 2026-07-06
|
|
24
|
+
|
|
25
|
+
- ✨ `brutal-honesty-review` gained `evals/`, `schemas/output.json`,
|
|
26
|
+
`scripts/validate-config.json` (baseline-heal); v1.5.12 = version-sync only
|
|
27
|
+
|
|
28
|
+
## v1.5.9 / v1.5.10 — 2026-07-06
|
|
29
|
+
|
|
30
|
+
- 🔒 `goap-research-ed25519` honesty rewrite: Ed25519 = provenance +
|
|
31
|
+
tamper-evidence under pinned issuer keys, NOT anti-hallucination (net
|
|
32
|
+
−1,696 lines — MEASURED: `git diff --stat 9f18ec43 41ec8d36`)
|
|
33
|
+
- 🐛 `remove --dry-run` no longer deletes the manifest; `remove` keeps the
|
|
34
|
+
manifest when some files fail to delete; v1.5.10 = version-sync only
|
|
35
|
+
|
|
36
|
+
## v1.5.8 — 2026-06-29
|
|
37
|
+
|
|
38
|
+
- 🆕 `trust_tier` frontmatter on vendored skills + ADR-0001 `sources.json`
|
|
39
|
+
provenance record + optional `clone-website` UI-replication section
|
|
40
|
+
(MEASURED: `git diff c9225e8f 9f18ec43 -- packages/@dzhechkov/p-replicator`)
|
|
41
|
+
|
|
42
|
+
## v1.5.7 — 2026-06-16
|
|
43
|
+
|
|
44
|
+
- 🐛 Unknown options / unexpected CLI arguments now exit 1
|
|
45
|
+
- 🐛 `init` manifest tracks the TEMPLATE source, never a destination scan
|
|
46
|
+
|
|
47
|
+
## v1.5.5 / v1.5.6 — 2026-06-11
|
|
48
|
+
|
|
49
|
+
- 📦 First monorepo releases (`dz-harness-hub`); destructive `prepublishOnly`
|
|
50
|
+
sync hook removed; `explore` skill gained `trust_tier` frontmatter
|
|
51
|
+
|
|
52
|
+
## v1.5.4 — 2026-05-13
|
|
53
|
+
|
|
54
|
+
- 🐛 settings.json `$schema` URL → `json.schemastore.org` variant (the `www.`
|
|
55
|
+
variant made Claude Code skip the whole settings file)
|
|
56
|
+
|
|
57
|
+
## v1.5.1 – v1.5.3 — 2026-05-07
|
|
58
|
+
|
|
59
|
+
- 📚 Docs-only patches: existing-docs workflow (v1.5.1), Mode 2 formalized
|
|
60
|
+
(v1.5.2), npm README expanded ~14.6 kB → ~50 kB (v1.5.3)
|
|
61
|
+
|
|
5
62
|
## v1.5.0 — 2026-05-07
|
|
6
63
|
|
|
7
64
|
**Two features + 12 new tests.**
|
package/README/eng/README.md
CHANGED
|
@@ -49,8 +49,8 @@ from roadmap, or `/start` to bootstrap the scaffold.
|
|
|
49
49
|
## Related repositories
|
|
50
50
|
|
|
51
51
|
- npm: https://www.npmjs.com/package/@dzhechkov/p-replicator
|
|
52
|
-
- GitHub: https://github.com/
|
|
53
|
-
- Issues: https://github.com/
|
|
52
|
+
- GitHub: https://github.com/djd1m/dz-harness-hub/tree/main/packages/@dzhechkov/p-replicator
|
|
53
|
+
- Issues: https://github.com/djd1m/dz-harness-hub/issues
|
|
54
54
|
|
|
55
55
|
## Companion documentation (in package)
|
|
56
56
|
|
|
@@ -351,5 +351,5 @@ find docs/ -type f -name "*.md" | wc -l
|
|
|
351
351
|
|
|
352
352
|
1. Прочитайте `KNOWN_LIMITATIONS.md` — может это известное ограничение
|
|
353
353
|
2. Запустите `verify` + `doctor` — соберите exact output
|
|
354
|
-
3. Issue: https://github.com/
|
|
354
|
+
3. Issue: https://github.com/djd1m/dz-harness-hub/issues
|
|
355
355
|
приложите версию, output `verify`, шаги воспроизведения
|