@pareto4/pp-core 1.8.1 → 1.8.2
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 +7 -1
- package/bin/install.js +25 -0
- package/gemini-extension.json +1 -1
- package/package.json +3 -1
- 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/runtime-name-policy.cjs +0 -1
- package/pp-core/bin/lib/surface.cjs +2 -2
- package/pp-core/references/workstream-flag.md +13 -0
- 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/NOTICE
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
pp-core
|
|
2
|
+
=======
|
|
3
|
+
|
|
4
|
+
pp-core is based on gsd-core by Open GSD.
|
|
5
|
+
|
|
6
|
+
## Upstream Attribution
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2026 Open GSD
|
|
9
|
+
|
|
10
|
+
gsd-core is licensed under the MIT License.
|
|
11
|
+
Source: https://github.com/open-gsd/gsd-core
|
|
12
|
+
npm package: @opengsd/gsd-core @ version 1.5.0
|
|
13
|
+
|
|
14
|
+
The full text of the MIT License is reproduced in the LICENSE file at the root of
|
|
15
|
+
this repository.
|
|
16
|
+
|
|
17
|
+
## Fork Information
|
|
18
|
+
|
|
19
|
+
pp-core is a hard fork of gsd-core v1.5.0, maintained by The Pareto Project.
|
|
20
|
+
It is not affiliated with or endorsed by OpenGSD.
|
|
21
|
+
|
|
22
|
+
pp-core diverges from gsd-core as of 2026-06-24. The Pareto Project develops and
|
|
23
|
+
maintains pp-core independently; no upstream merges from gsd-core are planned.
|
package/README.md
CHANGED
|
@@ -87,10 +87,16 @@ Troubleshooting? See [docs/how-to/recover-and-troubleshoot.md](docs/how-to/recov
|
|
|
87
87
|
|
|
88
88
|
---
|
|
89
89
|
|
|
90
|
-
## License
|
|
90
|
+
## License & Attribution
|
|
91
91
|
|
|
92
92
|
MIT License. See [LICENSE](LICENSE) for details.
|
|
93
93
|
|
|
94
|
+
pp-core is a hard fork of [gsd-core](https://github.com/open-gsd/gsd-core) by
|
|
95
|
+
Open GSD (MIT), rebranded and extended by The Pareto Project. The original
|
|
96
|
+
copyright and permission notice are preserved in [LICENSE](LICENSE), and
|
|
97
|
+
upstream attribution is recorded in [NOTICE](NOTICE) — both files ship in the
|
|
98
|
+
npm package and in every installed footprint.
|
|
99
|
+
|
|
94
100
|
---
|
|
95
101
|
|
|
96
102
|
<div align="center">
|
package/bin/install.js
CHANGED
|
@@ -10434,6 +10434,31 @@ function install(isGlobal, runtime = 'claude', options = {}) {
|
|
|
10434
10434
|
}
|
|
10435
10435
|
}
|
|
10436
10436
|
|
|
10437
|
+
// Copy NOTICE (MIT attribution to upstream gsd-core) — the installed
|
|
10438
|
+
// footprint is a distributed copy, so the attribution must travel with it.
|
|
10439
|
+
const noticeSrc = path.join(src, 'NOTICE');
|
|
10440
|
+
const noticeDest = path.join(targetDir, 'pp-core', 'NOTICE');
|
|
10441
|
+
if (fs.existsSync(noticeSrc)) {
|
|
10442
|
+
fs.copyFileSync(noticeSrc, noticeDest);
|
|
10443
|
+
if (verifyFileInstalled(noticeDest, 'NOTICE')) {
|
|
10444
|
+
console.log(` ${green}✓${reset} Installed NOTICE`);
|
|
10445
|
+
} else {
|
|
10446
|
+
failures.push('NOTICE');
|
|
10447
|
+
}
|
|
10448
|
+
}
|
|
10449
|
+
|
|
10450
|
+
// Copy LICENSE alongside it for the same reason.
|
|
10451
|
+
const licenseSrc = path.join(src, 'LICENSE');
|
|
10452
|
+
const licenseDest = path.join(targetDir, 'pp-core', 'LICENSE');
|
|
10453
|
+
if (fs.existsSync(licenseSrc)) {
|
|
10454
|
+
fs.copyFileSync(licenseSrc, licenseDest);
|
|
10455
|
+
if (verifyFileInstalled(licenseDest, 'LICENSE')) {
|
|
10456
|
+
console.log(` ${green}✓${reset} Installed LICENSE`);
|
|
10457
|
+
} else {
|
|
10458
|
+
failures.push('LICENSE');
|
|
10459
|
+
}
|
|
10460
|
+
}
|
|
10461
|
+
|
|
10437
10462
|
// Write VERSION file
|
|
10438
10463
|
const versionDest = path.join(targetDir, 'pp-core', 'VERSION');
|
|
10439
10464
|
fs.writeFileSync(versionDest, pkg.version);
|
package/gemini-extension.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pp-core",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.2",
|
|
4
4
|
"description": "PP Core — a meta-prompting, context engineering, and spec-driven development system for AI coding agents. Loads pp-core's operating context into every Gemini CLI session.",
|
|
5
5
|
"contextFileName": "GEMINI.md"
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pareto4/pp-core",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.2",
|
|
4
4
|
"description": "Pareto pp-core — The Pareto Project's AI-assisted engineering framework: meta-prompting, context engineering, and spec-driven development for AI coding agents.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"pp-core": "bin/install.js",
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
"pp_run": "pp-core/bin/pp_run"
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
|
+
"LICENSE",
|
|
12
|
+
"NOTICE",
|
|
11
13
|
"bin",
|
|
12
14
|
"commands",
|
|
13
15
|
"pp-core",
|
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
|
|
@@ -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
|
```
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# --chain mode — interactive discuss, then auto-advance
|
|
2
2
|
|
|
3
|
+
<workstream_flag_substitution>
|
|
4
|
+
`${GSD_WS}` / `{GSD_WS}` in emitted "Next:" commands and `Skill()` args and agent dispatch prompts is a placeholder, not a shell variable — nothing expands it automatically. Substitute the active `--ws <name>`, or remove it entirely in flat mode. Never print the literal token in user-facing output. See `pp-core/references/workstream-flag.md` § Substitution rule.
|
|
5
|
+
</workstream_flag_substitution>
|
|
6
|
+
|
|
7
|
+
|
|
3
8
|
> **Lazy-loaded.** Read this file from `workflows/discuss-phase.md` when
|
|
4
9
|
> `--chain` is present in `$ARGUMENTS`, or when the parent's `auto_advance`
|
|
5
10
|
> step needs to dispatch to plan-phase under `--auto`.
|
|
@@ -11,6 +11,10 @@ Extract implementation decisions that downstream agents need. Analyze the phase
|
|
|
11
11
|
You are a thinking partner, not an interviewer. The user is the visionary — you are the builder. Your job is to capture decisions that will guide research and planning, not to figure out implementation yourself.
|
|
12
12
|
</purpose>
|
|
13
13
|
|
|
14
|
+
<workstream_flag_substitution>
|
|
15
|
+
`${GSD_WS}` / `{GSD_WS}` in emitted "Next:" commands and `Skill()` args and agent dispatch prompts is a placeholder, not a shell variable — nothing expands it automatically. Substitute the active `--ws <name>`, or remove it entirely in flat mode. Never print the literal token in user-facing output. See `pp-core/references/workstream-flag.md` § Substitution rule.
|
|
16
|
+
</workstream_flag_substitution>
|
|
17
|
+
|
|
14
18
|
<required_reading>
|
|
15
19
|
@~/.claude/pp-core/references/domain-probes.md
|
|
16
20
|
@~/.claude/pp-core/references/gate-prompts.md
|
|
@@ -9,6 +9,10 @@ consumes: PLAN.md
|
|
|
9
9
|
Execute all plans in a phase using wave-based parallel execution. Orchestrator stays lean — delegates plan execution to subagents.
|
|
10
10
|
</purpose>
|
|
11
11
|
|
|
12
|
+
<workstream_flag_substitution>
|
|
13
|
+
`${GSD_WS}` / `{GSD_WS}` in emitted "Next:" commands and `Skill()` args and agent dispatch prompts is a placeholder, not a shell variable — nothing expands it automatically. Substitute the active `--ws <name>`, or remove it entirely in flat mode. Never print the literal token in user-facing output. See `pp-core/references/workstream-flag.md` § Substitution rule.
|
|
14
|
+
</workstream_flag_substitution>
|
|
15
|
+
|
|
12
16
|
<core_principle>
|
|
13
17
|
Orchestrator coordinates, not executes. Each subagent loads the full execute-plan context. Orchestrator: discover plans → analyze deps → group waves → spawn agents → handle checkpoints → collect results.
|
|
14
18
|
</core_principle>
|
|
@@ -4,6 +4,10 @@ Start a new milestone cycle for an existing project. Loads project context, gath
|
|
|
4
4
|
|
|
5
5
|
</purpose>
|
|
6
6
|
|
|
7
|
+
<workstream_flag_substitution>
|
|
8
|
+
`${GSD_WS}` / `{GSD_WS}` in emitted "Next:" commands and `Skill()` args and agent dispatch prompts is a placeholder, not a shell variable — nothing expands it automatically. Substitute the active `--ws <name>`, or remove it entirely in flat mode. Never print the literal token in user-facing output. See `pp-core/references/workstream-flag.md` § Substitution rule.
|
|
9
|
+
</workstream_flag_substitution>
|
|
10
|
+
|
|
7
11
|
<required_reading>
|
|
8
12
|
|
|
9
13
|
Read all files referenced by the invoking prompt's execution_context before starting.
|
|
@@ -9,6 +9,10 @@ consumes: CONTEXT.md
|
|
|
9
9
|
Create executable phase prompts (PLAN.md files) for a roadmap phase with integrated research and verification. Default flow: Research (if needed) -> Plan -> Verify -> Done. Orchestrates pp-phase-researcher, pp-planner, and pp-plan-checker agents with a revision loop (max 3 iterations).
|
|
10
10
|
</purpose>
|
|
11
11
|
|
|
12
|
+
<workstream_flag_substitution>
|
|
13
|
+
`${GSD_WS}` / `{GSD_WS}` in emitted "Next:" commands and `Skill()` args and agent dispatch prompts is a placeholder, not a shell variable — nothing expands it automatically. Substitute the active `--ws <name>`, or remove it entirely in flat mode. Never print the literal token in user-facing output. See `pp-core/references/workstream-flag.md` § Substitution rule.
|
|
14
|
+
</workstream_flag_substitution>
|
|
15
|
+
|
|
12
16
|
<required_reading>
|
|
13
17
|
Read all files referenced by the invoking prompt's execution_context before starting.
|
|
14
18
|
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
Check project progress, summarize recent work and what's ahead, then intelligently route to the next action — either executing an existing plan or creating the next one. Provides situational awareness before continuing work.
|
|
3
3
|
</purpose>
|
|
4
4
|
|
|
5
|
+
<workstream_flag_substitution>
|
|
6
|
+
`${GSD_WS}` / `{GSD_WS}` in emitted "Next:" commands and `Skill()` args and agent dispatch prompts is a placeholder, not a shell variable — nothing expands it automatically. Substitute the active `--ws <name>`, or remove it entirely in flat mode. Never print the literal token in user-facing output. See `pp-core/references/workstream-flag.md` § Substitution rule.
|
|
7
|
+
</workstream_flag_substitution>
|
|
8
|
+
|
|
5
9
|
<required_reading>
|
|
6
10
|
Read all files referenced by the invoking prompt's execution_context before starting.
|
|
7
11
|
</required_reading>
|
|
@@ -12,6 +12,10 @@ With `--research` flag: spawns a focused research agent before planning. Investi
|
|
|
12
12
|
Granular flags are composable: `--discuss --research --validate` gives the same result as `--full`.
|
|
13
13
|
</purpose>
|
|
14
14
|
|
|
15
|
+
<workstream_flag_substitution>
|
|
16
|
+
`${GSD_WS}` / `{GSD_WS}` in emitted "Next:" commands and `Skill()` args and agent dispatch prompts is a placeholder, not a shell variable — nothing expands it automatically. Substitute the active `--ws <name>`, or remove it entirely in flat mode. Never print the literal token in user-facing output. See `pp-core/references/workstream-flag.md` § Substitution rule.
|
|
17
|
+
</workstream_flag_substitution>
|
|
18
|
+
|
|
15
19
|
<required_reading>
|
|
16
20
|
Read all files referenced by the invoking prompt's execution_context before starting.
|
|
17
21
|
</required_reading>
|
|
@@ -10,6 +10,10 @@ Use this workflow when:
|
|
|
10
10
|
Instantly restore full project context so "Where were we?" has an immediate, complete answer.
|
|
11
11
|
</purpose>
|
|
12
12
|
|
|
13
|
+
<workstream_flag_substitution>
|
|
14
|
+
`${GSD_WS}` / `{GSD_WS}` in emitted "Next:" commands and `Skill()` args and agent dispatch prompts is a placeholder, not a shell variable — nothing expands it automatically. Substitute the active `--ws <name>`, or remove it entirely in flat mode. Never print the literal token in user-facing output. See `pp-core/references/workstream-flag.md` § Substitution rule.
|
|
15
|
+
</workstream_flag_substitution>
|
|
16
|
+
|
|
13
17
|
<required_reading>
|
|
14
18
|
@~/.claude/pp-core/references/continuation-format.md
|
|
15
19
|
</required_reading>
|
|
@@ -9,6 +9,10 @@ consumes: UAT.md
|
|
|
9
9
|
Create a pull request from completed phase/milestone work, generate a rich PR body from planning artifacts, optionally run code review, and prepare for merge. Closes the plan → execute → verify → ship loop.
|
|
10
10
|
</purpose>
|
|
11
11
|
|
|
12
|
+
<workstream_flag_substitution>
|
|
13
|
+
`${GSD_WS}` / `{GSD_WS}` in emitted "Next:" commands and `Skill()` args and agent dispatch prompts is a placeholder, not a shell variable — nothing expands it automatically. Substitute the active `--ws <name>`, or remove it entirely in flat mode. Never print the literal token in user-facing output. See `pp-core/references/workstream-flag.md` § Substitution rule.
|
|
14
|
+
</workstream_flag_substitution>
|
|
15
|
+
|
|
12
16
|
<required_reading>
|
|
13
17
|
Read all files referenced by the invoking prompt's execution_context before starting.
|
|
14
18
|
</required_reading>
|
|
@@ -34,6 +34,10 @@ Mark current phase complete and advance to next. This is the natural point where
|
|
|
34
34
|
|
|
35
35
|
</purpose>
|
|
36
36
|
|
|
37
|
+
<workstream_flag_substitution>
|
|
38
|
+
`${GSD_WS}` / `{GSD_WS}` in emitted "Next:" commands and `Skill()` args and agent dispatch prompts is a placeholder, not a shell variable — nothing expands it automatically. Substitute the active `--ws <name>`, or remove it entirely in flat mode. Never print the literal token in user-facing output. See `pp-core/references/workstream-flag.md` § Substitution rule.
|
|
39
|
+
</workstream_flag_substitution>
|
|
40
|
+
|
|
37
41
|
<process>
|
|
38
42
|
|
|
39
43
|
<step name="load_project_state" priority="first">
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
Audit Nyquist validation gaps for a completed phase. Generate missing tests. Update VALIDATION.md.
|
|
3
3
|
</purpose>
|
|
4
4
|
|
|
5
|
+
<workstream_flag_substitution>
|
|
6
|
+
`${GSD_WS}` / `{GSD_WS}` in emitted "Next:" commands and `Skill()` args and agent dispatch prompts is a placeholder, not a shell variable — nothing expands it automatically. Substitute the active `--ws <name>`, or remove it entirely in flat mode. Never print the literal token in user-facing output. See `pp-core/references/workstream-flag.md` § Substitution rule.
|
|
7
|
+
</workstream_flag_substitution>
|
|
8
|
+
|
|
5
9
|
<required_reading>
|
|
6
10
|
@~/.claude/pp-core/references/ui-brand.md
|
|
7
11
|
</required_reading>
|