@pareto4/pp-core 1.5.3 → 1.6.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/commands/pp-init.md +36 -0
- package/commands/pp-ns-project.md +2 -1
- package/gemini-extension.json +1 -1
- package/package.json +1 -1
- package/pp-core/bin/lib/capability-registry.cjs +135 -2
- package/pp-core/bin/lib/check-command-router.cjs +183 -1
- package/pp-core/bin/lib/clusters.cjs +1 -0
- package/pp-core/bin/lib/command-aliases.cjs +7 -0
- package/pp-core/bin/lib/io.cjs +2 -0
- package/pp-core/bin/lib/platform-bindings.cjs +336 -0
- package/pp-core/bin/lib/profile-output.cjs +220 -5
- package/pp-core/bin/pp-tools.cjs +40 -3
- package/pp-core/templates/claude-md.md +4 -4
- package/pp-core/workflows/discovery-sprint.md +27 -10
- package/pp-core/workflows/execute-phase/steps/client-context-gate.md +37 -0
- package/pp-core/workflows/execute-phase.md +4 -0
- package/pp-core/workflows/init.md +530 -0
- package/pp-core/workflows/new-project.md +54 -1
- package/pp-core/workflows/ship.md +24 -1
- package/pp-core/workflows/verify-work.md +1 -0
- package/scripts/lint-allow-test-rule-refs.allowlist.json +1 -0
|
@@ -106,6 +106,29 @@ Verify the work is ready to ship:
|
|
|
106
106
|
```
|
|
107
107
|
|
|
108
108
|
If no active security `ship:pre` gate hook is present (security enforcement off), skip this check silently.
|
|
109
|
+
|
|
110
|
+
**Generic `check.query` gate enforcement (capability-driven).**
|
|
111
|
+
|
|
112
|
+
For each active entry in `activeHooks` where `kind == "gate"` and a `check.query` is present (covers any capability-registered query gate, e.g. the `pareto-stack` platform-drift gates — skip entries already handled by the `security` predicate branch above):
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
GATE_RESULT=$(pp_run check ${hook.check.query} --raw)
|
|
116
|
+
CHECK_EXIT=$?
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
- If `CHECK_EXIT` is non-zero or output is unparseable: if `hook.onError == "skip"` (the default for all capability-registered query gates), log a warning and continue to the next hook.
|
|
120
|
+
- Read `status` from `GATE_RESULT`:
|
|
121
|
+
- If `hook.blocking == true` and `status == "block"` → halt the ship with `PARETO_DRIFT_SHIP_GATE_BLOCKED`:
|
|
122
|
+
```
|
|
123
|
+
⚠ Ship gate blocked: {hook.check.query} reports a drift condition that exceeds the configured threshold.
|
|
124
|
+
Pinned: {GATE_RESULT.pinned} — Latest: {GATE_RESULT.latest}
|
|
125
|
+
Update .platform-bindings.json or adjust the block threshold before shipping.
|
|
126
|
+
```
|
|
127
|
+
- If `hook.blocking == false`, or `status` is `warn`, `pass`, or `inert` → emit an advisory line for non-trivial statuses (`warn` only) and continue:
|
|
128
|
+
```
|
|
129
|
+
ℹ Ship gate advisory ({hook.check.query}): {status}{GATE_RESULT.severity ? ` — ${GATE_RESULT.severity} drift detected` : ''} (non-blocking or below blocking threshold). Continuing.
|
|
130
|
+
```
|
|
131
|
+
- If `status` is `pass` or `inert`: continue silently.
|
|
109
132
|
</step>
|
|
110
133
|
|
|
111
134
|
<step name="push_branch">
|
|
@@ -419,7 +442,7 @@ Read the `activeHooks` array directly from `SHIP_POST_HOOKS_JSON` in-context (do
|
|
|
419
442
|
```
|
|
420
443
|
|
|
421
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}")`
|
|
422
|
-
- If `ref.skill` is set, dispatch with `Skill(skill="gsd-${ref.skill}", args="${PHASE_NUMBER} --auto ${GSD_WS}")
|
|
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="gsd-${ref.skill}", args="${PHASE_NUMBER} --auto ${GSD_WS}")`. This prevents a `pareto-` skill from being incorrectly prefixed to a non-existent `gsd-pareto-*` name.
|
|
423
446
|
|
|
424
447
|
Each dispatch is best-effort: if it errors, record a warning and continue — never re-raise (`onError: skip`).
|
|
425
448
|
</step>
|
|
@@ -272,6 +272,7 @@
|
|
|
272
272
|
"tests/plan-phase-ui-redirect.test.cjs :: source-text-is-the-product",
|
|
273
273
|
"tests/plan-review-convergence.test.cjs :: source-text-is-the-product",
|
|
274
274
|
"tests/planner-decomposition.test.cjs :: source-text-is-the-product",
|
|
275
|
+
"tests/pp-init.test.cjs :: source-text-is-the-product",
|
|
275
276
|
"tests/planner-language-regression.test.cjs :: source-text-is-the-product",
|
|
276
277
|
"tests/playwright-ui-verify.test.cjs :: source-text-is-the-product",
|
|
277
278
|
"tests/policy-160-route0-resume.test.cjs :: source-text-is-the-product",
|