@pareto4/pp-core 1.5.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 +23 -0
- package/GEMINI.md +53 -0
- package/LICENSE +22 -0
- package/README.md +100 -0
- package/agents/pp-advisor-researcher.md +108 -0
- package/agents/pp-ai-researcher.md +114 -0
- package/agents/pp-assumptions-analyzer.md +105 -0
- package/agents/pp-code-fixer.md +669 -0
- package/agents/pp-code-reviewer.md +387 -0
- package/agents/pp-codebase-mapper.md +853 -0
- package/agents/pp-debug-session-manager.md +315 -0
- package/agents/pp-debugger.md +1453 -0
- package/agents/pp-doc-classifier.md +168 -0
- package/agents/pp-doc-synthesizer.md +204 -0
- package/agents/pp-doc-verifier.md +217 -0
- package/agents/pp-doc-writer.md +616 -0
- package/agents/pp-domain-researcher.md +147 -0
- package/agents/pp-eval-auditor.md +191 -0
- package/agents/pp-eval-planner.md +154 -0
- package/agents/pp-executor.md +808 -0
- package/agents/pp-framework-selector.md +160 -0
- package/agents/pp-integration-checker.md +470 -0
- package/agents/pp-intel-updater.md +339 -0
- package/agents/pp-mempalace-curator.md +47 -0
- package/agents/pp-nyquist-auditor.md +204 -0
- package/agents/pp-pattern-mapper.md +335 -0
- package/agents/pp-phase-researcher.md +867 -0
- package/agents/pp-plan-checker.md +988 -0
- package/agents/pp-planner.md +1052 -0
- package/agents/pp-project-researcher.md +612 -0
- package/agents/pp-research-synthesizer.md +260 -0
- package/agents/pp-roadmapper.md +741 -0
- package/agents/pp-security-auditor.md +156 -0
- package/agents/pp-ui-auditor.md +495 -0
- package/agents/pp-ui-checker.md +309 -0
- package/agents/pp-ui-researcher.md +375 -0
- package/agents/pp-user-profiler.md +171 -0
- package/agents/pp-verifier.md +967 -0
- package/assets/gsd-logo-2000-transparent.png +0 -0
- package/assets/gsd-logo-2000-transparent.svg +17 -0
- package/assets/gsd-logo-2000.png +0 -0
- package/assets/gsd-logo-2000.svg +21 -0
- package/assets/terminal.svg +68 -0
- package/bin/install.js +12370 -0
- package/bin/lib/ui-safety-gate.cjs +107 -0
- package/commands/pp-add-tests.md +42 -0
- package/commands/pp-ai-integration-phase.md +37 -0
- package/commands/pp-audit-fix.md +34 -0
- package/commands/pp-audit-milestone.md +37 -0
- package/commands/pp-audit-uat.md +24 -0
- package/commands/pp-autonomous.md +51 -0
- package/commands/pp-capture.md +62 -0
- package/commands/pp-cleanup.md +24 -0
- package/commands/pp-code-review.md +59 -0
- package/commands/pp-complete-milestone.md +143 -0
- package/commands/pp-config.md +56 -0
- package/commands/pp-debug.md +52 -0
- package/commands/pp-discovery.md +34 -0
- package/commands/pp-discuss-phase.md +77 -0
- package/commands/pp-docs-update.md +49 -0
- package/commands/pp-eval-review.md +33 -0
- package/commands/pp-execute-phase.md +65 -0
- package/commands/pp-explore.md +27 -0
- package/commands/pp-extract-learnings.md +23 -0
- package/commands/pp-fast.md +31 -0
- package/commands/pp-forensics.md +57 -0
- package/commands/pp-graphify.md +204 -0
- package/commands/pp-health.md +31 -0
- package/commands/pp-help.md +28 -0
- package/commands/pp-import.md +45 -0
- package/commands/pp-inbox.md +39 -0
- package/commands/pp-ingest-docs.md +42 -0
- package/commands/pp-manager.md +45 -0
- package/commands/pp-map-codebase.md +83 -0
- package/commands/pp-mempalace-capture.md +71 -0
- package/commands/pp-mempalace-recall.md +102 -0
- package/commands/pp-milestone-summary.md +51 -0
- package/commands/pp-mvp-phase.md +45 -0
- package/commands/pp-new-milestone.md +45 -0
- package/commands/pp-new-project.md +47 -0
- package/commands/pp-ns-context.md +25 -0
- package/commands/pp-ns-ideate.md +24 -0
- package/commands/pp-ns-manage.md +36 -0
- package/commands/pp-ns-project.md +27 -0
- package/commands/pp-ns-review.md +29 -0
- package/commands/pp-ns-workflow.md +35 -0
- package/commands/pp-pause-work.md +43 -0
- package/commands/pp-phase.md +56 -0
- package/commands/pp-plan-phase.md +63 -0
- package/commands/pp-plan-review-convergence.md +60 -0
- package/commands/pp-pr-branch.md +26 -0
- package/commands/pp-profile-user.md +46 -0
- package/commands/pp-progress.md +49 -0
- package/commands/pp-quick.md +174 -0
- package/commands/pp-resume-work.md +30 -0
- package/commands/pp-review-backlog.md +63 -0
- package/commands/pp-review.md +42 -0
- package/commands/pp-secure-phase.md +36 -0
- package/commands/pp-settings.md +29 -0
- package/commands/pp-ship.md +24 -0
- package/commands/pp-sketch.md +60 -0
- package/commands/pp-spec-phase.md +63 -0
- package/commands/pp-spike.md +57 -0
- package/commands/pp-stats.md +20 -0
- package/commands/pp-surface.md +162 -0
- package/commands/pp-thread.md +24 -0
- package/commands/pp-ui-phase.md +35 -0
- package/commands/pp-ui-review.md +33 -0
- package/commands/pp-ultraplan-phase.md +34 -0
- package/commands/pp-undo.md +35 -0
- package/commands/pp-update.md +49 -0
- package/commands/pp-validate-phase.md +36 -0
- package/commands/pp-verify-work.md +39 -0
- package/commands/pp-workspace.md +52 -0
- package/commands/pp-workstreams.md +70 -0
- package/gemini-extension.json +6 -0
- package/hooks/dist/lib/git-cmd.js +150 -0
- package/hooks/dist/lib/pp-graphify-rebuild.sh +65 -0
- package/hooks/dist/managed-hooks-registry.cjs +39 -0
- package/hooks/dist/pp-check-update-worker.js +108 -0
- package/hooks/dist/pp-check-update.js +66 -0
- package/hooks/dist/pp-config-reload.js +133 -0
- package/hooks/dist/pp-context-monitor.js +196 -0
- package/hooks/dist/pp-cursor-post-tool.js +75 -0
- package/hooks/dist/pp-cursor-session-start.js +52 -0
- package/hooks/dist/pp-ensure-canonical-path.js +305 -0
- package/hooks/dist/pp-graphify-update.sh +158 -0
- package/hooks/dist/pp-phase-boundary.sh +47 -0
- package/hooks/dist/pp-prompt-guard.js +97 -0
- package/hooks/dist/pp-read-guard.js +101 -0
- package/hooks/dist/pp-read-injection-scanner.js +203 -0
- package/hooks/dist/pp-session-state.sh +59 -0
- package/hooks/dist/pp-statusline.js +566 -0
- package/hooks/dist/pp-update-banner.js +138 -0
- package/hooks/dist/pp-validate-commit.sh +57 -0
- package/hooks/dist/pp-workflow-guard.js +167 -0
- package/hooks/dist/pp-worktree-path-guard.js +185 -0
- package/hooks/hooks.json +70 -0
- package/hooks/lib/git-cmd.js +150 -0
- package/hooks/lib/pp-graphify-rebuild.sh +65 -0
- package/hooks/managed-hooks-registry.cjs +39 -0
- package/hooks/pp-check-update-worker.js +108 -0
- package/hooks/pp-check-update.js +66 -0
- package/hooks/pp-config-reload.js +133 -0
- package/hooks/pp-context-monitor.js +196 -0
- package/hooks/pp-cursor-post-tool.js +75 -0
- package/hooks/pp-cursor-session-start.js +52 -0
- package/hooks/pp-ensure-canonical-path.js +305 -0
- package/hooks/pp-graphify-update.sh +158 -0
- package/hooks/pp-phase-boundary.sh +47 -0
- package/hooks/pp-prompt-guard.js +97 -0
- package/hooks/pp-read-guard.js +101 -0
- package/hooks/pp-read-injection-scanner.js +203 -0
- package/hooks/pp-session-state.sh +59 -0
- package/hooks/pp-statusline.js +566 -0
- package/hooks/pp-update-banner.js +138 -0
- package/hooks/pp-validate-commit.sh +57 -0
- package/hooks/pp-workflow-guard.js +167 -0
- package/hooks/pp-worktree-path-guard.js +185 -0
- package/package.json +125 -0
- package/pp-core/bin/check-latest-version.cjs +161 -0
- package/pp-core/bin/lib/active-workstream-store.cjs +297 -0
- package/pp-core/bin/lib/adr-parser.cjs +399 -0
- package/pp-core/bin/lib/agent-command-router.cjs +68 -0
- package/pp-core/bin/lib/agent-install-check.cjs +143 -0
- package/pp-core/bin/lib/artifacts.cjs +51 -0
- package/pp-core/bin/lib/audit-command-router.cjs +61 -0
- package/pp-core/bin/lib/audit.cjs +743 -0
- package/pp-core/bin/lib/capability-activation.cjs +113 -0
- package/pp-core/bin/lib/capability-registry.cjs +3727 -0
- package/pp-core/bin/lib/capability-state.cjs +497 -0
- package/pp-core/bin/lib/capability-writer.cjs +355 -0
- package/pp-core/bin/lib/check-command-router.cjs +800 -0
- package/pp-core/bin/lib/cjs-command-router-adapter.cjs +81 -0
- package/pp-core/bin/lib/cli-exit.cjs +61 -0
- package/pp-core/bin/lib/clock.cjs +95 -0
- package/pp-core/bin/lib/clusters.cjs +131 -0
- package/pp-core/bin/lib/code-review-flags.cjs +59 -0
- package/pp-core/bin/lib/command-aliases.cjs +809 -0
- package/pp-core/bin/lib/command-arg-projection.cjs +55 -0
- package/pp-core/bin/lib/command-roster.cjs +19 -0
- package/pp-core/bin/lib/command-routing-hub.cjs +300 -0
- package/pp-core/bin/lib/commands.cjs +1244 -0
- package/pp-core/bin/lib/config-loader.cjs +714 -0
- package/pp-core/bin/lib/config-schema.cjs +58 -0
- package/pp-core/bin/lib/config-types.cjs +20 -0
- package/pp-core/bin/lib/config.cjs +796 -0
- package/pp-core/bin/lib/configuration.cjs +209 -0
- package/pp-core/bin/lib/context-utilization.cjs +48 -0
- package/pp-core/bin/lib/core-utils.cjs +198 -0
- package/pp-core/bin/lib/decisions.cjs +136 -0
- package/pp-core/bin/lib/docs.cjs +264 -0
- package/pp-core/bin/lib/drift.cjs +364 -0
- package/pp-core/bin/lib/edge-probe.cjs +196 -0
- package/pp-core/bin/lib/fallow-runner.cjs +153 -0
- package/pp-core/bin/lib/federated-config.cjs +182 -0
- package/pp-core/bin/lib/frontmatter.cjs +494 -0
- package/pp-core/bin/lib/gap-checker.cjs +260 -0
- package/pp-core/bin/lib/git-base-branch.cjs +220 -0
- package/pp-core/bin/lib/graphify-command-router.cjs +72 -0
- package/pp-core/bin/lib/graphify.cjs +472 -0
- package/pp-core/bin/lib/gsd2-import.cjs +456 -0
- package/pp-core/bin/lib/init-command-router.cjs +62 -0
- package/pp-core/bin/lib/init.cjs +1912 -0
- package/pp-core/bin/lib/install-profiles.cjs +814 -0
- package/pp-core/bin/lib/installer-migration-authoring.cjs +122 -0
- package/pp-core/bin/lib/installer-migration-report.cjs +351 -0
- package/pp-core/bin/lib/installer-migrations/000-first-time-baseline.cjs +225 -0
- package/pp-core/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +48 -0
- package/pp-core/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +94 -0
- package/pp-core/bin/lib/installer-migrations/003-rename-get-shit-done-to-gsd-core.cjs +108 -0
- package/pp-core/bin/lib/installer-migrations/004-prune-stale-pristine-snapshots.cjs +123 -0
- package/pp-core/bin/lib/installer-migrations/005-rename-gsd-core-to-pp-core.cjs +109 -0
- package/pp-core/bin/lib/installer-migrations/006-rename-gsd-command-namespace.cjs +135 -0
- package/pp-core/bin/lib/installer-migrations.cjs +823 -0
- package/pp-core/bin/lib/intel-command-router.cjs +119 -0
- package/pp-core/bin/lib/intel.cjs +584 -0
- package/pp-core/bin/lib/io.cjs +220 -0
- package/pp-core/bin/lib/learnings.cjs +270 -0
- package/pp-core/bin/lib/legacy-cleanup.cjs +253 -0
- package/pp-core/bin/lib/loop-host-contract.cjs +105 -0
- package/pp-core/bin/lib/loop-resolver.cjs +479 -0
- package/pp-core/bin/lib/milestone.cjs +381 -0
- package/pp-core/bin/lib/model-catalog.cjs +154 -0
- package/pp-core/bin/lib/model-profiles.cjs +24 -0
- package/pp-core/bin/lib/model-resolver.cjs +467 -0
- package/pp-core/bin/lib/observability/event.cjs +51 -0
- package/pp-core/bin/lib/observability/logger.cjs +146 -0
- package/pp-core/bin/lib/observability/redaction.cjs +48 -0
- package/pp-core/bin/lib/package-identity.cjs +35 -0
- package/pp-core/bin/lib/package-legitimacy.cjs +368 -0
- package/pp-core/bin/lib/phase-command-router.cjs +209 -0
- package/pp-core/bin/lib/phase-id.cjs +213 -0
- package/pp-core/bin/lib/phase-lifecycle.cjs +74 -0
- package/pp-core/bin/lib/phase-locator.cjs +145 -0
- package/pp-core/bin/lib/phase.cjs +1446 -0
- package/pp-core/bin/lib/phases-command-router.cjs +43 -0
- package/pp-core/bin/lib/plan-drift-guard.cjs +117 -0
- package/pp-core/bin/lib/plan-scan.cjs +91 -0
- package/pp-core/bin/lib/planning-workspace.cjs +245 -0
- package/pp-core/bin/lib/probe-core.cjs +402 -0
- package/pp-core/bin/lib/profile-output.cjs +1164 -0
- package/pp-core/bin/lib/profile-pipeline-command-router.cjs +138 -0
- package/pp-core/bin/lib/profile-pipeline.cjs +519 -0
- package/pp-core/bin/lib/prohibition-enforcement.cjs +660 -0
- package/pp-core/bin/lib/project-root.cjs +119 -0
- package/pp-core/bin/lib/prompt-budget.cjs +305 -0
- package/pp-core/bin/lib/research-provider.cjs +137 -0
- package/pp-core/bin/lib/research-store.cjs +167 -0
- package/pp-core/bin/lib/review-reviewer-selection.cjs +121 -0
- package/pp-core/bin/lib/roadmap-command-router.cjs +166 -0
- package/pp-core/bin/lib/roadmap-parser.cjs +456 -0
- package/pp-core/bin/lib/roadmap-upgrade.cjs +476 -0
- package/pp-core/bin/lib/roadmap.cjs +738 -0
- package/pp-core/bin/lib/runtime-artifact-conversion.cjs +1966 -0
- package/pp-core/bin/lib/runtime-artifact-layout.cjs +342 -0
- package/pp-core/bin/lib/runtime-config-adapter-registry.cjs +103 -0
- package/pp-core/bin/lib/runtime-homes.cjs +272 -0
- package/pp-core/bin/lib/runtime-hooks-surface.cjs +1460 -0
- package/pp-core/bin/lib/runtime-name-policy.cjs +97 -0
- package/pp-core/bin/lib/runtime-slash.cjs +137 -0
- package/pp-core/bin/lib/schema-detect.cjs +159 -0
- package/pp-core/bin/lib/secrets.cjs +34 -0
- package/pp-core/bin/lib/security.cjs +480 -0
- package/pp-core/bin/lib/semver-compare.cjs +42 -0
- package/pp-core/bin/lib/shell-command-projection.cjs +550 -0
- package/pp-core/bin/lib/state-command-router.cjs +172 -0
- package/pp-core/bin/lib/state-document.cjs +312 -0
- package/pp-core/bin/lib/state.cjs +2587 -0
- package/pp-core/bin/lib/surface.cjs +505 -0
- package/pp-core/bin/lib/task-command-router.cjs +85 -0
- package/pp-core/bin/lib/teams-status.cjs +74 -0
- package/pp-core/bin/lib/template.cjs +246 -0
- package/pp-core/bin/lib/uat-predicate.cjs +329 -0
- package/pp-core/bin/lib/uat.cjs +359 -0
- package/pp-core/bin/lib/ui-safety-gate.cjs +98 -0
- package/pp-core/bin/lib/update-context.cjs +221 -0
- package/pp-core/bin/lib/validate-command-router.cjs +91 -0
- package/pp-core/bin/lib/validate.cjs +122 -0
- package/pp-core/bin/lib/verification-command-router.cjs +31 -0
- package/pp-core/bin/lib/verification.cjs +196 -0
- package/pp-core/bin/lib/verify-command-router.cjs +44 -0
- package/pp-core/bin/lib/verify.cjs +1932 -0
- package/pp-core/bin/lib/workstream-inventory-builder.cjs +81 -0
- package/pp-core/bin/lib/workstream-inventory.cjs +147 -0
- package/pp-core/bin/lib/workstream-name-policy.cjs +91 -0
- package/pp-core/bin/lib/workstream.cjs +386 -0
- package/pp-core/bin/lib/worktree-base-ref.cjs +350 -0
- package/pp-core/bin/lib/worktree-safety.cjs +985 -0
- package/pp-core/bin/pp-tools.cjs +2239 -0
- package/pp-core/bin/pp_run +20 -0
- package/pp-core/bin/shared/config-defaults.manifest.json +97 -0
- package/pp-core/bin/shared/config-schema.manifest.json +176 -0
- package/pp-core/bin/shared/model-catalog.json +160 -0
- package/pp-core/bin/shared/runtime-aliases.manifest.json +79 -0
- package/pp-core/bin/verify-reapply-patches.cjs +400 -0
- package/pp-core/contexts/dev.md +21 -0
- package/pp-core/contexts/research.md +22 -0
- package/pp-core/contexts/review.md +23 -0
- package/pp-core/references/agent-contracts.md +79 -0
- package/pp-core/references/ai-evals.md +156 -0
- package/pp-core/references/ai-frameworks.md +186 -0
- package/pp-core/references/artifact-types.md +131 -0
- package/pp-core/references/autonomous-smart-discuss.md +277 -0
- package/pp-core/references/checkpoints.md +814 -0
- package/pp-core/references/common-bug-patterns.md +114 -0
- package/pp-core/references/context-budget.md +85 -0
- package/pp-core/references/continuation-format.md +253 -0
- package/pp-core/references/debugger-philosophy.md +76 -0
- package/pp-core/references/decimal-phase-calculation.md +64 -0
- package/pp-core/references/doc-conflict-engine.md +91 -0
- package/pp-core/references/domain-probes.md +125 -0
- package/pp-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json +7 -0
- package/pp-core/references/edge-probe-fixtures/01-round-half-even/requirements.json +1 -0
- package/pp-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json +8 -0
- package/pp-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json +1 -0
- package/pp-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json +7 -0
- package/pp-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json +1 -0
- package/pp-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json +7 -0
- package/pp-core/references/edge-probe-fixtures/04-money-rounding/requirements.json +1 -0
- package/pp-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json +8 -0
- package/pp-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json +1 -0
- package/pp-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json +8 -0
- package/pp-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json +1 -0
- package/pp-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json +4 -0
- package/pp-core/references/edge-probe.md +272 -0
- package/pp-core/references/execute-mvp-tdd.md +81 -0
- package/pp-core/references/executor-examples.md +110 -0
- package/pp-core/references/few-shot-examples/plan-checker.md +73 -0
- package/pp-core/references/few-shot-examples/verifier.md +109 -0
- package/pp-core/references/gate-prompts.md +100 -0
- package/pp-core/references/gates.md +70 -0
- package/pp-core/references/git-integration.md +298 -0
- package/pp-core/references/git-planning-commit.md +40 -0
- package/pp-core/references/ios-scaffold.md +123 -0
- package/pp-core/references/loop-hook-dispatch.md +61 -0
- package/pp-core/references/mandatory-initial-read.md +2 -0
- package/pp-core/references/model-profile-resolution.md +38 -0
- package/pp-core/references/model-profiles.md +245 -0
- package/pp-core/references/mvp-concepts.md +49 -0
- package/pp-core/references/phase-argument-parsing.md +61 -0
- package/pp-core/references/planner-antipatterns.md +176 -0
- package/pp-core/references/planner-chunked.md +49 -0
- package/pp-core/references/planner-gap-closure.md +62 -0
- package/pp-core/references/planner-graphify-auto-update.md +67 -0
- package/pp-core/references/planner-guidance.md +186 -0
- package/pp-core/references/planner-human-verify-mode.md +57 -0
- package/pp-core/references/planner-interface-context.md +62 -0
- package/pp-core/references/planner-load-graph-context.md +36 -0
- package/pp-core/references/planner-mvp-mode.md +53 -0
- package/pp-core/references/planner-reviews.md +42 -0
- package/pp-core/references/planner-revision.md +87 -0
- package/pp-core/references/planner-source-audit.md +73 -0
- package/pp-core/references/planning-config.md +477 -0
- package/pp-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json +14 -0
- package/pp-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json +4 -0
- package/pp-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json +32 -0
- package/pp-core/references/prohibition-probe.md +326 -0
- package/pp-core/references/project-skills-discovery.md +19 -0
- package/pp-core/references/questioning.md +162 -0
- package/pp-core/references/research-documentation-lookup.md +29 -0
- package/pp-core/references/research-philosophy.md +29 -0
- package/pp-core/references/research-verification-protocol.md +27 -0
- package/pp-core/references/revision-loop.md +97 -0
- package/pp-core/references/scout-codebase.md +51 -0
- package/pp-core/references/skeleton-template.md +48 -0
- package/pp-core/references/sketch-interactivity.md +41 -0
- package/pp-core/references/sketch-theme-system.md +94 -0
- package/pp-core/references/sketch-tooling.md +45 -0
- package/pp-core/references/sketch-variant-patterns.md +81 -0
- package/pp-core/references/spidr-splitting.md +69 -0
- package/pp-core/references/tdd.md +330 -0
- package/pp-core/references/thinking-models-debug.md +44 -0
- package/pp-core/references/thinking-models-execution.md +50 -0
- package/pp-core/references/thinking-models-planning.md +62 -0
- package/pp-core/references/thinking-models-research.md +50 -0
- package/pp-core/references/thinking-models-verification.md +55 -0
- package/pp-core/references/thinking-partner.md +96 -0
- package/pp-core/references/ui-brand.md +162 -0
- package/pp-core/references/universal-anti-patterns.md +63 -0
- package/pp-core/references/user-profiling.md +681 -0
- package/pp-core/references/user-story-template.md +58 -0
- package/pp-core/references/verification-overrides.md +227 -0
- package/pp-core/references/verification-patterns.md +612 -0
- package/pp-core/references/verify-mvp-mode.md +85 -0
- package/pp-core/references/workstream-flag.md +111 -0
- package/pp-core/references/worktree-branch-check.md +44 -0
- package/pp-core/references/worktree-path-safety.md +67 -0
- package/pp-core/templates/AI-SPEC.md +246 -0
- package/pp-core/templates/DEBUG.md +169 -0
- package/pp-core/templates/README.md +77 -0
- package/pp-core/templates/SECURITY.md +61 -0
- package/pp-core/templates/UAT.md +265 -0
- package/pp-core/templates/UI-SPEC.md +100 -0
- package/pp-core/templates/VALIDATION.md +76 -0
- package/pp-core/templates/claude-md.md +145 -0
- package/pp-core/templates/codebase/architecture.md +255 -0
- package/pp-core/templates/codebase/concerns.md +310 -0
- package/pp-core/templates/codebase/conventions.md +307 -0
- package/pp-core/templates/codebase/integrations.md +280 -0
- package/pp-core/templates/codebase/stack.md +186 -0
- package/pp-core/templates/codebase/structure.md +285 -0
- package/pp-core/templates/codebase/testing.md +480 -0
- package/pp-core/templates/config.json +62 -0
- package/pp-core/templates/context.md +352 -0
- package/pp-core/templates/continue-here.md +78 -0
- package/pp-core/templates/copilot-instructions.md +7 -0
- package/pp-core/templates/debug-subagent-prompt.md +91 -0
- package/pp-core/templates/dev-preferences.md +21 -0
- package/pp-core/templates/discovery.md +146 -0
- package/pp-core/templates/discussion-log.md +63 -0
- package/pp-core/templates/milestone-archive.md +123 -0
- package/pp-core/templates/milestone.md +115 -0
- package/pp-core/templates/phase-prompt.md +610 -0
- package/pp-core/templates/planner-subagent-prompt.md +117 -0
- package/pp-core/templates/project.md +203 -0
- package/pp-core/templates/requirements.md +231 -0
- package/pp-core/templates/research-project/ARCHITECTURE.md +204 -0
- package/pp-core/templates/research-project/FEATURES.md +147 -0
- package/pp-core/templates/research-project/PITFALLS.md +200 -0
- package/pp-core/templates/research-project/STACK.md +120 -0
- package/pp-core/templates/research-project/SUMMARY.md +170 -0
- package/pp-core/templates/research.md +592 -0
- package/pp-core/templates/retrospective.md +54 -0
- package/pp-core/templates/roadmap.md +202 -0
- package/pp-core/templates/spec.md +333 -0
- package/pp-core/templates/state.md +195 -0
- package/pp-core/templates/summary-complex.md +60 -0
- package/pp-core/templates/summary-minimal.md +42 -0
- package/pp-core/templates/summary-standard.md +49 -0
- package/pp-core/templates/summary.md +249 -0
- package/pp-core/templates/user-profile.md +146 -0
- package/pp-core/templates/user-setup.md +311 -0
- package/pp-core/templates/verification-report.md +335 -0
- package/pp-core/workflows/_runtime-launcher.snippet.sh +1 -0
- package/pp-core/workflows/add-backlog.md +91 -0
- package/pp-core/workflows/add-phase.md +113 -0
- package/pp-core/workflows/add-tests.md +355 -0
- package/pp-core/workflows/add-todo.md +161 -0
- package/pp-core/workflows/ai-integration-phase.md +295 -0
- package/pp-core/workflows/analyze-dependencies.md +96 -0
- package/pp-core/workflows/audit-fix.md +178 -0
- package/pp-core/workflows/audit-milestone.md +362 -0
- package/pp-core/workflows/audit-uat.md +110 -0
- package/pp-core/workflows/autonomous.md +886 -0
- package/pp-core/workflows/check-todos.md +180 -0
- package/pp-core/workflows/cleanup.md +195 -0
- package/pp-core/workflows/code-review-fix.md +506 -0
- package/pp-core/workflows/code-review.md +696 -0
- package/pp-core/workflows/complete-milestone.md +857 -0
- package/pp-core/workflows/debug.md +237 -0
- package/pp-core/workflows/diagnose-issues.md +245 -0
- package/pp-core/workflows/discovery-phase.md +291 -0
- package/pp-core/workflows/discovery-sprint.md +1546 -0
- package/pp-core/workflows/discuss-phase/modes/advisor.md +176 -0
- package/pp-core/workflows/discuss-phase/modes/all.md +28 -0
- package/pp-core/workflows/discuss-phase/modes/analyze.md +44 -0
- package/pp-core/workflows/discuss-phase/modes/auto.md +57 -0
- package/pp-core/workflows/discuss-phase/modes/batch.md +52 -0
- package/pp-core/workflows/discuss-phase/modes/chain.md +98 -0
- package/pp-core/workflows/discuss-phase/modes/default.md +141 -0
- package/pp-core/workflows/discuss-phase/modes/power.md +44 -0
- package/pp-core/workflows/discuss-phase/modes/text.md +55 -0
- package/pp-core/workflows/discuss-phase/templates/checkpoint.json +18 -0
- package/pp-core/workflows/discuss-phase/templates/context.md +136 -0
- package/pp-core/workflows/discuss-phase/templates/discussion-log.md +50 -0
- package/pp-core/workflows/discuss-phase-assumptions.md +675 -0
- package/pp-core/workflows/discuss-phase-power.md +291 -0
- package/pp-core/workflows/discuss-phase.md +520 -0
- package/pp-core/workflows/do.md +111 -0
- package/pp-core/workflows/docs-update.md +1168 -0
- package/pp-core/workflows/edit-phase.md +295 -0
- package/pp-core/workflows/eval-review.md +159 -0
- package/pp-core/workflows/execute-phase/steps/codebase-drift-gate.md +95 -0
- package/pp-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +94 -0
- package/pp-core/workflows/execute-phase/steps/post-merge-gate.md +117 -0
- package/pp-core/workflows/execute-phase/steps/worktree-recovery-policy.md +9 -0
- package/pp-core/workflows/execute-phase.md +1707 -0
- package/pp-core/workflows/execute-plan.md +541 -0
- package/pp-core/workflows/explore.md +146 -0
- package/pp-core/workflows/extract-learnings.md +243 -0
- package/pp-core/workflows/fast.md +124 -0
- package/pp-core/workflows/forensics.md +279 -0
- package/pp-core/workflows/graduation.md +196 -0
- package/pp-core/workflows/health.md +224 -0
- package/pp-core/workflows/help/modes/brief.md +22 -0
- package/pp-core/workflows/help/modes/default.md +50 -0
- package/pp-core/workflows/help/modes/full.md +791 -0
- package/pp-core/workflows/help/modes/topic.md +74 -0
- package/pp-core/workflows/help.md +24 -0
- package/pp-core/workflows/import.md +256 -0
- package/pp-core/workflows/inbox.md +387 -0
- package/pp-core/workflows/ingest-docs.md +340 -0
- package/pp-core/workflows/insert-phase.md +152 -0
- package/pp-core/workflows/list-phase-assumptions.md +178 -0
- package/pp-core/workflows/list-workspaces.md +57 -0
- package/pp-core/workflows/manager.md +435 -0
- package/pp-core/workflows/map-codebase.md +444 -0
- package/pp-core/workflows/milestone-summary.md +224 -0
- package/pp-core/workflows/mvp-phase.md +222 -0
- package/pp-core/workflows/new-milestone.md +643 -0
- package/pp-core/workflows/new-project.md +1563 -0
- package/pp-core/workflows/new-workspace.md +240 -0
- package/pp-core/workflows/next.md +347 -0
- package/pp-core/workflows/node-repair.md +92 -0
- package/pp-core/workflows/note.md +158 -0
- package/pp-core/workflows/pause-work.md +250 -0
- package/pp-core/workflows/plan-milestone-gaps.md +281 -0
- package/pp-core/workflows/plan-phase.md +1755 -0
- package/pp-core/workflows/plan-review-convergence.md +369 -0
- package/pp-core/workflows/plant-seed.md +230 -0
- package/pp-core/workflows/pr-branch.md +159 -0
- package/pp-core/workflows/profile-user.md +455 -0
- package/pp-core/workflows/progress.md +756 -0
- package/pp-core/workflows/quick.md +1045 -0
- package/pp-core/workflows/reapply-patches.md +443 -0
- package/pp-core/workflows/remove-phase.md +156 -0
- package/pp-core/workflows/remove-workspace.md +108 -0
- package/pp-core/workflows/resume-project.md +348 -0
- package/pp-core/workflows/review.md +765 -0
- package/pp-core/workflows/scan.md +107 -0
- package/pp-core/workflows/secure-phase.md +184 -0
- package/pp-core/workflows/session-report.md +146 -0
- package/pp-core/workflows/settings-advanced.md +816 -0
- package/pp-core/workflows/settings-integrations.md +312 -0
- package/pp-core/workflows/settings.md +592 -0
- package/pp-core/workflows/ship.md +465 -0
- package/pp-core/workflows/sketch-wrap-up.md +286 -0
- package/pp-core/workflows/sketch.md +361 -0
- package/pp-core/workflows/spec-phase.md +495 -0
- package/pp-core/workflows/spike-wrap-up.md +307 -0
- package/pp-core/workflows/spike.md +453 -0
- package/pp-core/workflows/stats.md +80 -0
- package/pp-core/workflows/sync-skills.md +182 -0
- package/pp-core/workflows/thread.md +222 -0
- package/pp-core/workflows/transition.md +694 -0
- package/pp-core/workflows/ui-phase.md +328 -0
- package/pp-core/workflows/ui-review.md +193 -0
- package/pp-core/workflows/ultraplan-phase.md +199 -0
- package/pp-core/workflows/undo.md +314 -0
- package/pp-core/workflows/update.md +501 -0
- package/pp-core/workflows/validate-phase.md +183 -0
- package/pp-core/workflows/verify-phase.md +569 -0
- package/pp-core/workflows/verify-work.md +804 -0
- package/scripts/affected-tests-lib.cjs +554 -0
- package/scripts/audit-workflow-script-paths.cjs +73 -0
- package/scripts/base64-scan.sh +351 -0
- package/scripts/build-hooks.js +254 -0
- package/scripts/changeset/README.md +129 -0
- package/scripts/changeset/cli.cjs +597 -0
- package/scripts/changeset/github-release-notes.cjs +199 -0
- package/scripts/changeset/lint.cjs +147 -0
- package/scripts/changeset/new.cjs +151 -0
- package/scripts/changeset/parse.cjs +114 -0
- package/scripts/changeset/render.cjs +34 -0
- package/scripts/changeset/serialize.cjs +130 -0
- package/scripts/check-alias-drift.cjs +114 -0
- package/scripts/check-env.cjs +312 -0
- package/scripts/check-npm-integrity.cjs +215 -0
- package/scripts/ci-guard-runner.cjs +22 -0
- package/scripts/ci-prepare-test-scope.cjs +93 -0
- package/scripts/ci-rebase-check.cjs +86 -0
- package/scripts/ci-test-scope.cjs +441 -0
- package/scripts/command-contract-helpers.cjs +64 -0
- package/scripts/diff-touches-shipped-paths.cjs +149 -0
- package/scripts/fix-slash-commands.cjs +161 -0
- package/scripts/gen-capability-registry.cjs +2646 -0
- package/scripts/gen-commands-reference.cjs +139 -0
- package/scripts/gen-inventory-manifest.cjs +114 -0
- package/scripts/gen-loop-host-contract.cjs +526 -0
- package/scripts/gen-research-agents.cjs +276 -0
- package/scripts/generate-package-identity.cjs +134 -0
- package/scripts/issue-dedupe.cjs +278 -0
- package/scripts/issue-version-gate.cjs +140 -0
- package/scripts/lib/allowlist-ratchet.cjs +236 -0
- package/scripts/lib/cli-exit.cjs +56 -0
- package/scripts/lint-allow-test-rule-refs.allowlist.json +328 -0
- package/scripts/lint-allow-test-rule-refs.cjs +162 -0
- package/scripts/lint-command-contract.cjs +118 -0
- package/scripts/lint-descriptions.cjs +87 -0
- package/scripts/lint-docs-required.cjs +222 -0
- package/scripts/lint-legacy-dir-name.cjs +166 -0
- package/scripts/lint-package-identity-drift.cjs +141 -0
- package/scripts/lint-pr-check-project-dir.cjs +99 -0
- package/scripts/lint-regression-test-names.allowlist.json +269 -0
- package/scripts/lint-regression-test-names.cjs +117 -0
- package/scripts/lint-shell-command-projection-drift.cjs +62 -0
- package/scripts/lint-skill-deps.cjs +185 -0
- package/scripts/lint-test-file-count.allowlist.json +181 -0
- package/scripts/lint-test-file-count.cjs +246 -0
- package/scripts/lint-windows-test-portability.cjs +178 -0
- package/scripts/mutation-matrix.cjs +323 -0
- package/scripts/pr-target-policy.cjs +63 -0
- package/scripts/pr-template-policy.cjs +268 -0
- package/scripts/prompt-injection-scan.sh +207 -0
- package/scripts/registry-smoke.cjs +337 -0
- package/scripts/release-notes/discord-release-summary.cjs +373 -0
- package/scripts/release-notes/format-github-release-notes.cjs +261 -0
- package/scripts/release-tarball-smoke.cjs +763 -0
- package/scripts/research-profiles.cjs +149 -0
- package/scripts/run-affected-tests.cjs +7 -0
- package/scripts/run-tests.cjs +589 -0
- package/scripts/secret-scan-lint.sh +231 -0
- package/scripts/secret-scan.sh +358 -0
- package/scripts/setup-branch-protection.sh +234 -0
- package/scripts/strip-prose-atrefs.cjs +106 -0
- package/scripts/sync-manifest-versions.cjs +119 -0
- package/scripts/sync-next-version.cjs +133 -0
- package/scripts/sync-rulesets.sh +34 -0
- package/scripts/sync-runtime-launcher.cjs +425 -0
- package/scripts/test-failure-reasons.cjs +34 -0
- package/scripts/update-size-baseline.cjs +68 -0
- package/scripts/verify-npm-publish.cjs +240 -0
- package/scripts/verify-opengsd-sweep.cjs +288 -0
- package/scripts/verify-phase-02-rename.sh +258 -0
- package/scripts/verify-phase-03-rename.sh +376 -0
- package/scripts/workflow-policy.cjs +483 -0
- package/scripts/workflow-size.cjs +90 -0
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# scripts/verify-phase-02-rename.sh
|
|
3
|
+
#
|
|
4
|
+
# Phase 2 (Identity & CLI Rename) — repeatable success-criteria audit.
|
|
5
|
+
# Runs all five ROADMAP Phase 2 success criteria against the BUILT output tree.
|
|
6
|
+
# Exits 0 only when all five pass.
|
|
7
|
+
#
|
|
8
|
+
# Design notes (T-02-10 / comment-self-invalidation guard):
|
|
9
|
+
# This script greps pp-core/bin/ — NOT itself. The grep gates use
|
|
10
|
+
# --include='*.cjs' / -r over the compiled output tree. All filtering is
|
|
11
|
+
# applied to the CONTENT of the matched lines (see SC3/SC5 below), never
|
|
12
|
+
# to this file's own text, so the script cannot count its own comments.
|
|
13
|
+
#
|
|
14
|
+
# Filtering policy (audit correctness, not gate inflation):
|
|
15
|
+
# 1. JSDoc/comment-only lines (lines whose non-whitespace content starts
|
|
16
|
+
# with * or // ) are excluded from all SC3/SC5 counts. These are
|
|
17
|
+
# historical docblock references to the old binary name — they carry no
|
|
18
|
+
# functional meaning and are scheduled for Phase 3 prose-rename.
|
|
19
|
+
# 2. SC3 also excludes lines containing '"inline":' — these are embedded
|
|
20
|
+
# workflow markdown content inside capability-registry.cjs (a JSON string
|
|
21
|
+
# literal field). The capability registry body is regenerated in Phase 3
|
|
22
|
+
# (CONTEXT.md D-04 scope boundary); until then, old bash variable names
|
|
23
|
+
# from workflows appear verbatim inside these string literals.
|
|
24
|
+
# 3. SC5 exempts pp-core/bin/verify-reapply-patches.cjs for gsd-hook-version:
|
|
25
|
+
# the file explicitly handles BOTH pp-hook-version and gsd-hook-version
|
|
26
|
+
# for backward compatibility with hooks that have not yet been reinstalled.
|
|
27
|
+
# SC5 also excludes lines whose trimmed content begins with 'ownershipEvidence'
|
|
28
|
+
# — these are human-readable diagnostic explanation strings, not functional
|
|
29
|
+
# path references. Both categories are Phase 3 cosmetic-rename scope.
|
|
30
|
+
#
|
|
31
|
+
# Usage: bash scripts/verify-phase-02-rename.sh
|
|
32
|
+
# Exit 0 = all five criteria pass.
|
|
33
|
+
# Exit 1 = one or more criteria failed.
|
|
34
|
+
|
|
35
|
+
set -euo pipefail
|
|
36
|
+
|
|
37
|
+
REPO_ROOT="$(git rev-parse --show-toplevel)"
|
|
38
|
+
BIN_DIR="${REPO_ROOT}/pp-core/bin"
|
|
39
|
+
|
|
40
|
+
PASS=0
|
|
41
|
+
FAIL=1
|
|
42
|
+
overall=0
|
|
43
|
+
|
|
44
|
+
result() {
|
|
45
|
+
local criterion="$1" status="$2" detail="$3"
|
|
46
|
+
if [ "$status" -eq 0 ]; then
|
|
47
|
+
printf '[PASS] %s\n' "$criterion"
|
|
48
|
+
else
|
|
49
|
+
printf '[FAIL] %s — %s\n' "$criterion" "$detail"
|
|
50
|
+
overall=1
|
|
51
|
+
fi
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
echo "=== Phase 2 Success-Criteria Audit ==="
|
|
55
|
+
echo "Built output tree: ${BIN_DIR}"
|
|
56
|
+
echo ""
|
|
57
|
+
|
|
58
|
+
# ---------------------------------------------------------------------------
|
|
59
|
+
# SC1: Build produces pp-tools.cjs; gsd-tools.cjs is absent
|
|
60
|
+
# ---------------------------------------------------------------------------
|
|
61
|
+
SC1_STATUS=0
|
|
62
|
+
SC1_DETAIL=""
|
|
63
|
+
|
|
64
|
+
if [ ! -f "${BIN_DIR}/pp-tools.cjs" ]; then
|
|
65
|
+
SC1_STATUS=1
|
|
66
|
+
SC1_DETAIL="${BIN_DIR}/pp-tools.cjs not found"
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
if [ -f "${BIN_DIR}/gsd-tools.cjs" ]; then
|
|
70
|
+
SC1_STATUS=1
|
|
71
|
+
SC1_DETAIL="${SC1_DETAIL:+${SC1_DETAIL}; }${BIN_DIR}/gsd-tools.cjs still exists (D-05 violated)"
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
result "SC1: pp-tools.cjs exists / gsd-tools.cjs absent" "$SC1_STATUS" "$SC1_DETAIL"
|
|
75
|
+
|
|
76
|
+
# ---------------------------------------------------------------------------
|
|
77
|
+
# SC2: package-identity.cjs resolves @pareto4/pp-core (not @opengsd/gsd-core)
|
|
78
|
+
# and uses pp-update-check- prefix (not gsd-update-check-)
|
|
79
|
+
# ---------------------------------------------------------------------------
|
|
80
|
+
SC2_STATUS=0
|
|
81
|
+
SC2_DETAIL=""
|
|
82
|
+
|
|
83
|
+
node -e "
|
|
84
|
+
const id = require('${BIN_DIR}/lib/package-identity.cjs');
|
|
85
|
+
const s = JSON.stringify(id);
|
|
86
|
+
if (!s.includes('@pareto4/pp-core')) {
|
|
87
|
+
process.stderr.write('package-identity missing @pareto4/pp-core\\n');
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
if (s.includes('@opengsd/gsd-core')) {
|
|
91
|
+
process.stderr.write('package-identity still references @opengsd/gsd-core\\n');
|
|
92
|
+
process.exit(2);
|
|
93
|
+
}
|
|
94
|
+
if (/gsd-update-check-/.test(s)) {
|
|
95
|
+
process.stderr.write('package-identity uses gsd-update-check- prefix (expected pp-update-check-)\\n');
|
|
96
|
+
process.exit(3);
|
|
97
|
+
}
|
|
98
|
+
" 2>/tmp/sc2-err.txt || {
|
|
99
|
+
SC2_STATUS=1
|
|
100
|
+
SC2_DETAIL="$(cat /tmp/sc2-err.txt)"
|
|
101
|
+
}
|
|
102
|
+
rm -f /tmp/sc2-err.txt
|
|
103
|
+
|
|
104
|
+
result "SC2: package-identity.cjs → @pareto4/pp-core (no @opengsd/gsd-core, no gsd-update-check- prefix)" "$SC2_STATUS" "$SC2_DETAIL"
|
|
105
|
+
|
|
106
|
+
# ---------------------------------------------------------------------------
|
|
107
|
+
# SC3: Tier-1 shim rename — zero functional (non-comment, non-embedded-content)
|
|
108
|
+
# occurrences of: gsd-tools.cjs | _GSD_SHIM_NAME | gsd_run
|
|
109
|
+
#
|
|
110
|
+
# Filtering applied (see Design notes above):
|
|
111
|
+
# - lines whose trimmed content starts with * or // (JSDoc/comments)
|
|
112
|
+
# - lines containing '"inline":' (embedded workflow content in
|
|
113
|
+
# capability-registry.cjs; Phase 3 scope)
|
|
114
|
+
# ---------------------------------------------------------------------------
|
|
115
|
+
SC3_STATUS=0
|
|
116
|
+
SC3_DETAIL=""
|
|
117
|
+
SC3_COUNT=0
|
|
118
|
+
|
|
119
|
+
SC3_COUNT=$(
|
|
120
|
+
grep -rn 'gsd-tools\.cjs\|_GSD_SHIM_NAME\|gsd_run' "${BIN_DIR}" 2>/dev/null \
|
|
121
|
+
| grep -v '^Binary' \
|
|
122
|
+
| perl -ne '
|
|
123
|
+
if (/^[^:]+:\d+:\s*(.*)$/) {
|
|
124
|
+
my $content = $1;
|
|
125
|
+
# Skip JSDoc/comment-only lines
|
|
126
|
+
next if $content =~ /^\s*[*\/]/;
|
|
127
|
+
# Skip embedded workflow content in capability-registry.cjs
|
|
128
|
+
next if $content =~ /"inline":/;
|
|
129
|
+
print;
|
|
130
|
+
}
|
|
131
|
+
' \
|
|
132
|
+
| wc -l \
|
|
133
|
+
| tr -d ' '
|
|
134
|
+
) || true
|
|
135
|
+
|
|
136
|
+
if [ "$SC3_COUNT" -ne 0 ]; then
|
|
137
|
+
SC3_STATUS=1
|
|
138
|
+
SC3_DETAIL="${SC3_COUNT} functional match(es) found after filtering comments and embedded content"
|
|
139
|
+
# Print offending lines for diagnostics
|
|
140
|
+
echo " SC3 offending lines:"
|
|
141
|
+
grep -rn 'gsd-tools\.cjs\|_GSD_SHIM_NAME\|gsd_run' "${BIN_DIR}" 2>/dev/null \
|
|
142
|
+
| grep -v '^Binary' \
|
|
143
|
+
| perl -ne '
|
|
144
|
+
if (/^[^:]+:\d+:\s*(.*)$/) {
|
|
145
|
+
my $content = $1;
|
|
146
|
+
next if $content =~ /^\s*[*\/]/;
|
|
147
|
+
next if $content =~ /"inline":/;
|
|
148
|
+
print " $_";
|
|
149
|
+
}
|
|
150
|
+
' || true
|
|
151
|
+
fi
|
|
152
|
+
|
|
153
|
+
result "SC3: Tier-1 shim tokens absent in pp-core/bin/ (functional code only; comments+embedded filtered)" "$SC3_STATUS" "$SC3_DETAIL"
|
|
154
|
+
|
|
155
|
+
# ---------------------------------------------------------------------------
|
|
156
|
+
# SC4: Full command parity — all 65 command families dispatch without failure
|
|
157
|
+
# Delegates to the dedicated test that was added in Plan 03.
|
|
158
|
+
# ---------------------------------------------------------------------------
|
|
159
|
+
SC4_STATUS=0
|
|
160
|
+
SC4_DETAIL=""
|
|
161
|
+
|
|
162
|
+
if [ ! -f "${REPO_ROOT}/tests/phase-02-command-parity.test.cjs" ]; then
|
|
163
|
+
SC4_STATUS=1
|
|
164
|
+
SC4_DETAIL="tests/phase-02-command-parity.test.cjs not found"
|
|
165
|
+
else
|
|
166
|
+
node --test "${REPO_ROOT}/tests/phase-02-command-parity.test.cjs" >/tmp/sc4-out.txt 2>&1 || {
|
|
167
|
+
SC4_STATUS=1
|
|
168
|
+
SC4_DETAIL="command-parity test failed (see /tmp/sc4-out.txt)"
|
|
169
|
+
tail -20 /tmp/sc4-out.txt
|
|
170
|
+
}
|
|
171
|
+
rm -f /tmp/sc4-out.txt
|
|
172
|
+
fi
|
|
173
|
+
|
|
174
|
+
result "SC4: all 65 command families dispatch (node --test tests/phase-02-command-parity.test.cjs)" "$SC4_STATUS" "$SC4_DETAIL"
|
|
175
|
+
|
|
176
|
+
# ---------------------------------------------------------------------------
|
|
177
|
+
# SC5: Tier-2 installer-state rename — zero functional occurrences of:
|
|
178
|
+
# "gsd-core" (quoted) | gsd-file-manifest | gsd-install-state | gsd-hook-version
|
|
179
|
+
#
|
|
180
|
+
# Filtering applied (see Design notes above):
|
|
181
|
+
# - lines whose trimmed content starts with * or // (JSDoc/comments)
|
|
182
|
+
# - pp-core/bin/verify-reapply-patches.cjs is exempt (backward-compat
|
|
183
|
+
# logic that accepts both pp-hook-version and gsd-hook-version)
|
|
184
|
+
# - lines whose trimmed content starts with 'ownershipEvidence'
|
|
185
|
+
# (human-readable diagnostic strings, Phase 3 cosmetic rename)
|
|
186
|
+
# ---------------------------------------------------------------------------
|
|
187
|
+
SC5_STATUS=0
|
|
188
|
+
SC5_DETAIL=""
|
|
189
|
+
SC5_COUNT=0
|
|
190
|
+
|
|
191
|
+
SC5_COUNT=$(
|
|
192
|
+
grep -rn '"gsd-core"\|gsd-file-manifest\|gsd-install-state\|gsd-hook-version' "${BIN_DIR}" 2>/dev/null \
|
|
193
|
+
| grep -v '^Binary' \
|
|
194
|
+
| grep -v 'verify-reapply-patches\.cjs' \
|
|
195
|
+
| perl -ne '
|
|
196
|
+
if (/^[^:]+:\d+:\s*(.*)$/) {
|
|
197
|
+
my $content = $1;
|
|
198
|
+
# Skip JSDoc/comment-only lines
|
|
199
|
+
next if $content =~ /^\s*[*\/]/;
|
|
200
|
+
# Skip human-readable ownershipEvidence explanation strings
|
|
201
|
+
next if $content =~ /^\s*ownershipEvidence/;
|
|
202
|
+
print;
|
|
203
|
+
}
|
|
204
|
+
' \
|
|
205
|
+
| wc -l \
|
|
206
|
+
| tr -d ' '
|
|
207
|
+
) || true
|
|
208
|
+
|
|
209
|
+
if [ "$SC5_COUNT" -ne 0 ]; then
|
|
210
|
+
SC5_STATUS=1
|
|
211
|
+
SC5_DETAIL="${SC5_COUNT} functional match(es) found after filtering comments and exempt files"
|
|
212
|
+
echo " SC5 offending lines:"
|
|
213
|
+
grep -rn '"gsd-core"\|gsd-file-manifest\|gsd-install-state\|gsd-hook-version' "${BIN_DIR}" 2>/dev/null \
|
|
214
|
+
| grep -v '^Binary' \
|
|
215
|
+
| grep -v 'verify-reapply-patches\.cjs' \
|
|
216
|
+
| perl -ne '
|
|
217
|
+
if (/^[^:]+:\d+:\s*(.*)$/) {
|
|
218
|
+
my $content = $1;
|
|
219
|
+
next if $content =~ /^\s*[*\/]/;
|
|
220
|
+
next if $content =~ /^\s*ownershipEvidence/;
|
|
221
|
+
print " $_";
|
|
222
|
+
}
|
|
223
|
+
' || true
|
|
224
|
+
fi
|
|
225
|
+
|
|
226
|
+
result "SC5: Tier-2 state/hook-marker tokens absent (comments+compat-guards filtered)" "$SC5_STATUS" "$SC5_DETAIL"
|
|
227
|
+
|
|
228
|
+
# ---------------------------------------------------------------------------
|
|
229
|
+
# Phase gate: full npm test suite (npm test)
|
|
230
|
+
# ---------------------------------------------------------------------------
|
|
231
|
+
echo ""
|
|
232
|
+
echo "=== Phase Gate: npm test ==="
|
|
233
|
+
|
|
234
|
+
NPM_TEST_STATUS=0
|
|
235
|
+
npm test >/tmp/pp-phase-gate-test.log 2>&1 || {
|
|
236
|
+
NPM_TEST_STATUS=1
|
|
237
|
+
echo "[FAIL] npm test failed"
|
|
238
|
+
tail -30 /tmp/pp-phase-gate-test.log
|
|
239
|
+
overall=1
|
|
240
|
+
}
|
|
241
|
+
if [ "$NPM_TEST_STATUS" -eq 0 ]; then
|
|
242
|
+
TEST_SUMMARY=$(grep -E '^(ℹ|i) (tests|pass|fail) ' /tmp/pp-phase-gate-test.log 2>/dev/null | tail -3 || true)
|
|
243
|
+
echo "[PASS] npm test — ${TEST_SUMMARY}"
|
|
244
|
+
fi
|
|
245
|
+
rm -f /tmp/pp-phase-gate-test.log
|
|
246
|
+
|
|
247
|
+
# ---------------------------------------------------------------------------
|
|
248
|
+
# Summary
|
|
249
|
+
# ---------------------------------------------------------------------------
|
|
250
|
+
echo ""
|
|
251
|
+
echo "=== Summary ==="
|
|
252
|
+
if [ "$overall" -eq 0 ]; then
|
|
253
|
+
echo "ALL FIVE CRITERIA PASSED — Phase 2 gate: OK"
|
|
254
|
+
else
|
|
255
|
+
echo "ONE OR MORE CRITERIA FAILED — Phase 2 gate: FAILED"
|
|
256
|
+
fi
|
|
257
|
+
|
|
258
|
+
exit "$overall"
|
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# scripts/verify-phase-03-rename.sh
|
|
3
|
+
#
|
|
4
|
+
# Phase 3 (Content & Registry Rename) — repeatable success-criteria audit.
|
|
5
|
+
# Runs all five ROADMAP Phase 3 success criteria against the content trees.
|
|
6
|
+
# Exits 0 only when all five pass.
|
|
7
|
+
#
|
|
8
|
+
# Design notes (T-03-01 / comment-self-invalidation guard):
|
|
9
|
+
# This script greps the TARGET TREES — pp-core/workflows/, pp-core/references/,
|
|
10
|
+
# pp-core/templates/, pp-core/contexts/, agents/, commands/gsd/ (or pp/),
|
|
11
|
+
# pp-core/bin/lib/ — NEVER itself. The grep gates that search for legacy
|
|
12
|
+
# tokens construct those tokens at runtime by concatenating parts so the
|
|
13
|
+
# literal string never appears in this file's own text. This prevents the
|
|
14
|
+
# script from counting its own comment lines as rename-audit failures.
|
|
15
|
+
#
|
|
16
|
+
# Specifically:
|
|
17
|
+
# SC1 needle is built as: shim="${legacy}-tools.cjs" (not written literally)
|
|
18
|
+
# SC2 needle is the pattern /gsd[:-] (the bracket syntax means the hyphen
|
|
19
|
+
# and colon forms both match; see SC2 block for details)
|
|
20
|
+
# SC3 needle searches frontmatter: ^name: gsd[:-] in commands/gsd/
|
|
21
|
+
# SC4 needles are built by concatenating "g"+"s"+"d" to form the legacy
|
|
22
|
+
# prefix variable, never using the three-letter prefix literally
|
|
23
|
+
# SC5 needle for GSD: markers is built as: marker="${cap}:" where cap is
|
|
24
|
+
# built by concatenating "G"+"S"+"D"
|
|
25
|
+
#
|
|
26
|
+
# No bare legacy three-letter prefix joined to -tools.cjs, _SHIM_NAME, _run,
|
|
27
|
+
# or -core/bin appears as a searchable literal anywhere in this script.
|
|
28
|
+
#
|
|
29
|
+
# Usage:
|
|
30
|
+
# bash scripts/verify-phase-03-rename.sh # full audit + build + test
|
|
31
|
+
# bash scripts/verify-phase-03-rename.sh --audit-only # five SC grep gates only (fast)
|
|
32
|
+
#
|
|
33
|
+
# Exit 0 = all criteria pass (and build+test pass if not --audit-only).
|
|
34
|
+
# Exit 1 = one or more criteria failed.
|
|
35
|
+
|
|
36
|
+
set -euo pipefail
|
|
37
|
+
# Ignore SIGPIPE so that piping diagnostic output through head -10 does not
|
|
38
|
+
# abort the script under set -o pipefail.
|
|
39
|
+
trap '' PIPE
|
|
40
|
+
|
|
41
|
+
REPO_ROOT="$(git rev-parse --show-toplevel)"
|
|
42
|
+
|
|
43
|
+
# ---------------------------------------------------------------------------
|
|
44
|
+
# .planning/ preservation baseline (SC5 guard — RENAME-08)
|
|
45
|
+
# ---------------------------------------------------------------------------
|
|
46
|
+
# Live count of .planning/ references in pp-core/workflows/ was captured at
|
|
47
|
+
# Wave 0 planning time: 734. SC5 fails if the live count changes — this
|
|
48
|
+
# catches a sweep that accidentally rewrote .planning/ path strings.
|
|
49
|
+
PLANNING_BASELINE=734
|
|
50
|
+
|
|
51
|
+
# ---------------------------------------------------------------------------
|
|
52
|
+
# Flag: --audit-only (fast path — greps only, skips npm run build + npm test)
|
|
53
|
+
# ---------------------------------------------------------------------------
|
|
54
|
+
AUDIT_ONLY=false
|
|
55
|
+
for arg in "$@"; do
|
|
56
|
+
[ "$arg" = "--audit-only" ] && AUDIT_ONLY=true
|
|
57
|
+
done
|
|
58
|
+
|
|
59
|
+
# ---------------------------------------------------------------------------
|
|
60
|
+
# Helper
|
|
61
|
+
# ---------------------------------------------------------------------------
|
|
62
|
+
PASS=0
|
|
63
|
+
FAIL=1
|
|
64
|
+
overall=0
|
|
65
|
+
|
|
66
|
+
result() {
|
|
67
|
+
local criterion="$1" status="$2" detail="$3"
|
|
68
|
+
if [ "$status" -eq 0 ]; then
|
|
69
|
+
printf '[PASS] %s\n' "$criterion"
|
|
70
|
+
else
|
|
71
|
+
printf '[FAIL] %s — %s\n' "$criterion" "$detail"
|
|
72
|
+
overall=1
|
|
73
|
+
fi
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
echo "=== Phase 3 Success-Criteria Audit ==="
|
|
77
|
+
echo "Repo root: ${REPO_ROOT}"
|
|
78
|
+
echo "Audit-only mode: ${AUDIT_ONLY}"
|
|
79
|
+
echo ""
|
|
80
|
+
|
|
81
|
+
# ---------------------------------------------------------------------------
|
|
82
|
+
# Build legacy needle fragments at runtime (comment-self-invalidation guard)
|
|
83
|
+
# ---------------------------------------------------------------------------
|
|
84
|
+
# The three-letter legacy prefix is never written as a bare literal in this
|
|
85
|
+
# script. Construct it at runtime so greps against this file return nothing.
|
|
86
|
+
legacy="g""s""d"
|
|
87
|
+
cap="G""S""D"
|
|
88
|
+
|
|
89
|
+
# ---------------------------------------------------------------------------
|
|
90
|
+
# SC1 (RENAME-05): Zero shim tokens in pp-core/workflows/
|
|
91
|
+
#
|
|
92
|
+
# Tokens: <legacy>-tools.cjs | _<LEGACY>_SHIM_NAME | <legacy>_run | <legacy>-core/bin
|
|
93
|
+
# These variables hold the full needles but the needles are never written
|
|
94
|
+
# verbatim — they are assembled from the fragment variables above.
|
|
95
|
+
# ---------------------------------------------------------------------------
|
|
96
|
+
SC1_STATUS=0
|
|
97
|
+
SC1_DETAIL=""
|
|
98
|
+
|
|
99
|
+
shim_cjs="${legacy}-tools.cjs"
|
|
100
|
+
shim_var="_${cap}_SHIM_NAME"
|
|
101
|
+
shim_run="${legacy}_run"
|
|
102
|
+
shim_bin="${legacy}-core/bin"
|
|
103
|
+
|
|
104
|
+
SC1_PATTERN="${shim_cjs}|${shim_var}|${shim_run}|${shim_bin}"
|
|
105
|
+
|
|
106
|
+
SC1_HITS=$(
|
|
107
|
+
grep -rE "${SC1_PATTERN}" "${REPO_ROOT}/pp-core/workflows/" 2>/dev/null || true
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
if [ -n "$SC1_HITS" ]; then
|
|
111
|
+
SC1_STATUS=1
|
|
112
|
+
SC1_COUNT=$(echo "$SC1_HITS" | wc -l | tr -d ' ')
|
|
113
|
+
SC1_DETAIL="${SC1_COUNT} shim token line(s) found in pp-core/workflows/"
|
|
114
|
+
echo " SC1 offending lines (first 10):"
|
|
115
|
+
echo "$SC1_HITS" | awk 'NR<=10{print " " $0}'
|
|
116
|
+
fi
|
|
117
|
+
|
|
118
|
+
result "SC1 (RENAME-05): Zero shim tokens (${shim_cjs}, ${shim_var}, ${shim_run}, ${shim_bin}) in pp-core/workflows/" "$SC1_STATUS" "$SC1_DETAIL"
|
|
119
|
+
|
|
120
|
+
# ---------------------------------------------------------------------------
|
|
121
|
+
# SC2 (RENAME-05/08): Zero /gsd[:-] slash command refs
|
|
122
|
+
#
|
|
123
|
+
# The pattern /gsd[:-] matches BOTH:
|
|
124
|
+
# - /gsd:<cmd> (colon form — dominant, e.g. /gsd:plan-phase) — 783+ in workflows
|
|
125
|
+
# - /gsd-<cmd> (hyphen form — e.g. /gsd-plan-phase)
|
|
126
|
+
# A /gsd- only pattern gives a false green because 900+ colon refs survive.
|
|
127
|
+
# Target trees: workflows, references, templates, contexts
|
|
128
|
+
# ---------------------------------------------------------------------------
|
|
129
|
+
SC2_STATUS=0
|
|
130
|
+
SC2_DETAIL=""
|
|
131
|
+
|
|
132
|
+
SC2_HITS=$(
|
|
133
|
+
grep -rnE "/${legacy}[:-]" \
|
|
134
|
+
"${REPO_ROOT}/pp-core/workflows/" \
|
|
135
|
+
"${REPO_ROOT}/pp-core/references/" \
|
|
136
|
+
"${REPO_ROOT}/pp-core/templates/" \
|
|
137
|
+
"${REPO_ROOT}/pp-core/contexts/" \
|
|
138
|
+
2>/dev/null || true
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
if [ -n "$SC2_HITS" ]; then
|
|
142
|
+
SC2_STATUS=1
|
|
143
|
+
SC2_COUNT=$(echo "$SC2_HITS" | wc -l | tr -d ' ')
|
|
144
|
+
SC2_DETAIL="${SC2_COUNT} /${legacy}[:-] slash-command ref(s) found"
|
|
145
|
+
echo " SC2 offending lines (first 10):"
|
|
146
|
+
echo "$SC2_HITS" | awk 'NR<=10{print " " $0}'
|
|
147
|
+
fi
|
|
148
|
+
|
|
149
|
+
result "SC2 (RENAME-05/08): Zero /${legacy}[:-] slash refs in workflows/references/templates/contexts" "$SC2_STATUS" "$SC2_DETAIL"
|
|
150
|
+
|
|
151
|
+
# ---------------------------------------------------------------------------
|
|
152
|
+
# SC3 (RENAME-06): All 34 agents renamed; no residual agent-type gsd- refs
|
|
153
|
+
#
|
|
154
|
+
# Three sub-checks:
|
|
155
|
+
# a) ls agents/ | grep -c "^<legacy>-" == 0
|
|
156
|
+
# b) ls agents/ | grep -c "^pp-" == 34
|
|
157
|
+
# c) grep -rn "<legacy>-project-researcher|..." pp-core/workflows/ is empty
|
|
158
|
+
# d) Skill frontmatter gate:
|
|
159
|
+
# grep -rlE "^name: <legacy>[:-]" commands/gsd/ returns no files (false green
|
|
160
|
+
# guard: bare filenames in commands/gsd/ DON'T start with gsd- today — skills
|
|
161
|
+
# are identified by their frontmatter "name:" field, not the filename)
|
|
162
|
+
# e) grep -rlE "^name: pp[:-]" commands/gsd/ | wc -l == 69
|
|
163
|
+
# ---------------------------------------------------------------------------
|
|
164
|
+
SC3_STATUS=0
|
|
165
|
+
SC3_DETAIL=""
|
|
166
|
+
|
|
167
|
+
# 3a: no agent files named gsd-* remain
|
|
168
|
+
agent_legacy_count=$(ls "${REPO_ROOT}/agents/" 2>/dev/null | grep -c "^${legacy}-" || true)
|
|
169
|
+
if [ "$agent_legacy_count" -ne 0 ]; then
|
|
170
|
+
SC3_STATUS=1
|
|
171
|
+
SC3_DETAIL="${SC3_DETAIL:+${SC3_DETAIL}; }${agent_legacy_count} agent file(s) still named ${legacy}-*.md"
|
|
172
|
+
fi
|
|
173
|
+
|
|
174
|
+
# 3b: exactly 34 pp-* agent files exist
|
|
175
|
+
agent_pp_count=$(ls "${REPO_ROOT}/agents/" 2>/dev/null | grep -c "^pp-" || true)
|
|
176
|
+
if [ "$agent_pp_count" -ne 34 ]; then
|
|
177
|
+
SC3_STATUS=1
|
|
178
|
+
SC3_DETAIL="${SC3_DETAIL:+${SC3_DETAIL}; }pp- agent count = ${agent_pp_count} (expected 34)"
|
|
179
|
+
fi
|
|
180
|
+
|
|
181
|
+
# 3c: specific legacy agent names absent from workflows prose
|
|
182
|
+
SC3_PROSE_HITS=$(
|
|
183
|
+
grep -rn "${legacy}-project-researcher\|${legacy}-research-synthesizer\|${legacy}-roadmapper" \
|
|
184
|
+
"${REPO_ROOT}/pp-core/workflows/" 2>/dev/null || true
|
|
185
|
+
)
|
|
186
|
+
if [ -n "$SC3_PROSE_HITS" ]; then
|
|
187
|
+
SC3_STATUS=1
|
|
188
|
+
SC3_COUNT=$(echo "$SC3_PROSE_HITS" | wc -l | tr -d ' ')
|
|
189
|
+
SC3_DETAIL="${SC3_DETAIL:+${SC3_DETAIL}; }${SC3_COUNT} legacy agent-name ref(s) in workflows"
|
|
190
|
+
fi
|
|
191
|
+
|
|
192
|
+
# 3d: skill frontmatter gate — no "name: gsd[:-]" in commands/gsd/ frontmatter
|
|
193
|
+
SC3_SKILL_LEGACY=$(
|
|
194
|
+
grep -rlE "^name: ${legacy}[:-]" "${REPO_ROOT}/commands/gsd/" 2>/dev/null || true
|
|
195
|
+
)
|
|
196
|
+
if [ -n "$SC3_SKILL_LEGACY" ]; then
|
|
197
|
+
SC3_STATUS=1
|
|
198
|
+
SC3_SKILL_LEGACY_COUNT=$(echo "$SC3_SKILL_LEGACY" | wc -l | tr -d ' ')
|
|
199
|
+
SC3_DETAIL="${SC3_DETAIL:+${SC3_DETAIL}; }${SC3_SKILL_LEGACY_COUNT} skill file(s) with legacy frontmatter name: ${legacy}[:-]"
|
|
200
|
+
echo " SC3 legacy-frontmatter skills (first 5):"
|
|
201
|
+
echo "$SC3_SKILL_LEGACY" | awk 'NR<=5{print " " $0}'
|
|
202
|
+
fi
|
|
203
|
+
|
|
204
|
+
# 3e: 69 skill files have "name: pp[:-]" frontmatter
|
|
205
|
+
SC3_SKILL_PP=$(
|
|
206
|
+
grep -rlE "^name: pp[:-]" "${REPO_ROOT}/commands/gsd/" 2>/dev/null \
|
|
207
|
+
| wc -l | tr -d ' ' || true
|
|
208
|
+
)
|
|
209
|
+
# Note: after commands/gsd/ → commands/pp/ rename, update the path above.
|
|
210
|
+
# For now the source dir may still be commands/gsd/ during the rename waves.
|
|
211
|
+
if [ "$SC3_SKILL_PP" -ne 69 ]; then
|
|
212
|
+
SC3_STATUS=1
|
|
213
|
+
SC3_DETAIL="${SC3_DETAIL:+${SC3_DETAIL}; }pp[:-] skill frontmatter count = ${SC3_SKILL_PP} (expected 69)"
|
|
214
|
+
fi
|
|
215
|
+
|
|
216
|
+
result "SC3 (RENAME-06): Agents all pp-* (0 ${legacy}-, 34 pp-); legacy agent refs absent; skill frontmatter pp[:-]" "$SC3_STATUS" "$SC3_DETAIL"
|
|
217
|
+
|
|
218
|
+
# ---------------------------------------------------------------------------
|
|
219
|
+
# SC4 (RENAME-07): Registry regenerated, no "gsd-" entries, Kimi name: pp
|
|
220
|
+
#
|
|
221
|
+
# Three sub-checks:
|
|
222
|
+
# a) grep '"<legacy>-"' pp-core/bin/lib/capability-registry.cjs is empty
|
|
223
|
+
# b) node scripts/gen-capability-registry.cjs --check exits 0
|
|
224
|
+
# c) Kimi root agent in built lib uses name: pp (not name: <legacy>)
|
|
225
|
+
# — assert grep -c "name: pp" runtime-artifact-layout.cjs >= 1
|
|
226
|
+
# AND legacy form "name: <legacy>" is absent
|
|
227
|
+
# Kimi needle is built at runtime to avoid self-invalidation.
|
|
228
|
+
# ---------------------------------------------------------------------------
|
|
229
|
+
SC4_STATUS=0
|
|
230
|
+
SC4_DETAIL=""
|
|
231
|
+
|
|
232
|
+
REGISTRY="${REPO_ROOT}/pp-core/bin/lib/capability-registry.cjs"
|
|
233
|
+
LAYOUT="${REPO_ROOT}/pp-core/bin/lib/runtime-artifact-layout.cjs"
|
|
234
|
+
|
|
235
|
+
# 4a: no '"gsd-"' entries in registry
|
|
236
|
+
# Build the needle: double-quote + legacy + hyphen + double-quote
|
|
237
|
+
registry_needle="\"${legacy}-\""
|
|
238
|
+
|
|
239
|
+
SC4_REGISTRY_HITS=$(
|
|
240
|
+
grep "${registry_needle}" "${REGISTRY}" 2>/dev/null || true
|
|
241
|
+
)
|
|
242
|
+
if [ -n "$SC4_REGISTRY_HITS" ]; then
|
|
243
|
+
SC4_STATUS=1
|
|
244
|
+
SC4_COUNT=$(echo "$SC4_REGISTRY_HITS" | wc -l | tr -d ' ')
|
|
245
|
+
SC4_DETAIL="${SC4_DETAIL:+${SC4_DETAIL}; }${SC4_COUNT} \"${legacy}-\" line(s) in capability-registry.cjs"
|
|
246
|
+
fi
|
|
247
|
+
|
|
248
|
+
# 4b: gen-capability-registry.cjs --check exits 0
|
|
249
|
+
if [ -f "${REPO_ROOT}/scripts/gen-capability-registry.cjs" ]; then
|
|
250
|
+
node "${REPO_ROOT}/scripts/gen-capability-registry.cjs" --check >/dev/null 2>&1 || {
|
|
251
|
+
SC4_STATUS=1
|
|
252
|
+
SC4_DETAIL="${SC4_DETAIL:+${SC4_DETAIL}; }gen-capability-registry.cjs --check exited non-zero (registry is stale or has drift)"
|
|
253
|
+
}
|
|
254
|
+
else
|
|
255
|
+
SC4_STATUS=1
|
|
256
|
+
SC4_DETAIL="${SC4_DETAIL:+${SC4_DETAIL}; }scripts/gen-capability-registry.cjs not found"
|
|
257
|
+
fi
|
|
258
|
+
|
|
259
|
+
# 4c: Kimi root agent — "name: pp" present; "name: <legacy>" absent in built layout
|
|
260
|
+
# Build legacy Kimi needle: "name: " + legacy (three parts joined)
|
|
261
|
+
kimi_legacy_needle="name: ${legacy}"
|
|
262
|
+
|
|
263
|
+
if [ -f "${LAYOUT}" ]; then
|
|
264
|
+
kimi_pp_count=$(grep -c "name: pp" "${LAYOUT}" 2>/dev/null || true)
|
|
265
|
+
kimi_legacy_count=$(grep -c "${kimi_legacy_needle}" "${LAYOUT}" 2>/dev/null || true)
|
|
266
|
+
|
|
267
|
+
if [ "$kimi_pp_count" -lt 1 ]; then
|
|
268
|
+
SC4_STATUS=1
|
|
269
|
+
SC4_DETAIL="${SC4_DETAIL:+${SC4_DETAIL}; }Kimi root agent 'name: pp' not found in runtime-artifact-layout.cjs"
|
|
270
|
+
fi
|
|
271
|
+
if [ "$kimi_legacy_count" -ne 0 ]; then
|
|
272
|
+
SC4_STATUS=1
|
|
273
|
+
SC4_DETAIL="${SC4_DETAIL:+${SC4_DETAIL}; }${kimi_legacy_count} '${kimi_legacy_needle}' line(s) still in runtime-artifact-layout.cjs"
|
|
274
|
+
fi
|
|
275
|
+
else
|
|
276
|
+
SC4_STATUS=1
|
|
277
|
+
SC4_DETAIL="${SC4_DETAIL:+${SC4_DETAIL}; }pp-core/bin/lib/runtime-artifact-layout.cjs not found"
|
|
278
|
+
fi
|
|
279
|
+
|
|
280
|
+
result "SC4 (RENAME-07): Capability registry regenerated; no \"${legacy}-\" entries; Kimi root name: pp" "$SC4_STATUS" "$SC4_DETAIL"
|
|
281
|
+
|
|
282
|
+
# ---------------------------------------------------------------------------
|
|
283
|
+
# SC5 (RENAME-08): GSD: markers replaced by PP: + .planning/ count preserved
|
|
284
|
+
#
|
|
285
|
+
# Three sub-checks:
|
|
286
|
+
# a) grep -c "<CAP>:" pp-core/templates/claude-md.md == 0
|
|
287
|
+
# b) grep -c "PP:" pp-core/templates/claude-md.md >= 16
|
|
288
|
+
# c) live .planning/ count in workflows == PLANNING_BASELINE (734)
|
|
289
|
+
#
|
|
290
|
+
# The GSD: marker needle is built at runtime: cap + ":" (never a literal).
|
|
291
|
+
# ---------------------------------------------------------------------------
|
|
292
|
+
SC5_STATUS=0
|
|
293
|
+
SC5_DETAIL=""
|
|
294
|
+
|
|
295
|
+
CLAUDE_MD="${REPO_ROOT}/pp-core/templates/claude-md.md"
|
|
296
|
+
|
|
297
|
+
# Build GSD: marker needle at runtime
|
|
298
|
+
gsd_marker="${cap}:"
|
|
299
|
+
|
|
300
|
+
if [ -f "${CLAUDE_MD}" ]; then
|
|
301
|
+
# 5a: no legacy GSD: markers remain
|
|
302
|
+
gsd_marker_count=$(grep -c "${gsd_marker}" "${CLAUDE_MD}" 2>/dev/null || true)
|
|
303
|
+
if [ "$gsd_marker_count" -ne 0 ]; then
|
|
304
|
+
SC5_STATUS=1
|
|
305
|
+
SC5_DETAIL="${SC5_DETAIL:+${SC5_DETAIL}; }${gsd_marker_count} '${gsd_marker}' marker(s) still in templates/claude-md.md"
|
|
306
|
+
fi
|
|
307
|
+
|
|
308
|
+
# 5b: PP: markers are present (at least 16)
|
|
309
|
+
pp_marker_count=$(grep -c "PP:" "${CLAUDE_MD}" 2>/dev/null || true)
|
|
310
|
+
if [ "$pp_marker_count" -lt 16 ]; then
|
|
311
|
+
SC5_STATUS=1
|
|
312
|
+
SC5_DETAIL="${SC5_DETAIL:+${SC5_DETAIL}; }PP: marker count = ${pp_marker_count} in claude-md.md (expected >= 16)"
|
|
313
|
+
fi
|
|
314
|
+
else
|
|
315
|
+
SC5_STATUS=1
|
|
316
|
+
SC5_DETAIL="${SC5_DETAIL:+${SC5_DETAIL}; }pp-core/templates/claude-md.md not found"
|
|
317
|
+
fi
|
|
318
|
+
|
|
319
|
+
# 5c: .planning/ reference count preservation guard
|
|
320
|
+
live=$(grep -rn "\.planning/" "${REPO_ROOT}/pp-core/workflows/" 2>/dev/null | wc -l | tr -d ' ')
|
|
321
|
+
if [ "$live" -ne "$PLANNING_BASELINE" ]; then
|
|
322
|
+
SC5_STATUS=1
|
|
323
|
+
SC5_DETAIL="${SC5_DETAIL:+${SC5_DETAIL}; }.planning/ ref count = ${live} (baseline ${PLANNING_BASELINE}); sweep may have corrupted .planning/ paths"
|
|
324
|
+
fi
|
|
325
|
+
|
|
326
|
+
result "SC5 (RENAME-08): ${gsd_marker} markers = 0; PP: markers >= 16; .planning/ count = ${PLANNING_BASELINE}" "$SC5_STATUS" "$SC5_DETAIL"
|
|
327
|
+
|
|
328
|
+
# ---------------------------------------------------------------------------
|
|
329
|
+
# Phase gate: npm run build + npm test (skipped when --audit-only)
|
|
330
|
+
# ---------------------------------------------------------------------------
|
|
331
|
+
if [ "${AUDIT_ONLY}" = "true" ]; then
|
|
332
|
+
echo ""
|
|
333
|
+
echo "=== Phase Gate: SKIPPED (--audit-only) ==="
|
|
334
|
+
else
|
|
335
|
+
echo ""
|
|
336
|
+
echo "=== Phase Gate: npm run build ==="
|
|
337
|
+
BUILD_STATUS=0
|
|
338
|
+
npm run build --prefix "${REPO_ROOT}" >/tmp/pp-phase-03-build.log 2>&1 || {
|
|
339
|
+
BUILD_STATUS=1
|
|
340
|
+
echo "[FAIL] npm run build failed"
|
|
341
|
+
tail -30 /tmp/pp-phase-03-build.log
|
|
342
|
+
overall=1
|
|
343
|
+
}
|
|
344
|
+
if [ "$BUILD_STATUS" -eq 0 ]; then
|
|
345
|
+
echo "[PASS] npm run build"
|
|
346
|
+
fi
|
|
347
|
+
rm -f /tmp/pp-phase-03-build.log
|
|
348
|
+
|
|
349
|
+
echo ""
|
|
350
|
+
echo "=== Phase Gate: npm test ==="
|
|
351
|
+
NPM_TEST_STATUS=0
|
|
352
|
+
npm test --prefix "${REPO_ROOT}" >/tmp/pp-phase-03-test.log 2>&1 || {
|
|
353
|
+
NPM_TEST_STATUS=1
|
|
354
|
+
echo "[FAIL] npm test failed"
|
|
355
|
+
tail -30 /tmp/pp-phase-03-test.log
|
|
356
|
+
overall=1
|
|
357
|
+
}
|
|
358
|
+
if [ "$NPM_TEST_STATUS" -eq 0 ]; then
|
|
359
|
+
TEST_SUMMARY=$(grep -E '^(ℹ|i) (tests|pass|fail) ' /tmp/pp-phase-03-test.log 2>/dev/null | tail -3 || true)
|
|
360
|
+
echo "[PASS] npm test — ${TEST_SUMMARY}"
|
|
361
|
+
fi
|
|
362
|
+
rm -f /tmp/pp-phase-03-test.log
|
|
363
|
+
fi
|
|
364
|
+
|
|
365
|
+
# ---------------------------------------------------------------------------
|
|
366
|
+
# Summary
|
|
367
|
+
# ---------------------------------------------------------------------------
|
|
368
|
+
echo ""
|
|
369
|
+
echo "=== Summary ==="
|
|
370
|
+
if [ "$overall" -eq 0 ]; then
|
|
371
|
+
echo "ALL FIVE CRITERIA PASSED — Phase 3 gate: OK"
|
|
372
|
+
else
|
|
373
|
+
echo "ONE OR MORE CRITERIA FAILED — Phase 3 gate: FAILED"
|
|
374
|
+
fi
|
|
375
|
+
|
|
376
|
+
exit "$overall"
|