@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,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Manifest-backed validate subcommand router.
|
|
4
|
+
* Keeps gsd-tools.cjs thin while preserving existing command semantics.
|
|
5
|
+
*
|
|
6
|
+
* Phase 6: validate.consistency, validate.health, validate.agents are
|
|
7
|
+
* dispatched via executeForCjs when the SDK is available. CJS fallback
|
|
8
|
+
* retained when:
|
|
9
|
+
* - GSD_WORKSTREAM is active (workstream-scoped requests fall through to CJS).
|
|
10
|
+
* - SDK is unavailable (build not present).
|
|
11
|
+
*
|
|
12
|
+
* CJS-only subcommands:
|
|
13
|
+
* - context: complex inline logic using classifyContextUtilization and
|
|
14
|
+
* output formatting that has no direct SDK counterpart. Remains CJS-native.
|
|
15
|
+
*
|
|
16
|
+
* SDK-only (unsupported in CJS router): none.
|
|
17
|
+
*
|
|
18
|
+
* ADR-457 build-at-publish: the hand-written bin/lib/validate-command-router.cjs
|
|
19
|
+
* collapsed to a TypeScript source of truth. Behaviour is preserved byte-for-behaviour
|
|
20
|
+
* from the prior hand-written .cjs; only types are added.
|
|
21
|
+
*/
|
|
22
|
+
const command_aliases_cjs_1 = require("./command-aliases.cjs");
|
|
23
|
+
const runtime_slash_cjs_1 = require("./runtime-slash.cjs");
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
25
|
+
const cjsCommandRouterAdapter = require("./cjs-command-router-adapter.cjs");
|
|
26
|
+
const { routeCjsCommandFamily } = cjsCommandRouterAdapter;
|
|
27
|
+
const command_arg_projection_cjs_1 = require("./command-arg-projection.cjs");
|
|
28
|
+
const context_utilization_cjs_1 = require("./context-utilization.cjs");
|
|
29
|
+
// ─── Implementation ───────────────────────────────────────────────────────────
|
|
30
|
+
function routeValidateCommand({ verify, args, cwd, raw, output: outputFn, error }) {
|
|
31
|
+
routeCjsCommandFamily({
|
|
32
|
+
args,
|
|
33
|
+
subcommands: command_aliases_cjs_1.VALIDATE_SUBCOMMANDS,
|
|
34
|
+
unsupported: {},
|
|
35
|
+
error,
|
|
36
|
+
unknownMessage: (_subcommand, available) => `Unknown validate subcommand. Available: ${available.join(', ')}`,
|
|
37
|
+
handlers: {
|
|
38
|
+
consistency: () => verify.cmdValidateConsistency(cwd, raw),
|
|
39
|
+
// Keep health on CJS for now so fix hints are rendered via runtime-slash
|
|
40
|
+
// helpers (codex expects $gsd-* command shape).
|
|
41
|
+
health: () => {
|
|
42
|
+
const repairFlag = args.includes('--repair');
|
|
43
|
+
const backfillFlag = args.includes('--backfill');
|
|
44
|
+
verify.cmdValidateHealth(cwd, { repair: repairFlag, backfill: backfillFlag }, raw);
|
|
45
|
+
},
|
|
46
|
+
agents: () => verify.cmdValidateAgents(cwd, raw),
|
|
47
|
+
// context: CJS-only — complex inline logic using classifyContextUtilization
|
|
48
|
+
// with custom output formatting that has no direct SDK counterpart.
|
|
49
|
+
context: () => {
|
|
50
|
+
const opts = (0, command_arg_projection_cjs_1.parseNamedArgs)(args, ['tokens-used', 'context-window']);
|
|
51
|
+
if (opts['tokens-used'] === null) {
|
|
52
|
+
error('--tokens-used <integer> is required for `validate context`');
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (opts['context-window'] === null) {
|
|
56
|
+
error('--context-window <integer> is required for `validate context`');
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const threadCmd = String((0, runtime_slash_cjs_1.formatGsdSlash)('thread', (0, runtime_slash_cjs_1.resolveRuntime)(cwd)));
|
|
60
|
+
const RECOMMENDATIONS = {
|
|
61
|
+
[context_utilization_cjs_1.STATES.HEALTHY]: null,
|
|
62
|
+
[context_utilization_cjs_1.STATES.WARNING]: `Context is approaching the fracture zone — consider ${threadCmd} to continue in a fresh window.`,
|
|
63
|
+
[context_utilization_cjs_1.STATES.CRITICAL]: `Reasoning quality may degrade past 70% utilization (fracture point). Run ${threadCmd} now to preserve output quality.`,
|
|
64
|
+
};
|
|
65
|
+
let classified;
|
|
66
|
+
try {
|
|
67
|
+
classified = (0, context_utilization_cjs_1.classifyContextUtilization)(Number(opts['tokens-used']), Number(opts['context-window']));
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
const msg = e.message;
|
|
71
|
+
const flag = /tokensUsed/.test(msg) ? '--tokens-used' : '--context-window';
|
|
72
|
+
error(`${flag} must be a non-negative integer (window > 0), got the values supplied`);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const result = { ...classified, recommendation: RECOMMENDATIONS[classified.state] };
|
|
76
|
+
if (args.includes('--json')) {
|
|
77
|
+
outputFn(result, raw);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
const lines = [`Context utilization: ${result.percent}% (${result.state})`];
|
|
81
|
+
if (result.recommendation)
|
|
82
|
+
lines.push(result.recommendation);
|
|
83
|
+
outputFn(result, true, lines.join('\n'));
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
module.exports = {
|
|
90
|
+
routeValidateCommand,
|
|
91
|
+
};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Validate Helpers — pure computation helpers and regex constants extracted from
|
|
4
|
+
* sdk/src/query/validate.ts (ADR-457 build-at-publish: the hand-written
|
|
5
|
+
* bin/lib/validate.cjs collapsed to a TypeScript source of truth). Behaviour is
|
|
6
|
+
* preserved byte-for-behaviour from the prior hand-written .cjs; only types are
|
|
7
|
+
* added.
|
|
8
|
+
*
|
|
9
|
+
* No I/O. No async. No filesystem operations.
|
|
10
|
+
*
|
|
11
|
+
* Issue #6 drift items (three helpers):
|
|
12
|
+
* 1. phaseVariants() — replaces parseInt-based padded/unpadded check in verify.cjs
|
|
13
|
+
* Check 8 (W006 disk-existence and W007 roadmap-membership checks).
|
|
14
|
+
* 2. buildRoadmapPhaseVariants() — replaces raw roadmapPhases set in W007 loop.
|
|
15
|
+
* 3. buildNotStartedPhaseVariants() — replaces raw+zero-padded notStartedPhases
|
|
16
|
+
* in W006 skip logic.
|
|
17
|
+
*
|
|
18
|
+
* Issue #26 drift items (four constants/helpers):
|
|
19
|
+
* 4. phaseDirNameRe — W005 phase directory naming regex (was inline in verify.cjs Check 6).
|
|
20
|
+
* 5. PHASE_TOKEN_FROM_DIR_RE — extracts phase token from dir name (was inline in
|
|
21
|
+
* verify.cjs forEachArchivedPhaseToken / collectDiskPhases).
|
|
22
|
+
* 6. MILESTONE_ARCHIVE_DIR_RE — identifies milestone archive directories (was inline).
|
|
23
|
+
* 7. canonicalPlanStem() — I001 PLAN/SUMMARY stem canonicalization (was inline in Check 7).
|
|
24
|
+
*
|
|
25
|
+
* I/O adapter pattern (ADR-3524 §4): pure transforms extracted from the SDK.
|
|
26
|
+
*
|
|
27
|
+
* References:
|
|
28
|
+
* - ADR-3524 (docs/adr/3524-cjs-sdk-hard-seam.md)
|
|
29
|
+
* - Issue #6 (upstream gsd-core)
|
|
30
|
+
* - Issue #26 (upstream gsd-core)
|
|
31
|
+
* - PR #154 (issue #4) — generator pattern precedent
|
|
32
|
+
* - PR #156 (issue #6) — validate.ts generator that #26 extends
|
|
33
|
+
*/
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.MILESTONE_ARCHIVE_DIR_RE = exports.PHASE_TOKEN_FROM_DIR_RE = exports.phaseDirNameRe = void 0;
|
|
36
|
+
exports.canonicalPlanStem = canonicalPlanStem;
|
|
37
|
+
exports.phaseVariants = phaseVariants;
|
|
38
|
+
exports.buildRoadmapPhaseVariants = buildRoadmapPhaseVariants;
|
|
39
|
+
exports.buildNotStartedPhaseVariants = buildNotStartedPhaseVariants;
|
|
40
|
+
// ── Issue #26: regex constants (W005, W006-archived) ────────────────────────
|
|
41
|
+
// Matches legacy numeric dirs (01-setup), milestone-prefixed dirs (02-01-setup),
|
|
42
|
+
// deep dirs (02-04-01-deep), and project-code-prefixed variants (GSD-02-01-setup).
|
|
43
|
+
exports.phaseDirNameRe = /^(?:[A-Z]{1,6}-)?\d{2,}(?:-\d+)*(?:\.\d+)*-[\w-]+$/i;
|
|
44
|
+
// Extracts the full phase token from a directory name, including milestone-prefixed
|
|
45
|
+
// multi-segment tokens like "02-01" from "02-01-setup" or "GSD-02-01-setup".
|
|
46
|
+
// Greedily captures all leading all-digit segments before the first letter-start segment.
|
|
47
|
+
exports.PHASE_TOKEN_FROM_DIR_RE = /^(?:[A-Z]{1,6}-)?(\d+(?:-\d+)*[A-Z]?(?:\.\d+)*)(?:-[a-z]|$)/i;
|
|
48
|
+
exports.MILESTONE_ARCHIVE_DIR_RE = /^v\d+.*-phases$/i;
|
|
49
|
+
// ── Issue #26: I001 canonicalization ────────────────────────────────────────
|
|
50
|
+
function canonicalPlanStem(stem) {
|
|
51
|
+
const m = stem.match(/^(\d+[A-Z]?(?:\.\d+)*-\d+)/i);
|
|
52
|
+
return m ? m[1] : stem;
|
|
53
|
+
}
|
|
54
|
+
// ── Issue #6: phase variant helpers (W006/W007) ──────────────────────────────
|
|
55
|
+
function phaseVariants(phase) {
|
|
56
|
+
const variants = new Set([phase]);
|
|
57
|
+
const dotIdx = phase.indexOf('.');
|
|
58
|
+
const head = dotIdx === -1 ? phase : phase.slice(0, dotIdx);
|
|
59
|
+
const tail = dotIdx === -1 ? '' : phase.slice(dotIdx);
|
|
60
|
+
// Milestone-prefixed IDs: M-NN or M-N-N. Add padding-normalized variant.
|
|
61
|
+
// e.g. "2-01" → also "02-01"; "02-01" → also "2-01"
|
|
62
|
+
const milestoneHeadMatch = head.match(/^(\d+)((?:-\d+)+)([A-Z]?)$/i);
|
|
63
|
+
if (milestoneHeadMatch) {
|
|
64
|
+
const major = milestoneHeadMatch[1];
|
|
65
|
+
const subSegs = milestoneHeadMatch[2]; // e.g. "-01" or "-04-01"
|
|
66
|
+
const letter = milestoneHeadMatch[3] || '';
|
|
67
|
+
const paddedMajor = major.padStart(2, '0');
|
|
68
|
+
const unpaddedMajor = String(parseInt(major, 10));
|
|
69
|
+
// Pad/unpad sub-segments individually
|
|
70
|
+
const paddedSubs = subSegs.slice(1).split('-').map(s => s.padStart(2, '0')).join('-');
|
|
71
|
+
const unpaddedSubs = subSegs.slice(1).split('-').map(s => String(parseInt(s, 10))).join('-');
|
|
72
|
+
variants.add(`${paddedMajor}-${paddedSubs}${letter}${tail}`);
|
|
73
|
+
variants.add(`${unpaddedMajor}-${unpaddedSubs}${letter}${tail}`);
|
|
74
|
+
variants.add(`${unpaddedMajor}-${paddedSubs}${letter}${tail}`);
|
|
75
|
+
variants.add(`${paddedMajor}-${unpaddedSubs}${letter}${tail}`);
|
|
76
|
+
return variants;
|
|
77
|
+
}
|
|
78
|
+
// Plain numeric/decimal IDs: "1", "01", "12A", "12.1"
|
|
79
|
+
const headMatch = head.match(/^(\d+)([A-Z]?)$/i);
|
|
80
|
+
if (!headMatch)
|
|
81
|
+
return variants;
|
|
82
|
+
const numericHead = headMatch[1];
|
|
83
|
+
const letterSuffix = headMatch[2] || '';
|
|
84
|
+
variants.add(`${String(parseInt(numericHead, 10))}${letterSuffix}${tail}`);
|
|
85
|
+
variants.add(`${numericHead.padStart(2, '0')}${letterSuffix}${tail}`);
|
|
86
|
+
return variants;
|
|
87
|
+
}
|
|
88
|
+
function buildRoadmapPhaseVariants(roadmapContent) {
|
|
89
|
+
const roadmapPhases = new Set();
|
|
90
|
+
const roadmapPhaseVariants = new Set();
|
|
91
|
+
// Matches both legacy numeric (Phase 1:), decimal (Phase 2.1:), milestone-prefixed (Phase 2-01:),
|
|
92
|
+
// and bracket-prefixed (### [GSD] Phase 2-01:) headings.
|
|
93
|
+
const phasePattern = /#{2,4}\s*(?:\[[^\]]+\]\s*)?Phase\s+([\w][\w.-]*)\s*:/gi;
|
|
94
|
+
let m;
|
|
95
|
+
while ((m = phasePattern.exec(roadmapContent)) !== null) {
|
|
96
|
+
roadmapPhases.add(m[1]);
|
|
97
|
+
for (const variant of phaseVariants(m[1]))
|
|
98
|
+
roadmapPhaseVariants.add(variant);
|
|
99
|
+
}
|
|
100
|
+
// Also matches checklist-style entries (checked or unchecked):
|
|
101
|
+
// - [x] **Phase 01: name** - [X] **Phase 2-01: name** - [ ] **Phase 3: name**
|
|
102
|
+
// This is a supported ROADMAP format (parallel to buildNotStartedPhaseVariants).
|
|
103
|
+
const checklistPattern = /-\s*\[[ xX]\]\s*\*{0,2}Phase\s+([\w][\w.-]*)\s*:/gi;
|
|
104
|
+
let cm;
|
|
105
|
+
while ((cm = checklistPattern.exec(roadmapContent)) !== null) {
|
|
106
|
+
roadmapPhases.add(cm[1]);
|
|
107
|
+
for (const variant of phaseVariants(cm[1]))
|
|
108
|
+
roadmapPhaseVariants.add(variant);
|
|
109
|
+
}
|
|
110
|
+
return { roadmapPhases, roadmapPhaseVariants };
|
|
111
|
+
}
|
|
112
|
+
function buildNotStartedPhaseVariants(roadmapContent) {
|
|
113
|
+
const notStartedPhases = new Set();
|
|
114
|
+
// Also matches milestone-prefixed and bracket-prefixed checklist items.
|
|
115
|
+
const uncheckedPattern = /-\s*\[\s\]\s*\*{0,2}Phase\s+([\w][\w.-]*)[:\s*]/gi;
|
|
116
|
+
let um;
|
|
117
|
+
while ((um = uncheckedPattern.exec(roadmapContent)) !== null) {
|
|
118
|
+
for (const variant of phaseVariants(um[1]))
|
|
119
|
+
notStartedPhases.add(variant);
|
|
120
|
+
}
|
|
121
|
+
return notStartedPhases;
|
|
122
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Verification-status subcommand router.
|
|
4
|
+
* Routes `verification.status <phaseDir>` to verification.cmdVerificationStatus.
|
|
5
|
+
*
|
|
6
|
+
* Note: `verification` (reads verifier-emitted status) is distinct from `verify`
|
|
7
|
+
* (runs verification checks like plan-structure/artifacts). Keep them separate.
|
|
8
|
+
*
|
|
9
|
+
* ADR-457 build-at-publish: source in src/verification-command-router.cts,
|
|
10
|
+
* compiled to gsd-core/bin/lib/verification-command-router.cjs (gitignored).
|
|
11
|
+
*/
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
13
|
+
const cjsCommandRouterAdapter = require("./cjs-command-router-adapter.cjs");
|
|
14
|
+
const { routeCjsCommandFamily } = cjsCommandRouterAdapter;
|
|
15
|
+
// ─── Implementation ───────────────────────────────────────────────────────────
|
|
16
|
+
const VERIFICATION_SUBCOMMANDS = ['status'];
|
|
17
|
+
function routeVerificationCommand({ verification, args, cwd, raw, error, }) {
|
|
18
|
+
routeCjsCommandFamily({
|
|
19
|
+
args,
|
|
20
|
+
subcommands: VERIFICATION_SUBCOMMANDS,
|
|
21
|
+
unsupported: {},
|
|
22
|
+
error,
|
|
23
|
+
unknownMessage: (_subcommand, available) => `Unknown verification subcommand. Available: ${available.join(', ')}`,
|
|
24
|
+
handlers: {
|
|
25
|
+
status: () => verification.cmdVerificationStatus(cwd, args[2], raw),
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
module.exports = {
|
|
30
|
+
routeVerificationCommand,
|
|
31
|
+
};
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Verification Status — single queryable home for verification-status routing.
|
|
4
|
+
*
|
|
5
|
+
* Issue #651: consolidate the pass/gaps_found/human_needed routing that was
|
|
6
|
+
* previously scattered across ship.md and execute-phase.md into a single
|
|
7
|
+
* tested module. Both workflow files will later consume this module's routing
|
|
8
|
+
* table as the single source of truth.
|
|
9
|
+
*
|
|
10
|
+
* ADR-457 build-at-publish: source in src/verification.cts, compiled to
|
|
11
|
+
* gsd-core/bin/lib/verification.cjs (gitignored).
|
|
12
|
+
*
|
|
13
|
+
* DEFECT.FRONTMATTER-SCALAR-BROAD-GREP fix: status extraction is scoped to
|
|
14
|
+
* the leading YAML frontmatter block only. A `status:` line in the body (e.g.
|
|
15
|
+
* inside a fenced code block) is ignored — this is the exact failure mode that
|
|
16
|
+
* issue #586 / PR #650 identified. The shared extractFrontmatter parser anchors
|
|
17
|
+
* its regex at byte 0 of the document, which provides this guarantee.
|
|
18
|
+
*/
|
|
19
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
20
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
21
|
+
};
|
|
22
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
23
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports -- io.cjs is an export= CommonJS module
|
|
25
|
+
const io = require("./io.cjs");
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports -- phase-id.cjs is an export= CommonJS module
|
|
27
|
+
const phaseId = require("./phase-id.cjs");
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports -- frontmatter.cjs is an export= CommonJS module
|
|
29
|
+
const frontmatterMod = require("./frontmatter.cjs");
|
|
30
|
+
const { output, error } = io;
|
|
31
|
+
const { extractPhaseToken } = phaseId;
|
|
32
|
+
const { extractFrontmatter } = frontmatterMod;
|
|
33
|
+
// ─── Constants ────────────────────────────────────────────────────────────────
|
|
34
|
+
/** The set of status values that the gsd-verifier agent emits. */
|
|
35
|
+
const VERIFIER_STATUSES = ['passed', 'gaps_found', 'human_needed'];
|
|
36
|
+
/**
|
|
37
|
+
* Canonical routing table for verification statuses.
|
|
38
|
+
*
|
|
39
|
+
* This is the single source of truth — ship.md and execute-phase.md will
|
|
40
|
+
* later import from here instead of embedding their own message strings.
|
|
41
|
+
*
|
|
42
|
+
* INTERNAL SENTINELS: 'missing' and 'unknown' are operational states constructed
|
|
43
|
+
* internally — the verifier (gsd-verifier.md) never emits them. The verifier only
|
|
44
|
+
* emits values in VERIFIER_STATUSES (passed|gaps_found|human_needed). The guard in
|
|
45
|
+
* readVerificationStatus excludes 'missing' and 'unknown' from raw-status table
|
|
46
|
+
* lookup so they can only be reached via internal construction paths.
|
|
47
|
+
*
|
|
48
|
+
* For 'gaps_found', next_command is built at call time in readVerificationStatus
|
|
49
|
+
* by substituting the phase number — it is NOT stored as a function in the table.
|
|
50
|
+
*/
|
|
51
|
+
const VERIFICATION_ROUTING_TABLE = {
|
|
52
|
+
passed: {
|
|
53
|
+
status: 'passed',
|
|
54
|
+
next_action: 'Verification passed — continue.',
|
|
55
|
+
next_command: '',
|
|
56
|
+
},
|
|
57
|
+
gaps_found: {
|
|
58
|
+
status: 'gaps_found',
|
|
59
|
+
next_action: 'Gaps found. Plan the fixes, then re-run execute-phase before shipping.',
|
|
60
|
+
// next_command is computed at call time; this entry is never returned directly.
|
|
61
|
+
next_command: '',
|
|
62
|
+
},
|
|
63
|
+
human_needed: {
|
|
64
|
+
status: 'human_needed',
|
|
65
|
+
next_action: "Human verification required. Complete the manual tests in the phase's *-UAT.md, then re-run the verify step until status is passed.",
|
|
66
|
+
next_command: '',
|
|
67
|
+
},
|
|
68
|
+
// INTERNAL SENTINEL: constructed when no *-VERIFICATION.md file exists or when
|
|
69
|
+
// the file has no parseable frontmatter status. Never emitted by the verifier.
|
|
70
|
+
missing: {
|
|
71
|
+
status: 'missing',
|
|
72
|
+
next_action: 'No verification report found — the verify step never completed. Re-run execute-phase.',
|
|
73
|
+
next_command: '/gsd:execute-phase',
|
|
74
|
+
},
|
|
75
|
+
// INTERNAL SENTINEL: constructed when the file has a status value not in
|
|
76
|
+
// VERIFIER_STATUSES. Never emitted by the verifier.
|
|
77
|
+
unknown: {
|
|
78
|
+
status: 'unknown',
|
|
79
|
+
next_action: '', // filled in dynamically with the raw value
|
|
80
|
+
next_command: '/gsd:execute-phase',
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Build a 'missing' result from the routing table.
|
|
85
|
+
* Used for two early-return paths: no *-VERIFICATION.md file found, and
|
|
86
|
+
* file present but no parseable frontmatter status.
|
|
87
|
+
*/
|
|
88
|
+
function missingResult() {
|
|
89
|
+
const route = VERIFICATION_ROUTING_TABLE['missing'];
|
|
90
|
+
return {
|
|
91
|
+
status: route.status,
|
|
92
|
+
next_action: route.next_action,
|
|
93
|
+
next_command: route.next_command,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Read the verification status from the first `*-VERIFICATION.md` file in
|
|
98
|
+
* phaseDir and return the routing result.
|
|
99
|
+
*
|
|
100
|
+
* Behavior:
|
|
101
|
+
* 1. Find the first file matching `*-VERIFICATION.md` (sorted, take first).
|
|
102
|
+
* If none → status 'missing'.
|
|
103
|
+
* 2. Extract `status` from FRONTMATTER ONLY via the shared extractFrontmatter
|
|
104
|
+
* parser (DEFECT.FRONTMATTER-SCALAR-BROAD-GREP fix — parser anchors at byte 0).
|
|
105
|
+
* If no frontmatter block or no `status` key → status 'missing'.
|
|
106
|
+
* 3. Map to routing table. Unknown non-empty value → status 'unknown'.
|
|
107
|
+
*
|
|
108
|
+
* @param phaseDir - Absolute path to the phase directory.
|
|
109
|
+
* @param opts - Options. `opts.fs` allows test injection (defaults to node:fs).
|
|
110
|
+
*/
|
|
111
|
+
function readVerificationStatus(phaseDir, opts = {}) {
|
|
112
|
+
const fsImpl = opts.fs ?? node_fs_1.default;
|
|
113
|
+
// Phase token for the gaps_found command
|
|
114
|
+
const baseName = node_path_1.default.basename(phaseDir);
|
|
115
|
+
const phaseToken = extractPhaseToken(baseName);
|
|
116
|
+
const phaseNumber = phaseToken.length > 0 ? phaseToken : baseName;
|
|
117
|
+
// 1. Find *-VERIFICATION.md
|
|
118
|
+
let verificationFile = null;
|
|
119
|
+
try {
|
|
120
|
+
const entries = fsImpl.readdirSync(phaseDir);
|
|
121
|
+
const candidates = entries.filter((f) => f.endsWith('-VERIFICATION.md')).sort();
|
|
122
|
+
verificationFile = candidates.length > 0 ? candidates[0] : null;
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// Directory unreadable → treat as missing
|
|
126
|
+
verificationFile = null;
|
|
127
|
+
}
|
|
128
|
+
if (!verificationFile) {
|
|
129
|
+
return missingResult();
|
|
130
|
+
}
|
|
131
|
+
// 2. Read and parse frontmatter using the shared parser.
|
|
132
|
+
// extractFrontmatter anchors at byte 0, so body `status:` lines are ignored.
|
|
133
|
+
const filePath = node_path_1.default.join(phaseDir, verificationFile);
|
|
134
|
+
let rawStatus = null;
|
|
135
|
+
try {
|
|
136
|
+
const content = fsImpl.readFileSync(filePath, 'utf-8');
|
|
137
|
+
const fm = extractFrontmatter(content);
|
|
138
|
+
const statusVal = fm['status'];
|
|
139
|
+
// status is always a scalar string in a well-formed VERIFICATION.md frontmatter;
|
|
140
|
+
// only accept string values — arrays and objects are not valid status values.
|
|
141
|
+
if (typeof statusVal === 'string') {
|
|
142
|
+
const trimmed = statusVal.trim();
|
|
143
|
+
rawStatus = trimmed.length > 0 ? trimmed : null;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
rawStatus = null;
|
|
148
|
+
}
|
|
149
|
+
if (!rawStatus) {
|
|
150
|
+
return missingResult();
|
|
151
|
+
}
|
|
152
|
+
// 3. Route — exclude internal sentinels from raw-file lookup (they are
|
|
153
|
+
// constructed internally above, never written by the verifier).
|
|
154
|
+
if (rawStatus in VERIFICATION_ROUTING_TABLE && rawStatus !== 'missing' && rawStatus !== 'unknown') {
|
|
155
|
+
const entry = VERIFICATION_ROUTING_TABLE[rawStatus];
|
|
156
|
+
// gaps_found: build the phase-specific command here rather than in the table.
|
|
157
|
+
const next_command = rawStatus === 'gaps_found'
|
|
158
|
+
? `/gsd:plan-phase ${phaseNumber} --gaps`
|
|
159
|
+
: entry.next_command;
|
|
160
|
+
return {
|
|
161
|
+
status: entry.status,
|
|
162
|
+
next_action: entry.next_action,
|
|
163
|
+
next_command,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
// Unknown value
|
|
167
|
+
const unknownRoute = VERIFICATION_ROUTING_TABLE['unknown'];
|
|
168
|
+
return {
|
|
169
|
+
status: unknownRoute.status,
|
|
170
|
+
next_action: `Unexpected verification status '${rawStatus}'. Re-run execute-phase verification.`,
|
|
171
|
+
next_command: unknownRoute.next_command,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* CLI command handler: resolve phaseDir against cwd, call readVerificationStatus,
|
|
176
|
+
* emit via io.output().
|
|
177
|
+
*
|
|
178
|
+
* @param cwd - Current working directory (used to resolve phaseDirArg).
|
|
179
|
+
* @param phaseDirArg - Phase directory path (absolute or relative to cwd).
|
|
180
|
+
* @param raw - Whether to emit raw (non-JSON) output.
|
|
181
|
+
*/
|
|
182
|
+
function cmdVerificationStatus(cwd, phaseDirArg, raw) {
|
|
183
|
+
if (!phaseDirArg) {
|
|
184
|
+
error('phase directory required for verification.status');
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
const phaseDir = node_path_1.default.resolve(cwd, phaseDirArg);
|
|
188
|
+
const result = readVerificationStatus(phaseDir);
|
|
189
|
+
output(result, raw);
|
|
190
|
+
}
|
|
191
|
+
module.exports = {
|
|
192
|
+
VERIFIER_STATUSES,
|
|
193
|
+
VERIFICATION_ROUTING_TABLE,
|
|
194
|
+
readVerificationStatus,
|
|
195
|
+
cmdVerificationStatus,
|
|
196
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Manifest-backed verify subcommand router.
|
|
4
|
+
* Keeps gsd-tools.cjs thin while preserving existing command semantics.
|
|
5
|
+
*
|
|
6
|
+
* ADR-457 build-at-publish: the hand-written bin/lib/verify-command-router.cjs
|
|
7
|
+
* collapsed to a TypeScript source of truth. Behaviour is preserved byte-for-behaviour
|
|
8
|
+
* from the prior hand-written .cjs; only types are added.
|
|
9
|
+
*/
|
|
10
|
+
const command_aliases_cjs_1 = require("./command-aliases.cjs");
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
12
|
+
const cjsCommandRouterAdapter = require("./cjs-command-router-adapter.cjs");
|
|
13
|
+
const { routeCjsCommandFamily } = cjsCommandRouterAdapter;
|
|
14
|
+
// ─── Implementation ───────────────────────────────────────────────────────────
|
|
15
|
+
function routeVerifyCommand({ verify, args, cwd, raw, error }) {
|
|
16
|
+
routeCjsCommandFamily({
|
|
17
|
+
args,
|
|
18
|
+
subcommands: command_aliases_cjs_1.VERIFY_SUBCOMMANDS,
|
|
19
|
+
unsupported: {},
|
|
20
|
+
error,
|
|
21
|
+
unknownMessage: (_subcommand, available) => `Unknown verify subcommand. Available: ${available.join(', ')}`,
|
|
22
|
+
handlers: {
|
|
23
|
+
'plan-structure': () => verify.cmdVerifyPlanStructure(cwd, args[2], raw),
|
|
24
|
+
'phase-completeness': () => verify.cmdVerifyPhaseCompleteness(cwd, args[2], raw),
|
|
25
|
+
references: () => verify.cmdVerifyReferences(cwd, args[2], raw),
|
|
26
|
+
commits: () => verify.cmdVerifyCommits(cwd, args.slice(2), raw),
|
|
27
|
+
artifacts: () => verify.cmdVerifyArtifacts(cwd, args[2], raw),
|
|
28
|
+
'key-links': () => verify.cmdVerifyKeyLinks(cwd, args[2], raw),
|
|
29
|
+
'schema-drift': () => {
|
|
30
|
+
const rest = args.slice(2);
|
|
31
|
+
const skipFlag = rest.includes('--skip');
|
|
32
|
+
const phaseArg = rest.find((arg) => !arg.startsWith('-'));
|
|
33
|
+
verify.cmdVerifySchemaDrift(cwd, phaseArg, skipFlag, raw);
|
|
34
|
+
},
|
|
35
|
+
// verify codebase-drift dispatches direct to CJS — drift is out-of-seam
|
|
36
|
+
// per ADR/PRD 3524 §3 / L160 (CJS-only by design). Routing through
|
|
37
|
+
// recursive dispatch would re-enter this router path.
|
|
38
|
+
'codebase-drift': () => verify.cmdVerifyCodebaseDrift(cwd, raw),
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
module.exports = {
|
|
43
|
+
routeVerifyCommand,
|
|
44
|
+
};
|