@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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pp-core",
3
3
  "displayName": "PP Core",
4
- "version": "1.8.1",
4
+ "version": "1.8.2",
5
5
  "description": "PP Core is a meta-prompting, context engineering, and spec-driven development system for AI coding agents.",
6
6
  "author": {
7
7
  "name": "pareto4",
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);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pp-core",
3
- "version": "1.8.1",
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.1",
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",
@@ -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 gsd-ns-* routers only: never vacuum up an unrelated user skill
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>