@pareto4/pp-core 1.11.0 → 1.12.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/README.md +31 -0
- package/agents/pp-code-fixer.md +1 -1
- package/agents/pp-debug-session-manager.md +1 -1
- package/agents/pp-debugger.md +1 -1
- package/agents/pp-executor.md +20 -10
- package/agents/pp-intel-updater.md +1 -1
- package/agents/pp-phase-researcher.md +1 -1
- package/agents/pp-plan-checker.md +5 -5
- package/agents/pp-planner.md +10 -24
- package/agents/pp-project-researcher.md +1 -1
- package/agents/pp-research-synthesizer.md +1 -1
- package/agents/pp-ui-researcher.md +1 -1
- package/agents/pp-verifier.md +8 -4
- package/bin/install.js +429 -82
- package/commands/pp-autonomous.md +8 -6
- package/commands/pp-discovery-to-build.md +1 -1
- package/commands/pp-discovery.md +3 -2
- package/commands/pp-discuss-phase.md +2 -2
- package/commands/pp-execute-phase.md +3 -1
- package/commands/pp-graphify.md +5 -5
- package/commands/pp-import.md +1 -1
- package/commands/pp-map-codebase.md +1 -1
- package/commands/pp-ns-project.md +2 -3
- package/commands/pp-ns-workflow.md +1 -1
- package/commands/pp-plan-phase.md +2 -1
- package/commands/pp-verify-work.md +2 -1
- package/gemini-extension.json +1 -1
- package/hooks/dist/pp-cursor-session-start.js +2 -2
- package/hooks/dist/pp-session-state.sh +1 -1
- package/hooks/dist/pp-statusline.js +21 -2
- package/hooks/pp-cursor-session-start.js +2 -2
- package/hooks/pp-session-state.sh +1 -1
- package/hooks/pp-statusline.js +21 -2
- package/package.json +18 -5
- package/pareto-skills/pp-project-setup/SKILL.md +5 -63
- package/pp-core/bin/detect-build-commands.sh +182 -0
- package/pp-core/bin/lib/capability-registry.cjs +65 -7
- package/pp-core/bin/lib/check-command-router.cjs +79 -38
- package/pp-core/bin/lib/clusters.cjs +2 -3
- package/pp-core/bin/lib/command-aliases.cjs +36 -0
- package/pp-core/bin/lib/command-arg-projection.cjs +99 -1
- package/pp-core/bin/lib/commands.cjs +21 -6
- package/pp-core/bin/lib/compose-bindings.cjs +128 -15
- package/pp-core/bin/lib/config-schema.cjs +16 -0
- package/pp-core/bin/lib/config.cjs +142 -27
- package/pp-core/bin/lib/core-utils.cjs +43 -7
- package/pp-core/bin/lib/discovery-input-check.cjs +218 -0
- package/pp-core/bin/lib/discovery-rebaseline.cjs +1372 -0
- package/pp-core/bin/lib/discovery-research-track.cjs +979 -0
- package/pp-core/bin/lib/discovery-rollup.cjs +476 -0
- package/pp-core/bin/lib/discovery-screens.cjs +1995 -0
- package/pp-core/bin/lib/discovery-sweep.cjs +390 -0
- package/pp-core/bin/lib/discovery-table.cjs +98 -0
- package/pp-core/bin/lib/dispatch-plan.cjs +472 -0
- package/pp-core/bin/lib/frontmatter.cjs +17 -2
- package/pp-core/bin/lib/init-command-router.cjs +8 -5
- package/pp-core/bin/lib/init-contract.cjs +213 -33
- package/pp-core/bin/lib/init-interactive.cjs +20 -1
- package/pp-core/bin/lib/init.cjs +124 -134
- package/pp-core/bin/lib/install-profiles.cjs +5 -0
- package/pp-core/bin/lib/install-run.cjs +536 -0
- package/pp-core/bin/lib/io.cjs +15 -0
- package/pp-core/bin/lib/loop-resolver.cjs +24 -0
- package/pp-core/bin/lib/milestone.cjs +345 -48
- package/pp-core/bin/lib/phase-command-router.cjs +23 -1
- package/pp-core/bin/lib/phase-locator.cjs +15 -6
- package/pp-core/bin/lib/phase-scope.cjs +91 -0
- package/pp-core/bin/lib/phase-tier.cjs +467 -0
- package/pp-core/bin/lib/phase.cjs +247 -21
- package/pp-core/bin/lib/phases-command-router.cjs +2 -0
- package/pp-core/bin/lib/plan-graph.cjs +368 -0
- package/pp-core/bin/lib/planning-workspace.cjs +53 -0
- package/pp-core/bin/lib/platform-bindings.cjs +32 -2
- package/pp-core/bin/lib/profile-output.cjs +11 -3
- package/pp-core/bin/lib/prohibition-enforcement.cjs +112 -0
- package/pp-core/bin/lib/roadmap-parser.cjs +366 -99
- package/pp-core/bin/lib/roadmap.cjs +141 -39
- package/pp-core/bin/lib/runtime-hooks-surface.cjs +1 -1
- package/pp-core/bin/lib/shell-command-projection.cjs +24 -0
- package/pp-core/bin/lib/state-command-router.cjs +82 -13
- package/pp-core/bin/lib/state-document.cjs +124 -7
- package/pp-core/bin/lib/state.cjs +784 -257
- package/pp-core/bin/lib/template.cjs +22 -6
- package/pp-core/bin/lib/vault-command-router.cjs +57 -6
- package/pp-core/bin/lib/vault-practices.cjs +6 -36
- package/pp-core/bin/lib/vault-write-back.cjs +20 -4
- package/pp-core/bin/lib/vault.cjs +555 -23
- package/pp-core/bin/lib/verify.cjs +53 -31
- package/pp-core/bin/lib/workstream.cjs +1 -1
- package/pp-core/bin/lib/worktree-safety.cjs +26 -15
- package/pp-core/bin/portable-timeout.sh +89 -0
- package/pp-core/bin/pp-tools.cjs +158 -8
- package/pp-core/bin/shared/config-defaults.manifest.json +7 -0
- package/pp-core/bin/shared/config-schema.manifest.json +3 -0
- package/pp-core/references/autonomous-best-effort.md +461 -0
- package/pp-core/references/autonomous-lifecycle.md +146 -0
- package/pp-core/references/autonomous-smart-discuss.md +16 -12
- package/pp-core/references/checkpoints.md +1 -1
- package/pp-core/references/discovery-id-conventions.md +202 -0
- package/pp-core/references/discovery-rebaseline.md +254 -0
- package/pp-core/references/discovery-research-track.md +283 -0
- package/pp-core/references/discovery-traceability.md +400 -0
- package/pp-core/references/loop-hook-dispatch.md +7 -0
- package/pp-core/references/mandatory-initial-read.md +1 -1
- package/pp-core/references/planner-gap-closure.md +1 -0
- package/pp-core/references/planner-human-verify-mode.md +1 -1
- package/pp-core/references/planner-load-graph-context.md +1 -1
- package/pp-core/references/planner-plan-graph.md +66 -0
- package/pp-core/references/planner-tdd.md +1 -0
- package/pp-core/references/planning-config.md +8 -0
- package/pp-core/references/sketch-tooling.md +4 -0
- package/pp-core/references/tdd.md +1 -0
- package/pp-core/templates/claude-md.md +1 -1
- package/pp-core/templates/phase-prompt.md +6 -2
- package/pp-core/templates/prototype-review/review.js +303 -0
- package/pp-core/templates/state.md +6 -0
- package/pp-core/workflows/_runtime-launcher.snippet.sh +1 -1
- package/pp-core/workflows/add-backlog.md +1 -1
- package/pp-core/workflows/add-phase.md +1 -1
- package/pp-core/workflows/add-tests.md +1 -1
- package/pp-core/workflows/add-todo.md +1 -1
- package/pp-core/workflows/ai-integration-phase.md +2 -2
- package/pp-core/workflows/audit-fix.md +12 -16
- package/pp-core/workflows/audit-milestone.md +1 -1
- package/pp-core/workflows/audit-uat.md +1 -1
- package/pp-core/workflows/autonomous.md +68 -306
- package/pp-core/workflows/check-todos.md +1 -1
- package/pp-core/workflows/cleanup.md +1 -1
- package/pp-core/workflows/code-review-fix.md +1 -1
- package/pp-core/workflows/code-review.md +19 -7
- package/pp-core/workflows/complete-milestone.md +41 -60
- package/pp-core/workflows/debug.md +1 -1
- package/pp-core/workflows/diagnose-issues.md +1 -1
- package/pp-core/workflows/discovery-sprint/gap-analysis.md +140 -0
- package/pp-core/workflows/discovery-sprint/input-package.md +140 -0
- package/pp-core/workflows/discovery-sprint/prefill.md +92 -0
- package/pp-core/workflows/discovery-sprint/prototype.md +257 -0
- package/pp-core/workflows/discovery-sprint/rebaseline.md +276 -0
- package/pp-core/workflows/discovery-sprint/session-13-gates.md +24 -0
- package/pp-core/workflows/discovery-sprint/sessions/01-kick-off.md +92 -0
- package/pp-core/workflows/discovery-sprint/sessions/02-as-is.md +98 -0
- package/pp-core/workflows/discovery-sprint/sessions/03-to-be.md +215 -0
- package/pp-core/workflows/discovery-sprint/sessions/04-ux-design.md +146 -0
- package/pp-core/workflows/discovery-sprint/sessions/05-architecture.md +98 -0
- package/pp-core/workflows/discovery-sprint/sessions/06-security.md +107 -0
- package/pp-core/workflows/discovery-sprint/sessions/07-identity.md +98 -0
- package/pp-core/workflows/discovery-sprint/sessions/08-integration.md +85 -0
- package/pp-core/workflows/discovery-sprint/sessions/09-qa.md +109 -0
- package/pp-core/workflows/discovery-sprint/sessions/10-infrastructure.md +119 -0
- package/pp-core/workflows/discovery-sprint/sessions/11-roadmap.md +92 -0
- package/pp-core/workflows/discovery-sprint/sessions/12-delivery-model.md +98 -0
- package/pp-core/workflows/discovery-sprint/sessions/13-wrap-up.md +205 -0
- package/pp-core/workflows/discovery-sprint/templates/context-template.md +266 -0
- package/pp-core/workflows/discovery-sprint.md +79 -1714
- package/pp-core/workflows/discovery-to-build/steps/architecture-deliverables.md +5 -5
- package/pp-core/workflows/discovery-to-build/steps/screen-inventory-gate.md +70 -0
- package/pp-core/workflows/discovery-to-build/templates/discovery-references.md +54 -0
- package/pp-core/workflows/discovery-to-build/templates/pp-handoff.md +184 -0
- package/pp-core/workflows/discovery-to-build.md +21 -238
- package/pp-core/workflows/discuss-phase/modes/advisor.md +1 -1
- package/pp-core/workflows/discuss-phase/modes/auto.md +1 -1
- package/pp-core/workflows/discuss-phase/modes/chain.md +1 -1
- package/pp-core/workflows/discuss-phase-assumptions.md +1 -1
- package/pp-core/workflows/discuss-phase.md +9 -2
- package/pp-core/workflows/do.md +4 -4
- package/pp-core/workflows/docs-update.md +1 -1
- package/pp-core/workflows/edit-phase.md +1 -1
- package/pp-core/workflows/eval-review.md +1 -1
- package/pp-core/workflows/execute-phase/steps/checkpoint-handling.md +45 -0
- package/pp-core/workflows/execute-phase/steps/client-context-gate.md +1 -1
- package/pp-core/workflows/execute-phase/steps/codebase-drift-gate.md +1 -1
- package/pp-core/workflows/execute-phase/steps/cross-ai-delegation.md +90 -0
- package/pp-core/workflows/execute-phase/steps/install-run.md +29 -0
- package/pp-core/workflows/execute-phase/steps/phase-close-rebaseline.md +23 -0
- package/pp-core/workflows/execute-phase/steps/post-merge-gate.md +76 -77
- package/pp-core/workflows/execute-phase/steps/serial-group-dispatch.md +72 -0
- package/pp-core/workflows/execute-phase/steps/vault-fetch.md +5 -5
- package/pp-core/workflows/execute-phase/steps/vault-load-gate.md +19 -112
- package/pp-core/workflows/execute-phase.md +102 -216
- package/pp-core/workflows/execute-plan.md +6 -2
- package/pp-core/workflows/explore.md +1 -1
- package/pp-core/workflows/extract-learnings.md +1 -1
- package/pp-core/workflows/forensics.md +4 -4
- package/pp-core/workflows/graduation.md +1 -1
- package/pp-core/workflows/health.md +1 -1
- package/pp-core/workflows/help/modes/brief.md +1 -0
- package/pp-core/workflows/help/modes/default.md +2 -1
- package/pp-core/workflows/help/modes/full.md +12 -5
- package/pp-core/workflows/import.md +1 -1
- package/pp-core/workflows/ingest-docs.md +1 -1
- package/pp-core/workflows/init.md +18 -2
- package/pp-core/workflows/insert-phase.md +1 -1
- package/pp-core/workflows/list-workspaces.md +1 -1
- package/pp-core/workflows/manager.md +3 -3
- package/pp-core/workflows/map-codebase.md +2 -2
- package/pp-core/workflows/milestone-summary.md +4 -4
- package/pp-core/workflows/mvp-phase.md +1 -1
- package/pp-core/workflows/new-milestone.md +7 -8
- package/pp-core/workflows/new-project.md +6 -1
- package/pp-core/workflows/new-workspace.md +1 -1
- package/pp-core/workflows/next.md +2 -2
- package/pp-core/workflows/note.md +2 -2
- package/pp-core/workflows/pause-work.md +1 -1
- package/pp-core/workflows/plan-milestone-gaps.md +1 -1
- package/pp-core/workflows/plan-phase/steps/chunked-planning.md +111 -0
- package/pp-core/workflows/plan-phase/steps/phase-tier.md +34 -0
- package/pp-core/workflows/plan-phase.md +43 -167
- package/pp-core/workflows/plan-review-convergence.md +2 -2
- package/pp-core/workflows/plant-seed.md +1 -1
- package/pp-core/workflows/pr-branch.md +1 -1
- package/pp-core/workflows/profile-user.md +1 -1
- package/pp-core/workflows/progress.md +3 -3
- package/pp-core/workflows/quick.md +3 -1
- package/pp-core/workflows/remove-phase.md +1 -1
- package/pp-core/workflows/remove-workspace.md +1 -1
- package/pp-core/workflows/resume-project.md +6 -12
- package/pp-core/workflows/review.md +1 -1
- package/pp-core/workflows/scan.md +1 -1
- package/pp-core/workflows/secure-phase.md +1 -1
- package/pp-core/workflows/settings-advanced.md +1 -1
- package/pp-core/workflows/settings-integrations.md +1 -1
- package/pp-core/workflows/settings.md +1 -1
- package/pp-core/workflows/ship.md +25 -8
- package/pp-core/workflows/sketch-wrap-up.md +1 -1
- package/pp-core/workflows/sketch.md +2 -1
- package/pp-core/workflows/spec-phase.md +1 -1
- package/pp-core/workflows/spike-wrap-up.md +1 -1
- package/pp-core/workflows/spike.md +1 -1
- package/pp-core/workflows/stats.md +2 -2
- package/pp-core/workflows/thread.md +1 -1
- package/pp-core/workflows/transition.md +5 -9
- package/pp-core/workflows/ui-phase.md +23 -2
- package/pp-core/workflows/ui-review.md +1 -1
- package/pp-core/workflows/ultraplan-phase.md +2 -2
- package/pp-core/workflows/validate-phase.md +1 -1
- package/pp-core/workflows/vault-write-back.md +1 -1
- package/pp-core/workflows/verify-phase.md +29 -26
- package/pp-core/workflows/verify-work.md +14 -10
- package/scripts/base64-scan.sh +7 -41
- package/scripts/changeset/cli.cjs +25 -5
- package/scripts/dev-env.cjs +462 -0
- package/scripts/lib/allowlist-ratchet.cjs +103 -1
- package/scripts/lib/size-budget.cjs +311 -0
- package/scripts/lint-neutrality-names.cjs +694 -0
- package/scripts/lint-org-coordinates.allowlist.json +35 -0
- package/scripts/lint-org-coordinates.cjs +426 -0
- package/scripts/lint-skill-deps.cjs +48 -9
- package/scripts/lint-test-file-count.cjs +17 -2
- package/scripts/prompt-injection-scan.sh +41 -20
- package/scripts/sync-manifest-versions.cjs +41 -7
- package/scripts/sync-runtime-launcher.cjs +106 -1
- package/scripts/update-size-baseline.cjs +274 -30
- package/scripts/workflow-size.cjs +61 -9
- package/commands/pp-build-handoff.md +0 -46
- package/pp-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +0 -94
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
> **Lazily-loaded.** Read this file from `pp-core/workflows/discovery-to-build.md`
|
|
4
4
|
> at Step 5h, once all sessions are synthesized (after the `_pp-handoff.md`
|
|
5
5
|
> synthesis and the `.planning/PROJECT.md` / `REQUIREMENTS.md` / `ROADMAP.md`
|
|
6
|
-
> generation steps have run). It is not `@`-imported
|
|
7
|
-
>
|
|
8
|
-
>
|
|
9
|
-
>
|
|
6
|
+
> generation steps have run). It is not `@`-imported — this is the sanctioned
|
|
7
|
+
> progressive-disclosure pattern for a DEFAULT-tier workflow file, not a
|
|
8
|
+
> workaround. Its own size is still guarded: `tests/workflow-size-budget.test.cjs`
|
|
9
|
+
> measures nested step files too (32 KiB cap plus the per-file baseline).
|
|
10
10
|
>
|
|
11
11
|
> Purpose: answers an external-review finding — the client gets a real architect-grade
|
|
12
12
|
> handoff, not just process state. This step is factored on purpose so it can
|
|
@@ -238,8 +238,8 @@ Introduction & Goals section.
|
|
|
238
238
|
already defined it is harmless:
|
|
239
239
|
|
|
240
240
|
```bash
|
|
241
|
-
_PP_SHIM_NAME="pp-tools.cjs"; _PP_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; PP_TOOLS="${_PP_RUNTIME_ROOT}/pp-core/bin/${_PP_SHIM_NAME}"; if [ -f "$PP_TOOLS" ]; then pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${_PP_RUNTIME_ROOT}/.claude/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${_PP_RUNTIME_ROOT}/.claude/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${_PP_RUNTIME_ROOT}/.codex/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${_PP_RUNTIME_ROOT}/.codex/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif command -v pp-tools >/dev/null 2>&1; then PP_TOOLS="$(command -v pp-tools)"; pp_run() { "$PP_TOOLS" "$@"; }; elif [ -f "$HOME/.claude/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="$HOME/.claude/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${HERMES_HOME:-$HOME/.hermes}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CODEX_HOME:-$HOME/.codex}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; else echo "ERROR: pp-tools.cjs not found at $PP_TOOLS and pp-tools is not on PATH. Run: npx -y @pareto4/pp-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${PP_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${PP_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi
|
|
242
241
|
|
|
242
|
+
_PP_SHIM_NAME="pp-tools.cjs"; _pp_root() { ( for _v in $(env | sed -n 's/^\(GIT_[A-Za-z0-9_]*\)=.*/\1/p'); do unset "$_v"; done; _c=$(git rev-parse --git-common-dir 2>/dev/null); if [ "${_c##*/}" = .git ] && cd "$_c/.." 2>/dev/null; then pwd -P; else git rev-parse --show-toplevel 2>/dev/null || pwd; fi ); }; pp_run() { case "$PP_TOOLS" in *.cjs) node "$PP_TOOLS" "$@";; *) "$PP_TOOLS" "$@";; esac; }; _PP_RUNTIME_ROOT="${RUNTIME_DIR:-$(_pp_root)}"; PP_TOOLS="${_PP_RUNTIME_ROOT}/pp-core/bin/${_PP_SHIM_NAME}"; if [ -f "$PP_TOOLS" ]; then :; elif [ -f "${_PP_RUNTIME_ROOT}/.claude/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${_PP_RUNTIME_ROOT}/.claude/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${_PP_RUNTIME_ROOT}/.codex/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${_PP_RUNTIME_ROOT}/.codex/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "$HOME/.claude/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="$HOME/.claude/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${HERMES_HOME:-$HOME/.hermes}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${CODEX_HOME:-$HOME/.codex}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CODEX_HOME:-$HOME/.codex}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/pp-core/bin/${_PP_SHIM_NAME}"; elif command -v pp-tools >/dev/null 2>&1; then PP_TOOLS="$(command -v pp-tools)"; else echo "ERROR: pp-tools.cjs not found at $PP_TOOLS and pp-tools is not on PATH. Run: npx -y @pareto4/pp-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${PP_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${PP_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi
|
|
243
243
|
FILES="docs/architecture/architecture.md"
|
|
244
244
|
ls docs/architecture/adr/*.md >/dev/null 2>&1 && FILES="$FILES docs/architecture/adr/*.md"
|
|
245
245
|
pp_run commit "docs: generate architect-grade handoff (arc42-lite architecture + ADRs)" --files $FILES
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Discovery-to-Build Gates — the hard blocks of Step 2
|
|
2
|
+
|
|
3
|
+
> **Lazily-loaded.** Read this file from `pp-core/workflows/discovery-to-build.md` at the start of
|
|
4
|
+
> Step 2, before the completion check. It is not `@`-imported. Run the gates in order; a stop in any
|
|
5
|
+
> of them ends the handoff. They are the only hard blocks in the workflow — every other check in
|
|
6
|
+
> Step 2 is a confirmation prompt.
|
|
7
|
+
|
|
8
|
+
**Screen-inventory contract gate (D-53)**
|
|
9
|
+
|
|
10
|
+
This is the one gate in this workflow that hard-blocks; every other check in Step 2 is a
|
|
11
|
+
confirmation prompt, deliberately. A percentage-based visual gate over a curated list cannot
|
|
12
|
+
detect an omission — a surface dropped from the list is dropped from the denominator too — and
|
|
13
|
+
this handoff is the last moment such an omission is still free to fix.
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
_PP_SHIM_NAME="pp-tools.cjs"; _pp_root() { ( for _v in $(env | sed -n 's/^\(GIT_[A-Za-z0-9_]*\)=.*/\1/p'); do unset "$_v"; done; _c=$(git rev-parse --git-common-dir 2>/dev/null); if [ "${_c##*/}" = .git ] && cd "$_c/.." 2>/dev/null; then pwd -P; else git rev-parse --show-toplevel 2>/dev/null || pwd; fi ); }; pp_run() { case "$PP_TOOLS" in *.cjs) node "$PP_TOOLS" "$@";; *) "$PP_TOOLS" "$@";; esac; }; _PP_RUNTIME_ROOT="${RUNTIME_DIR:-$(_pp_root)}"; PP_TOOLS="${_PP_RUNTIME_ROOT}/pp-core/bin/${_PP_SHIM_NAME}"; if [ -f "$PP_TOOLS" ]; then :; elif [ -f "${_PP_RUNTIME_ROOT}/.claude/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${_PP_RUNTIME_ROOT}/.claude/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${_PP_RUNTIME_ROOT}/.codex/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${_PP_RUNTIME_ROOT}/.codex/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "$HOME/.claude/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="$HOME/.claude/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${HERMES_HOME:-$HOME/.hermes}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${CODEX_HOME:-$HOME/.codex}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CODEX_HOME:-$HOME/.codex}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/pp-core/bin/${_PP_SHIM_NAME}"; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/pp-core/bin/${_PP_SHIM_NAME}"; elif command -v pp-tools >/dev/null 2>&1; then PP_TOOLS="$(command -v pp-tools)"; else echo "ERROR: pp-tools.cjs not found at $PP_TOOLS and pp-tools is not on PATH. Run: npx -y @pareto4/pp-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${PP_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${PP_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi
|
|
17
|
+
pp_run query discovery.screen-check
|
|
18
|
+
SCREEN_CHECK_STATUS=$?
|
|
19
|
+
echo "SCREEN_CHECK_STATUS=$SCREEN_CHECK_STATUS"
|
|
20
|
+
pp_run query discovery.screen-check --require-processed >/dev/null
|
|
21
|
+
FEEDBACK_STATUS=$?
|
|
22
|
+
echo "FEEDBACK_STATUS=$FEEDBACK_STATUS"
|
|
23
|
+
pp_run query discovery.element-sweep --check >/dev/null
|
|
24
|
+
SWEEP_STATUS=$?
|
|
25
|
+
echo "SWEEP_STATUS=$SWEEP_STATUS"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**If `SCREEN_CHECK_STATUS` is 0 and `FEEDBACK_STATUS` is 0:** Continue with the element-sweep gate below.
|
|
29
|
+
|
|
30
|
+
**If `SCREEN_CHECK_STATUS` is 0 and `FEEDBACK_STATUS` is non-zero:** Stop with no option to
|
|
31
|
+
proceed. Report the line the check printed, verbatim: an `Open` row in `_feedback.md` is a client
|
|
32
|
+
comment the build would ignore. Process it with `/pp-discovery prototype` Step 7, then re-run.
|
|
33
|
+
`--skip-validation` does not cover this gate.
|
|
34
|
+
|
|
35
|
+
**If `SCREEN_CHECK_STATUS` is non-zero:** Report the engine's own fault list and stop. Offer no
|
|
36
|
+
option to proceed and put no choice to the operator — this is a hard stop, not a confirmation.
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
Error: the screen-inventory contract has structural faults.
|
|
40
|
+
|
|
41
|
+
{the report screen-check printed, verbatim}
|
|
42
|
+
|
|
43
|
+
Resolve every item the report names in .planning/discovery/_screens.md and
|
|
44
|
+
.planning/discovery/_feedback.md, then re-run /pp-discovery-to-build. The two that always
|
|
45
|
+
block are D-53's: an MVP requirement that appears on no screen and in no bucket, and a surface
|
|
46
|
+
that is neither REQUIRED nor DEFERRED with a reason. The report names each fault in the same
|
|
47
|
+
vocabulary the Session 13 gate uses; that gate paragraph enumerates all of them.
|
|
48
|
+
|
|
49
|
+
The --skip-validation flag does NOT cover this gate. That flag skips the Discovery completion
|
|
50
|
+
check, for sessions that are intentionally incomplete; a surface nobody classified is a
|
|
51
|
+
malformed artifact, not incompleteness (D-53).
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**If the engagement never inventoried screens** and neither `.planning/discovery/_screens.md`
|
|
55
|
+
nor `.planning/discovery/_feedback.md` exists, the check exits 0 by itself: the handoff
|
|
56
|
+
proceeds exactly as it does today, so every pre-existing engagement is unaffected.
|
|
57
|
+
|
|
58
|
+
**Element-sweep gate**
|
|
59
|
+
|
|
60
|
+
Every functional element of the prototype must be decided before the build starts, or the build
|
|
61
|
+
receives screens with fields, columns and actions that no requirement or decision explains.
|
|
62
|
+
|
|
63
|
+
The check ran in the first fence above.
|
|
64
|
+
|
|
65
|
+
**If `SWEEP_STATUS` is 0:** The gates pass. Return to Step 2 of `discovery-to-build.md`.
|
|
66
|
+
|
|
67
|
+
**If `SWEEP_STATUS` is non-zero:** Stop with no option to proceed. Report the fault list the check
|
|
68
|
+
printed, verbatim, and tell the user to finish the sweep with `/pp-discovery prototype` Step 8, then
|
|
69
|
+
re-run `/pp-discovery-to-build`. `--skip-validation` does not cover this gate. Without a prototype
|
|
70
|
+
the check exits 0 by itself.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Discovery reference blocks — Step 6 of discovery-to-build
|
|
2
|
+
|
|
3
|
+
> **Lazily-loaded.** Read this file from `pp-core/workflows/discovery-to-build.md` at Step 6. It is
|
|
4
|
+
> not `@`-imported. Step 6a appends the PROJECT.md block; Step 6b injects the CLAUDE.md block.
|
|
5
|
+
|
|
6
|
+
## PROJECT.md block (Step 6a)
|
|
7
|
+
|
|
8
|
+
```markdown
|
|
9
|
+
## Discovery Artifacts
|
|
10
|
+
|
|
11
|
+
This project was initialized from a completed Pareto Discovery Sprint ({completed_count}/13 sessions).
|
|
12
|
+
Discovery outputs are the source of truth for business decisions and requirements rationale.
|
|
13
|
+
|
|
14
|
+
### Key References
|
|
15
|
+
|
|
16
|
+
| Topic | File | Use When |
|
|
17
|
+
|-------|------|----------|
|
|
18
|
+
| All decisions (accumulated) | `.planning/discovery/_context.md` | Understanding why a decision was made |
|
|
19
|
+
| pp-core handoff synthesis | `.planning/discovery/_pp-handoff.md` | Complete structured summary of all sessions |
|
|
20
|
+
| Business requirements | `.planning/discovery/session-03.md` | Detailed EPICs, user stories, acceptance criteria |
|
|
21
|
+
| Architecture decisions | `.planning/discovery/session-05.md` | Tech stack rationale, ADRs, component design |
|
|
22
|
+
| Security requirements | `.planning/discovery/session-06.md` | Compliance, encryption, audit requirements |
|
|
23
|
+
| Role definitions | `.planning/discovery/session-07.md` | RBAC model, permissions, identity provider |
|
|
24
|
+
| Integration specs | `.planning/discovery/session-08.md` | External system interfaces, protocols, data flows |
|
|
25
|
+
| QA strategy | `.planning/discovery/session-09.md` | Test types, coverage targets, quality gates |
|
|
26
|
+
| Release plan | `.planning/discovery/session-11.md` | Sprint plan, milestones, build order |
|
|
27
|
+
| Interactive prototype | `.planning/discovery/prototype/` | Visual reference for UI implementation |
|
|
28
|
+
|
|
29
|
+
### How pp-core Agents Should Use Discovery
|
|
30
|
+
|
|
31
|
+
- **During discuss phases:** Reference specific sessions when answering gray-area questions
|
|
32
|
+
- **During research:** Check Discovery sessions before external research — many answers are already there
|
|
33
|
+
- **During planning:** Use requirement IDs from Discovery (FR-xxx, US-xxx) in plan references
|
|
34
|
+
- **During verification:** Trace completed work back to Discovery requirements
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## CLAUDE.md block (Step 6b)
|
|
38
|
+
|
|
39
|
+
```markdown
|
|
40
|
+
## Discovery Sprint Context
|
|
41
|
+
|
|
42
|
+
This project has a completed Discovery Sprint in `.planning/discovery/`. pp-core agents should:
|
|
43
|
+
|
|
44
|
+
1. **Check Discovery before asking the user** — most business and architecture decisions are already documented
|
|
45
|
+
2. **Reference `.planning/discovery/_context.md`** for accumulated cross-session decisions
|
|
46
|
+
3. **Reference `.planning/discovery/_pp-handoff.md`** for the structured synthesis used to initialize pp-core
|
|
47
|
+
4. **Use original requirement IDs** (FR-xxx, NFR-xxx, US-xxx, EPIC-xxx) from Discovery in plans and commits
|
|
48
|
+
5. **Reference specific session files** when a phase involves topics covered in that session:
|
|
49
|
+
- Auth/roles → Session 7 (`.planning/discovery/session-07.md`)
|
|
50
|
+
- Integrations → Session 8 (`.planning/discovery/session-08.md`)
|
|
51
|
+
- UI/UX → Session 4 (`.planning/discovery/session-04.md`) + `.planning/discovery/prototype/`
|
|
52
|
+
- Security → Session 6 (`.planning/discovery/session-06.md`)
|
|
53
|
+
- Testing → Session 9 (`.planning/discovery/session-09.md`)
|
|
54
|
+
```
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# `_pp-handoff.md` template — Step 3b of discovery-to-build
|
|
2
|
+
|
|
3
|
+
> **Lazily-loaded.** Read this file from `pp-core/workflows/discovery-to-build.md` at Step 3b. It is
|
|
4
|
+
> not `@`-imported. Write `.planning/discovery/_pp-handoff.md` with exactly this structure; the
|
|
5
|
+
> synthesis rules stay in Step 3b.
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
# Discovery Sprint Synthesis — pp-core Handoff
|
|
9
|
+
|
|
10
|
+
> Auto-generated from {completed_count}/13 completed Discovery Sprint sessions.
|
|
11
|
+
> Source: .planning/discovery/_context.md + individual session files
|
|
12
|
+
> Generated: {date}
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## What We're Building
|
|
17
|
+
{Synthesize from Session 1 + 3: business vision + one-paragraph description of the
|
|
18
|
+
application — what it does, who it's for, why it matters}
|
|
19
|
+
|
|
20
|
+
### Core Problem
|
|
21
|
+
{From Session 2: the #1 pain point and supporting pains, as a clear problem statement}
|
|
22
|
+
|
|
23
|
+
### Target Users
|
|
24
|
+
{From Session 2+3: personas — role, tech proficiency, primary need}
|
|
25
|
+
|
|
26
|
+
| Persona | Role | Key Need |
|
|
27
|
+
|---------|------|----------|
|
|
28
|
+
| {persona} | {role} | {primary need} |
|
|
29
|
+
|
|
30
|
+
### Success Metrics
|
|
31
|
+
{From Session 1+3: KPIs and measurable outcomes}
|
|
32
|
+
|
|
33
|
+
| KPI | Target | Measurement |
|
|
34
|
+
|-----|--------|-------------|
|
|
35
|
+
| {kpi} | {target} | {how measured} |
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Scope
|
|
40
|
+
|
|
41
|
+
### In Scope (MVP)
|
|
42
|
+
{From Session 3+11: confirmed MVP scope items}
|
|
43
|
+
|
|
44
|
+
### Out of Scope
|
|
45
|
+
{From Session 3+11: explicitly excluded items with reasons}
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Functional Requirements
|
|
50
|
+
{From Session 3: EPICs and user stories, structured for requirements generation}
|
|
51
|
+
|
|
52
|
+
### EPIC Registry
|
|
53
|
+
| ID | Title | Priority | Phase | Stories |
|
|
54
|
+
|----|-------|----------|-------|---------|
|
|
55
|
+
| {epic-id} | {title} | {must/should/could} | {phase} | {count} |
|
|
56
|
+
|
|
57
|
+
### Requirements by EPIC
|
|
58
|
+
|
|
59
|
+
#### {EPIC-001}: {Title}
|
|
60
|
+
{Brief EPIC description}
|
|
61
|
+
|
|
62
|
+
**User Stories:**
|
|
63
|
+
| ID | Story | Priority | Acceptance Criteria Summary |
|
|
64
|
+
|----|-------|----------|---------------------------|
|
|
65
|
+
| {us-id} | As a {role}, I want {goal} so that {benefit} | {priority} | {brief AC} |
|
|
66
|
+
|
|
67
|
+
### Non-Functional Requirements
|
|
68
|
+
| ID | Category | Requirement | Target |
|
|
69
|
+
|----|----------|-------------|--------|
|
|
70
|
+
| {nfr-id} | {Performance/Security/Usability/Availability} | {requirement} | {target} |
|
|
71
|
+
|
|
72
|
+
### Business Rules
|
|
73
|
+
| ID | Rule | Applies To |
|
|
74
|
+
|----|------|------------|
|
|
75
|
+
| {br-id} | {rule} | {module/scope} |
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Architecture & Technology
|
|
80
|
+
{From Session 5: architecture style, tech stack, ADRs, key components}
|
|
81
|
+
|
|
82
|
+
### Technology Stack
|
|
83
|
+
| Layer | Technology | Rationale |
|
|
84
|
+
|-------|-----------|-----------|
|
|
85
|
+
| Frontend | {tech} | {why} |
|
|
86
|
+
| Backend | {tech} | {why} |
|
|
87
|
+
| Database | {tech} | {why} |
|
|
88
|
+
| Hosting | {tech} | {why} |
|
|
89
|
+
| Auth | {tech} | {why} |
|
|
90
|
+
|
|
91
|
+
### Architecture Decision Records
|
|
92
|
+
| ADR | Decision | Context |
|
|
93
|
+
|-----|----------|---------|
|
|
94
|
+
| {adr-id} | {decision} | {why over alternatives} |
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Security & Compliance
|
|
99
|
+
{From Session 6: data classification, compliance, encryption, auth, audit, SLA}
|
|
100
|
+
|
|
101
|
+
## User Roles & Identity
|
|
102
|
+
{From Session 7: RBAC roles + permissions, identity provider}
|
|
103
|
+
|
|
104
|
+
| Role | Description | Key Permissions |
|
|
105
|
+
|------|-------------|-----------------|
|
|
106
|
+
| {role} | {description} | {permissions} |
|
|
107
|
+
|
|
108
|
+
## Integrations
|
|
109
|
+
{From Session 8: external systems, direction, protocol, data, phase}
|
|
110
|
+
|
|
111
|
+
| System | Direction | Protocol | Data | Phase |
|
|
112
|
+
|--------|-----------|----------|------|-------|
|
|
113
|
+
| {system} | {in/out/bi} | {REST/webhook} | {data} | {when} |
|
|
114
|
+
|
|
115
|
+
## Quality & Testing Strategy
|
|
116
|
+
{From Session 9: framework, coverage target, test types, UAT, quality gates}
|
|
117
|
+
|
|
118
|
+
## Infrastructure & Deployment
|
|
119
|
+
{From Session 10: environments, deployment approach, monitoring, backup/DR}
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Roadmap & Phasing
|
|
124
|
+
{From Session 11: planned release structure — used to generate the phase breakdown}
|
|
125
|
+
|
|
126
|
+
### Phases
|
|
127
|
+
| Phase | Scope | Duration |
|
|
128
|
+
|-------|-------|----------|
|
|
129
|
+
| {phase} | {included} | {sprints/weeks} |
|
|
130
|
+
|
|
131
|
+
### Key Milestones
|
|
132
|
+
| Milestone | Target | Criteria |
|
|
133
|
+
|-----------|--------|----------|
|
|
134
|
+
| {milestone} | {date/sprint} | {done criteria} |
|
|
135
|
+
|
|
136
|
+
### Build Order Preferences
|
|
137
|
+
{Sequencing constraints or preferences from Discovery}
|
|
138
|
+
|
|
139
|
+
## Team & Delivery Model
|
|
140
|
+
{From Session 12: team size, roles, sprint cadence, ceremonies}
|
|
141
|
+
|
|
142
|
+
## Open Items & Risks
|
|
143
|
+
|
|
144
|
+
### Parked Questions (Unresolved)
|
|
145
|
+
{From the D-12 scan of every session's PARKED — needs business/senior input markers:
|
|
146
|
+
list each parked question verbatim, honestly, as a known gap — never silently dropped}
|
|
147
|
+
|
|
148
|
+
| Question | Session | Owner |
|
|
149
|
+
|----------|---------|-------|
|
|
150
|
+
| {parked question, verbatim} | {session} | business/senior |
|
|
151
|
+
|
|
152
|
+
### Open Action Items
|
|
153
|
+
| Action | From Session | Status |
|
|
154
|
+
|--------|-------------|--------|
|
|
155
|
+
| {action} | {session} | {status} |
|
|
156
|
+
|
|
157
|
+
### Risks
|
|
158
|
+
| Risk | Probability | Impact | Mitigation |
|
|
159
|
+
|------|-------------|--------|------------|
|
|
160
|
+
| {risk} | {H/M/L} | {H/M/L} | {mitigation} |
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Discovery Traceability
|
|
165
|
+
|
|
166
|
+
> pp-core agents: for deeper context on any decision above, reference the original
|
|
167
|
+
> Discovery session files. Key mappings:
|
|
168
|
+
|
|
169
|
+
| Topic | Primary Source | Secondary Sources |
|
|
170
|
+
|-------|---------------|-------------------|
|
|
171
|
+
| Business context & vision | `.planning/discovery/session-01.md` | `.planning/discovery/_context.md` §1 |
|
|
172
|
+
| Current state & pain points | `.planning/discovery/session-02.md` | `.planning/discovery/_context.md` §2 |
|
|
173
|
+
| Requirements & user stories | `.planning/discovery/session-03.md` | `.planning/discovery/_context.md` §3 |
|
|
174
|
+
| UX design principles | `.planning/discovery/session-04.md` | `.planning/discovery/_context.md` §4 |
|
|
175
|
+
| Architecture & tech stack | `.planning/discovery/session-05.md` | `.planning/discovery/_context.md` §5 |
|
|
176
|
+
| Security & compliance | `.planning/discovery/session-06.md` | `.planning/discovery/_context.md` §6 |
|
|
177
|
+
| Roles & identity | `.planning/discovery/session-07.md` | `.planning/discovery/_context.md` §7 |
|
|
178
|
+
| Integrations | `.planning/discovery/session-08.md` | `.planning/discovery/_context.md` §8 |
|
|
179
|
+
| QA & testing | `.planning/discovery/session-09.md` | `.planning/discovery/_context.md` §9 |
|
|
180
|
+
| Infrastructure & deployment | `.planning/discovery/session-10.md` | `.planning/discovery/_context.md` §10 |
|
|
181
|
+
| Roadmap & release plan | `.planning/discovery/session-11.md` | `.planning/discovery/_context.md` §11 |
|
|
182
|
+
| Team & delivery model | `.planning/discovery/session-12.md` | `.planning/discovery/_context.md` §12 |
|
|
183
|
+
| Wrap-up & go/no-go | `.planning/discovery/session-13.md` | `.planning/discovery/_context.md` §13 |
|
|
184
|
+
```
|