@pareto4/pp-core 1.7.0 → 1.8.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/bin/install.js +116 -0
- package/commands/pp-build-handoff.md +46 -0
- package/commands/pp-discovery-to-build.md +40 -0
- package/gemini-extension.json +1 -1
- package/package.json +2 -1
- package/pareto-skills/_shared/create-project-board.sh +195 -0
- package/pareto-skills/_shared/pp-claude-md-protocol.md +306 -0
- package/pareto-skills/_shared/sync-phase-status.sh +139 -0
- package/pareto-skills/pp-brand/SKILL.md +644 -0
- package/pareto-skills/pp-brand/assets/crew/ParetoAgent.inline.html +120 -0
- package/pareto-skills/pp-brand/assets/crew/ParetoAgent.tsx +239 -0
- package/pareto-skills/pp-brand/assets/crew/build.svg +11 -0
- package/pareto-skills/pp-brand/assets/crew/deploy.svg +11 -0
- package/pareto-skills/pp-brand/assets/crew/discovery.svg +11 -0
- package/pareto-skills/pp-brand/assets/crew/plan.svg +11 -0
- package/pareto-skills/pp-brand/assets/crew/run.svg +11 -0
- package/pareto-skills/pp-brand/assets/crew/validate.svg +11 -0
- package/pareto-skills/pp-brand/assets/pareto-brand-preview.html +547 -0
- package/pareto-skills/pp-obsidian-notes/SKILL.md +127 -0
- package/pareto-skills/pp-obsidian-notes/templates/CLAUDE.md +29 -0
- package/pareto-skills/pp-obsidian-notes/templates/client-context.md +116 -0
- package/pareto-skills/pp-obsidian-notes/templates/meeting-note.md +66 -0
- package/pareto-skills/pp-obsidian-notes/templates/pareto-context.md +102 -0
- package/pareto-skills/pp-obsidian-notes/templates/proposal.md +117 -0
- package/pareto-skills/pp-project-setup/SKILL.md +1364 -0
- package/pp-core/bin/lib/intel.cjs +1 -1
- package/pp-core/bin/lib/io.cjs +120 -0
- package/pp-core/bin/lib/profile-pipeline-command-router.cjs +1 -1
- package/pp-core/bin/lib/roadmap-parser.cjs +1 -1
- package/pp-core/bin/lib/runtime-artifact-conversion.cjs +2 -2
- package/pp-core/bin/lib/surface.cjs +1 -1
- package/pp-core/bin/lib/worktree-safety.cjs +2 -2
- package/pp-core/bin/pp-tools.cjs +23 -0
- package/pp-core/references/ui-brand.md +73 -11
- package/pp-core/templates/codebase/structure.md +5 -5
- package/pp-core/templates/spec.md +7 -7
- package/pp-core/workflows/add-backlog.md +1 -1
- package/pp-core/workflows/autonomous.md +4 -4
- package/pp-core/workflows/debug.md +1 -1
- package/pp-core/workflows/discovery-to-build.md +598 -0
- package/pp-core/workflows/execute-phase.md +9 -1
- package/pp-core/workflows/plan-phase.md +14 -12
- package/pp-core/workflows/pr-branch.md +5 -4
- package/pp-core/workflows/reapply-patches.md +1 -1
- package/pp-core/workflows/ship.md +1 -1
- package/pp-core/workflows/thread.md +1 -1
- package/pp-core/workflows/verify-work.md +6 -5
|
@@ -488,12 +488,13 @@ If user selects "Skip research": skip to step 6.
|
|
|
488
488
|
|
|
489
489
|
**If `--auto` and `research_enabled` is false:** Skip research silently (preserves automated behavior).
|
|
490
490
|
|
|
491
|
-
|
|
491
|
+
Run this Bash command to emit the branded Discovery stage banner (renders on stderr, auto-degrades on non-TTY — do NOT print an inline ASCII banner, that would double-print):
|
|
492
|
+
```bash
|
|
493
|
+
pp_run banner discovery "RESEARCHING PHASE {X}"
|
|
492
494
|
```
|
|
493
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
494
|
-
pp-core ► RESEARCHING PHASE {X}
|
|
495
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
496
495
|
|
|
496
|
+
Then announce the spawn:
|
|
497
|
+
```
|
|
497
498
|
◆ Spawning researcher... (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)
|
|
498
499
|
```
|
|
499
500
|
|
|
@@ -501,7 +502,7 @@ Display banner:
|
|
|
501
502
|
|
|
502
503
|
```bash
|
|
503
504
|
if pp_run query teams-status --active >/dev/null 2>&1; then
|
|
504
|
-
echo "⚠️ CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS detected. pp-core's multi-agent orchestration is not validated under claude-code agent-teams and may stall (a subagent's completion can fail to route to the orchestrator). Recommend disabling agent-teams for
|
|
505
|
+
echo "⚠️ CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS detected. pp-core's multi-agent orchestration is not validated under claude-code agent-teams and may stall (a subagent's completion can fail to route to the orchestrator). Recommend disabling agent-teams for pp-core workflows. See https://github.com/open-gsd/pp-core/issues/1355" >&2
|
|
505
506
|
fi
|
|
506
507
|
```
|
|
507
508
|
|
|
@@ -634,12 +635,12 @@ Read the `activeHooks` array directly from `PLAN_PRE_HOOKS_JSON` / `HOOKS_JSON`
|
|
|
634
635
|
**Branch 1 — all plan:pre hooks inactive (`activeHooks` is empty or absent):** Skip to step 6.
|
|
635
636
|
|
|
636
637
|
**Generic step hook dispatch contract:** For each active entry where `kind == "step"`:
|
|
637
|
-
- If `ref.skill` is set, dispatch with `Skill(skill="
|
|
638
|
+
- If `ref.skill` is set, dispatch with `Skill(skill="pp-${ref.skill}", args="${PHASE} --auto ${GSD_WS}")` when pipeline mode allows auto-chaining. Prepend `pp-` to `ref.skill` — `ui-phase` → `pp-ui-phase`.
|
|
638
639
|
- If `ref.agent` is set, dispatch with `Agent(prompt=filled_hook_fragment, subagent_type=ref.agent, model="{researcher_model}")`. Use the hook's `fragment.inline` as the prompt body and fill phase fields before spawning.
|
|
639
640
|
- The `research` hook is handled by §5.1's research decision. The `pattern-mapper` hook is handled by §7.8 after `RESEARCH_PATH` is known. Future plan:pre agent hooks use the same `ref.agent` fragment contract.
|
|
640
641
|
|
|
641
642
|
**AI integration capability:** If the active `ai-integration` step hook is present, `AI_SPEC_PATH` is empty, and the phase goal contains AI keywords (`agent`, `llm`, `rag`, `chatbot`, `embedding`, `langchain`, `llamaindex`, `crewai`, `langgraph`, `openai`, `anthropic`, `vector`, `eval`, `ai system`), then:
|
|
642
|
-
- In pipeline / `--auto` mode, invoke the hook's `ref.skill` via `Skill(skill="
|
|
643
|
+
- In pipeline / `--auto` mode, invoke the hook's `ref.skill` via `Skill(skill="pp-${ref.skill}", args="${PHASE} --auto ${GSD_WS}")`.
|
|
643
644
|
- In manual mode, display the existing non-blocking `/pp:ai-integration-phase {N}` recommendation and let the user continue planning without AI-SPEC or stop to run the capability workflow first.
|
|
644
645
|
|
|
645
646
|
Run the UI deterministic gate whenever **any** `plan:pre` UI hook is active — including the step-only case (`workflow.ui_safety_gate` off). (`check.query` = `"ui.plan-gate"`; router normalizes dots→hyphens.)
|
|
@@ -674,7 +675,7 @@ AUTO_CHAIN=$(pp_run query check auto-mode --pick auto_chain_active 2>/dev/null |
|
|
|
674
675
|
**Branch 5 — `AUTO_CHAIN` is `true` (pipeline / `--auto`):** Fire each active UI **step** hook — runs independently of whether a gate is active (covers `{ui_phase:true,ui_safety_gate:false}`). For each entry in `activeHooks` (in array order) where `kind == "step"` and `ref.skill` is set:
|
|
675
676
|
|
|
676
677
|
```
|
|
677
|
-
Skill(skill="
|
|
678
|
+
Skill(skill="pp-${ref.skill}", args="${PHASE} --auto ${GSD_WS}")
|
|
678
679
|
```
|
|
679
680
|
|
|
680
681
|
After all UI step hooks return, re-read:
|
|
@@ -827,12 +828,13 @@ Continue to step 8.
|
|
|
827
828
|
|
|
828
829
|
## 8. Spawn pp-planner Agent
|
|
829
830
|
|
|
830
|
-
|
|
831
|
+
Run this Bash command to emit the branded Plan stage banner (renders on stderr, auto-degrades on non-TTY — do NOT print an inline ASCII banner, that would double-print):
|
|
832
|
+
```bash
|
|
833
|
+
pp_run banner plan "PLANNING PHASE {X}"
|
|
831
834
|
```
|
|
832
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
833
|
-
pp-core ► PLANNING PHASE {X}
|
|
834
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
835
835
|
|
|
836
|
+
Then announce the spawn:
|
|
837
|
+
```
|
|
836
838
|
◆ Spawning planner... (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)
|
|
837
839
|
```
|
|
838
840
|
|
|
@@ -31,12 +31,13 @@ if [ "$AHEAD" = "0" ]; then
|
|
|
31
31
|
fi
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
Run this Bash command to emit the branded Deploy stage banner (renders on stderr, auto-degrades on non-TTY — do NOT print an inline ASCII banner, that would double-print):
|
|
35
|
+
```bash
|
|
36
|
+
pp_run banner deploy "PR BRANCH"
|
|
35
37
|
```
|
|
36
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
37
|
-
pp-core ► PR BRANCH
|
|
38
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
39
38
|
|
|
39
|
+
Then display the branch summary:
|
|
40
|
+
```
|
|
40
41
|
Branch: {CURRENT_BRANCH}
|
|
41
42
|
Target: {TARGET}
|
|
42
43
|
Commits: {AHEAD} ahead
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Reapply Local Patches Workflow
|
|
2
2
|
|
|
3
|
-
Invoked by `/pp:update --reapply` (`commands/
|
|
3
|
+
Invoked by `/pp:update --reapply` (`commands/pp-update.md`).
|
|
4
4
|
|
|
5
5
|
After a pp-core update wipes and reinstalls files, this workflow merges user's previously saved local modifications back into the new version. Uses three-way comparison (pristine baseline, user-modified backup, newly installed version) to reliably distinguish user customizations from version drift.
|
|
6
6
|
|
|
@@ -442,7 +442,7 @@ Read the `activeHooks` array directly from `SHIP_POST_HOOKS_JSON` in-context (do
|
|
|
442
442
|
```
|
|
443
443
|
|
|
444
444
|
`Agent(subagent_type=ref.agent, prompt="Ship-time capability hook for phase ${PHASE_NUMBER}. Phase dir: ${PHASE_DIR}. Consume: ${consumed_files}. Follow your agent instructions.", model="{balanced_model}")`
|
|
445
|
-
- If `ref.skill` is set, apply **prefix-aware resolution**: if `ref.skill` already begins with a runtime-resolvable stem (e.g. `pareto-`), dispatch it verbatim with no phase/workspace args — `Skill(skill=ref.skill)` — because the skill handles its own invocation (e.g. `pareto-sync-board` triggers bare). Otherwise, fall back to the existing stem behavior: `Skill(skill="
|
|
445
|
+
- If `ref.skill` is set, apply **prefix-aware resolution**: if `ref.skill` already begins with a runtime-resolvable stem (e.g. `pareto-`), dispatch it verbatim with no phase/workspace args — `Skill(skill=ref.skill)` — because the skill handles its own invocation (e.g. `pareto-sync-board` triggers bare). Otherwise, fall back to the existing stem behavior: `Skill(skill="pp-${ref.skill}", args="${PHASE_NUMBER} --auto ${GSD_WS}")`. This prevents a `pareto-` skill from being incorrectly prefixed to a non-existent `pp-pareto-*` name.
|
|
446
446
|
|
|
447
447
|
Each dispatch is best-effort: if it errors, record a warning and continue — never re-raise (`onError: skip`).
|
|
448
448
|
</step>
|
|
@@ -467,7 +467,7 @@ Resolve active step hooks from `VERIFY_POST_HOOKS_JSON` where `kind == "step"` a
|
|
|
467
467
|
If an active secure-phase step hook exists AND `SECURITY_FILE` is empty, dispatch the registry-provided skill stem:
|
|
468
468
|
|
|
469
469
|
```
|
|
470
|
-
Skill(skill="
|
|
470
|
+
Skill(skill="pp-${ref.skill}", args="{phase}")
|
|
471
471
|
```
|
|
472
472
|
|
|
473
473
|
After the skill returns, refresh `SECURITY_FILE`:
|
|
@@ -619,12 +619,13 @@ On return:
|
|
|
619
619
|
<step name="verify_gap_plans">
|
|
620
620
|
**Verify fix plans with checker:**
|
|
621
621
|
|
|
622
|
-
|
|
622
|
+
Run this Bash command to emit the branded Validate stage banner (renders on stderr, auto-degrades on non-TTY — do NOT print an inline ASCII banner, that would double-print):
|
|
623
|
+
```bash
|
|
624
|
+
pp_run banner validate "VERIFYING"
|
|
623
625
|
```
|
|
624
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
625
|
-
pp-core ► VERIFYING FIX PLANS
|
|
626
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
627
626
|
|
|
627
|
+
Then announce the spawn:
|
|
628
|
+
```
|
|
628
629
|
◆ Spawning plan checker... (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)
|
|
629
630
|
```
|
|
630
631
|
|