@pareto4/pp-core 1.8.1 → 1.9.0
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/.claude-plugin/plugin.json +1 -1
- package/NOTICE +23 -0
- package/README.md +10 -1
- package/bin/install.js +34 -1
- package/gemini-extension.json +1 -1
- package/package.json +8 -3
- package/pareto-skills/pp-project-setup/SKILL.md +32 -440
- package/pp-core/bin/lib/capability-state.cjs +13 -7
- package/pp-core/bin/lib/config.cjs +7 -22
- package/pp-core/bin/lib/init.cjs +4 -4
- package/pp-core/bin/lib/installer-migration-report.cjs +1 -1
- package/pp-core/bin/lib/loop-resolver.cjs +6 -0
- package/pp-core/bin/lib/profile-output.cjs +4 -2
- package/pp-core/bin/lib/runtime-name-policy.cjs +0 -1
- package/pp-core/bin/lib/surface.cjs +2 -2
- package/pp-core/bin/shared/config-schema.manifest.json +4 -0
- package/pp-core/references/workstream-flag.md +13 -0
- package/pp-core/workflows/discovery-sprint.md +409 -16
- package/pp-core/workflows/discovery-to-build/steps/architecture-deliverables.md +250 -0
- package/pp-core/workflows/discovery-to-build.md +218 -48
- package/pp-core/workflows/discuss-phase/modes/chain.md +5 -0
- package/pp-core/workflows/discuss-phase.md +4 -0
- package/pp-core/workflows/execute-phase.md +4 -0
- package/pp-core/workflows/new-milestone.md +4 -0
- package/pp-core/workflows/plan-phase.md +4 -0
- package/pp-core/workflows/progress.md +4 -0
- package/pp-core/workflows/quick.md +4 -0
- package/pp-core/workflows/resume-project.md +4 -0
- package/pp-core/workflows/ship.md +4 -0
- package/pp-core/workflows/transition.md +4 -0
- package/pp-core/workflows/validate-phase.md +4 -0
- package/scripts/changeset/lint.cjs +20 -5
- package/scripts/lint-docs-required.cjs +10 -3
- package/scripts/release-channel.cjs +58 -0
- package/scripts/release-tarball-smoke.cjs +4 -0
- package/scripts/verify-opengsd-sweep.cjs +12 -0
- package/scripts/verify-rename-guard.cjs +333 -0
package/pp-core/bin/lib/init.cjs
CHANGED
|
@@ -1825,9 +1825,9 @@ function buildSkillManifest(cwd, skillsDir = null) {
|
|
|
1825
1825
|
// Nested layout: <entry>/skills/<stem>/SKILL.md
|
|
1826
1826
|
// Used by cline, qwen, hermes, augment, trae, antigravity (#69 nested=true).
|
|
1827
1827
|
// Descend exactly one level into <entry>/skills/ — no deeper recursion.
|
|
1828
|
-
// Scope to
|
|
1829
|
-
// that happens to have its own `skills/` subdirectory.
|
|
1830
|
-
if (!entry.name.startsWith('gsd-ns-'))
|
|
1828
|
+
// Scope to pp-ns-* routers (plus legacy gsd-ns-*) only: never vacuum up an
|
|
1829
|
+
// unrelated user skill that happens to have its own `skills/` subdirectory.
|
|
1830
|
+
if (!entry.name.startsWith('pp-ns-') && !entry.name.startsWith('gsd-ns-'))
|
|
1831
1831
|
continue;
|
|
1832
1832
|
const nestedSkillsDir = node_path_1.default.join(rootPath, entry.name, 'skills');
|
|
1833
1833
|
let nestedEntries = [];
|
|
@@ -1859,7 +1859,7 @@ function buildSkillManifest(cwd, skillsDir = null) {
|
|
|
1859
1859
|
const rootCmp = a.root.localeCompare(b.root);
|
|
1860
1860
|
return rootCmp !== 0 ? rootCmp : a.name.localeCompare(b.name);
|
|
1861
1861
|
});
|
|
1862
|
-
const gsdSkillsInstalled = skills.some((skill) => skill.name.startsWith('gsd-'));
|
|
1862
|
+
const gsdSkillsInstalled = skills.some((skill) => skill.name.startsWith('pp-') || skill.name.startsWith('gsd-'));
|
|
1863
1863
|
return {
|
|
1864
1864
|
skills,
|
|
1865
1865
|
roots,
|
|
@@ -151,7 +151,7 @@ function classifyPromptUserAction(action) {
|
|
|
151
151
|
if (/^pp-core\/sdk\/(dist|src)\//.test(relPath)) {
|
|
152
152
|
return { category: 'stale-sdk-build-artifact', choice: 'remove' };
|
|
153
153
|
}
|
|
154
|
-
if (/^skills\/gsd-[^/]+\/SKILL\.md$/.test(relPath)) {
|
|
154
|
+
if (/^skills\/(?:pp|gsd)-[^/]+\/SKILL\.md$/.test(relPath)) {
|
|
155
155
|
return { category: 'user-facing-skill', choice: 'keep' };
|
|
156
156
|
}
|
|
157
157
|
// #3610 / #3628: bundled GSD hooks shipped under `hooks/`. The whitelist
|
|
@@ -461,6 +461,12 @@ function cmdLoopRenderHooks(cwd, point, raw, options = {}) {
|
|
|
461
461
|
if (state.warnings && state.warnings.length > 0) {
|
|
462
462
|
envelope.warnings = state.warnings;
|
|
463
463
|
}
|
|
464
|
+
// No rawValue third argument, so --raw emits the JSON envelope rather than
|
|
465
|
+
// plain text. This is deliberate and load-bearing: 23 workflow call sites do
|
|
466
|
+
// `HOOKS_JSON=$(pp_run loop render-hooks <point> --raw)` and read `activeHooks`
|
|
467
|
+
// off the parsed envelope. Callers who want the human-readable text read the
|
|
468
|
+
// envelope's `rendered` field. Same convention as the deliberate
|
|
469
|
+
// `output(result, raw, undefined)` sites in src/check-command-router.cts.
|
|
464
470
|
coreOutput(envelope, raw);
|
|
465
471
|
}
|
|
466
472
|
module.exports = {
|
|
@@ -441,8 +441,10 @@ function generateSkillsSection(cwd) {
|
|
|
441
441
|
for (const entry of entries) {
|
|
442
442
|
if (!entry.isDirectory())
|
|
443
443
|
continue;
|
|
444
|
-
// Skip
|
|
445
|
-
|
|
444
|
+
// Skip pp-core's own installed skills (current 'pp-' naming plus legacy
|
|
445
|
+
// 'gsd-' directories, backward compatibility retained) — only surface
|
|
446
|
+
// project-specific skills.
|
|
447
|
+
if (entry.name.startsWith('pp-') || entry.name.startsWith('gsd-'))
|
|
446
448
|
continue;
|
|
447
449
|
const skillMdPath = node_path_1.default.join(absDir, entry.name, 'SKILL.md');
|
|
448
450
|
if (!node_fs_1.default.existsSync(skillMdPath))
|
|
@@ -43,7 +43,6 @@ function normalizeRuntimeToken(value) {
|
|
|
43
43
|
function loadAliasManifest() {
|
|
44
44
|
const manifestCandidates = [
|
|
45
45
|
node_path_1.default.resolve(__dirname, '..', 'shared', 'runtime-aliases.manifest.json'),
|
|
46
|
-
node_path_1.default.resolve(__dirname, '../../../sdk/shared/runtime-aliases.manifest.json'),
|
|
47
46
|
];
|
|
48
47
|
for (const manifestPath of manifestCandidates) {
|
|
49
48
|
try {
|
|
@@ -439,11 +439,11 @@ function _syncGsdDir(stagedDir, destDir, kind, manifest) {
|
|
|
439
439
|
}
|
|
440
440
|
// Prune stale GSD-owned files not in the staged set, preserving user-owned files
|
|
441
441
|
// (mirrors install's prefix-scoped _removeGsdEntries):
|
|
442
|
-
// - agents: only gsd-* are GSD-owned
|
|
442
|
+
// - agents: only `${kindPrefix}`-prefixed (plus legacy gsd-*) are GSD-owned
|
|
443
443
|
// - flat command dirs: only `${kindPrefix}`-prefixed are GSD-owned
|
|
444
444
|
// - namespaced command dirs: the whole dir is GSD-owned
|
|
445
445
|
for (const file of node_fs_1.default.readdirSync(destDir).filter(f => f.endsWith('.md'))) {
|
|
446
|
-
if (kindName === 'agents' && !file.startsWith('gsd-'))
|
|
446
|
+
if (kindName === 'agents' && !(kindPrefix && file.startsWith(kindPrefix)) && !file.startsWith('gsd-'))
|
|
447
447
|
continue;
|
|
448
448
|
if (kindName === 'commands' && !namespacedByDir && kindPrefix && !file.startsWith(kindPrefix))
|
|
449
449
|
continue;
|
|
@@ -68,6 +68,19 @@ All workflow routing commands include `${GSD_WS}` which:
|
|
|
68
68
|
This ensures workstream scope chains automatically through the workflow:
|
|
69
69
|
`new-milestone → discuss-phase → plan-phase → execute-phase → transition`
|
|
70
70
|
|
|
71
|
+
### Substitution rule (user-facing output and Skill/Task args)
|
|
72
|
+
|
|
73
|
+
Outside executed bash blocks, `${GSD_WS}` / `{GSD_WS}` is a placeholder, not a
|
|
74
|
+
shell variable — nothing expands it automatically. When a workflow emits a
|
|
75
|
+
routing or "Next:" command, or passes args to `Skill()`/`Task()`, Claude must
|
|
76
|
+
substitute the placeholder itself:
|
|
77
|
+
|
|
78
|
+
- Workstream active → replace with `--ws <name>`
|
|
79
|
+
- Flat mode → remove the placeholder entirely (and any doubled whitespace)
|
|
80
|
+
|
|
81
|
+
Never print the literal token `${GSD_WS}` in a user-facing command — a pasted
|
|
82
|
+
command containing it breaks in the shell.
|
|
83
|
+
|
|
71
84
|
## Directory Structure
|
|
72
85
|
|
|
73
86
|
```
|