session-orchestrator 3.16.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/marketplace.json +29 -0
- package/.claude-plugin/plugin.json +18 -0
- package/.codex-plugin/agents/explorer.toml +14 -0
- package/.codex-plugin/agents/session-reviewer.toml +23 -0
- package/.codex-plugin/agents/wave-worker.toml +15 -0
- package/.codex-plugin/config.toml +20 -0
- package/.codex-plugin/plugin.json +37 -0
- package/.cursor/rules/000-session-orchestrator.mdc +73 -0
- package/.cursor/rules/010-session-workflow.mdc +170 -0
- package/.cursor/rules/020-quality-gates.mdc +128 -0
- package/.cursor/rules/030-wave-execution.mdc +216 -0
- package/.cursor/rules/040-discovery.mdc +242 -0
- package/.cursor/rules/050-plan.mdc +235 -0
- package/.cursor/rules/060-evolve.mdc +232 -0
- package/.cursor/rules/070-gitlab-ops.mdc +246 -0
- package/.cursor/rules/080-ecosystem-health.mdc +145 -0
- package/.mcp.json +8 -0
- package/CHANGELOG.md +1544 -0
- package/LICENSE +21 -0
- package/NOTICE +64 -0
- package/README.md +242 -0
- package/SECURITY.md +90 -0
- package/agents/AGENTS.md +136 -0
- package/agents/analyst.md +99 -0
- package/agents/architect-reviewer.md +93 -0
- package/agents/code-implementer.md +106 -0
- package/agents/db-specialist.md +104 -0
- package/agents/dialectic-deriver.md +139 -0
- package/agents/docs-writer.md +113 -0
- package/agents/eval-judge.md +146 -0
- package/agents/memory-proposal-collector.md +297 -0
- package/agents/qa-strategist.md +102 -0
- package/agents/schemas/analyst.schema.json +46 -0
- package/agents/schemas/architect-reviewer.schema.json +50 -0
- package/agents/schemas/code-implementer.schema.json +61 -0
- package/agents/schemas/db-specialist.schema.json +80 -0
- package/agents/schemas/docs-writer.schema.json +56 -0
- package/agents/schemas/persona-panel-sidecar.schema.json +245 -0
- package/agents/schemas/qa-strategist.schema.json +46 -0
- package/agents/schemas/security-reviewer.schema.json +86 -0
- package/agents/schemas/session-reviewer.schema.json +69 -0
- package/agents/schemas/test-writer.schema.json +69 -0
- package/agents/schemas/ui-developer.schema.json +90 -0
- package/agents/schemas/ux-evaluator.schema.json +51 -0
- package/agents/security-reviewer.md +236 -0
- package/agents/session-reviewer.md +201 -0
- package/agents/skill-applied-judge.md +122 -0
- package/agents/test-writer.md +123 -0
- package/agents/ui-developer.md +109 -0
- package/agents/ux-evaluator.md +161 -0
- package/assets/icon.svg +11 -0
- package/assets/og-card.png +0 -0
- package/assets/og-card.svg +47 -0
- package/commands/autopilot-multi.md +74 -0
- package/commands/autopilot.md +80 -0
- package/commands/bootstrap.md +56 -0
- package/commands/brainstorm.md +48 -0
- package/commands/close.md +24 -0
- package/commands/debug.md +36 -0
- package/commands/discovery.md +32 -0
- package/commands/dispatcher.md +59 -0
- package/commands/eval.md +28 -0
- package/commands/evolve.md +10 -0
- package/commands/go.md +41 -0
- package/commands/grill.md +45 -0
- package/commands/harness-audit.md +26 -0
- package/commands/memory-cleanup.md +25 -0
- package/commands/persona-panel.md +121 -0
- package/commands/plan.md +15 -0
- package/commands/portfolio.md +97 -0
- package/commands/reconcile.md +23 -0
- package/commands/repo-audit.md +24 -0
- package/commands/session.md +30 -0
- package/commands/spinout.md +15 -0
- package/commands/sunset-review.md +27 -0
- package/commands/templates-ack.md +96 -0
- package/commands/test.md +97 -0
- package/docs/README.md +105 -0
- package/docs/USER-GUIDE.md +1403 -0
- package/docs/ci-setup.md +81 -0
- package/docs/codex-setup.md +142 -0
- package/docs/components.md +74 -0
- package/docs/cursor-setup.md +104 -0
- package/docs/events-schema.md +81 -0
- package/docs/migration-v3.md +148 -0
- package/docs/owner-config-schema.md +154 -0
- package/docs/persona-panel.md +433 -0
- package/docs/pi-setup.md +115 -0
- package/docs/plugin-architecture-v3.md +296 -0
- package/docs/pm-skills-marketplace.md +114 -0
- package/docs/policy-cache-validation-2026-04-28.md +118 -0
- package/docs/rule-authoring.md +316 -0
- package/docs/session-config-reference.md +1439 -0
- package/docs/session-config-template.md +961 -0
- package/docs/vault-docs-architecture.md +297 -0
- package/hooks/_lib/lock-bootstrap.mjs +272 -0
- package/hooks/_lib/lock-reconcile.mjs +93 -0
- package/hooks/_lib/profile-gate.mjs +95 -0
- package/hooks/_lib/transcript-history.mjs +211 -0
- package/hooks/agent-teams-h3-test.sh +362 -0
- package/hooks/config-protection.mjs +0 -0
- package/hooks/cwd-change-restore.mjs +131 -0
- package/hooks/enforce-commands.mjs +179 -0
- package/hooks/enforce-scope.mjs +273 -0
- package/hooks/hooks-codex.json +60 -0
- package/hooks/hooks-cursor.json +15 -0
- package/hooks/hooks-pi.json +115 -0
- package/hooks/hooks.json +215 -0
- package/hooks/loop-guard.mjs +260 -0
- package/hooks/on-session-end.mjs +217 -0
- package/hooks/on-session-start.mjs +660 -0
- package/hooks/on-stop.mjs +294 -0
- package/hooks/operator-steer.mjs +64 -0
- package/hooks/post-edit-validate.mjs +225 -0
- package/hooks/post-subagent-discovery-validator.mjs +398 -0
- package/hooks/post-tool-batch-wave-signal.mjs +328 -0
- package/hooks/post-tool-failure-corrective-context.mjs +248 -0
- package/hooks/post-tooluse-frontend-slop.mjs +184 -0
- package/hooks/pre-bash-destructive-guard.mjs +515 -0
- package/hooks/pre-bash-memory-propose-audit.mjs +206 -0
- package/hooks/pre-bash-staging-fence.mjs +223 -0
- package/hooks/pre-bash-templates-first.mjs +404 -0
- package/hooks/run-node.sh +72 -0
- package/hooks/skill-invocation-telemetry.mjs +99 -0
- package/hooks/subagent-telemetry.mjs +249 -0
- package/hooks/wave-scope-commit-guard.mjs +191 -0
- package/monitors/monitors.json +14 -0
- package/output-styles/finding-report.md +48 -0
- package/output-styles/session-report.md +53 -0
- package/output-styles/wave-summary.md +38 -0
- package/package.json +94 -0
- package/pi/extensions/session-orchestrator.ts +25 -0
- package/pi/prompts/autopilot-multi.md +12 -0
- package/pi/prompts/autopilot.md +12 -0
- package/pi/prompts/bootstrap.md +12 -0
- package/pi/prompts/brainstorm.md +12 -0
- package/pi/prompts/close.md +11 -0
- package/pi/prompts/debug.md +12 -0
- package/pi/prompts/discovery.md +12 -0
- package/pi/prompts/dispatcher.md +12 -0
- package/pi/prompts/eval.md +12 -0
- package/pi/prompts/evolve.md +12 -0
- package/pi/prompts/go.md +12 -0
- package/pi/prompts/grill.md +12 -0
- package/pi/prompts/harness-audit.md +12 -0
- package/pi/prompts/memory-cleanup.md +12 -0
- package/pi/prompts/persona-panel.md +12 -0
- package/pi/prompts/plan.md +12 -0
- package/pi/prompts/portfolio.md +12 -0
- package/pi/prompts/reconcile.md +12 -0
- package/pi/prompts/repo-audit.md +12 -0
- package/pi/prompts/session.md +12 -0
- package/pi/prompts/spinout.md +12 -0
- package/pi/prompts/sunset-review.md +12 -0
- package/pi/prompts/templates-ack.md +12 -0
- package/pi/prompts/test.md +12 -0
- package/rules/_index.md +51 -0
- package/rules/always-on/commit-discipline.md +26 -0
- package/rules/always-on/npm-quality-gates.md +26 -0
- package/rules/always-on/parallel-sessions.md +43 -0
- package/rules/opt-in-domain/prompt-caching.md +270 -0
- package/rules/opt-in-stack/backend-data.md +188 -0
- package/rules/opt-in-stack/backend.md +390 -0
- package/rules/opt-in-stack/frontend.md +98 -0
- package/rules/opt-in-stack/security-web.md +194 -0
- package/rules/opt-in-stack/swift.md +65 -0
- package/scripts/archive-closed-prds.mjs +416 -0
- package/scripts/autopilot-multi.mjs +802 -0
- package/scripts/autopilot.mjs +383 -0
- package/scripts/backfill-abandoned-sessions.mjs +265 -0
- package/scripts/backfill-learnings-expires.mjs +196 -0
- package/scripts/backfill-learnings.mjs +203 -0
- package/scripts/backfill-sessions.mjs +282 -0
- package/scripts/check-doc-consistency.sh +279 -0
- package/scripts/check-package-manager.mjs +445 -0
- package/scripts/ci/assert-vitest-green.mjs +267 -0
- package/scripts/codex-install.mjs +435 -0
- package/scripts/compute-grounding-injection.sh +186 -0
- package/scripts/cursor-install.mjs +113 -0
- package/scripts/dialectic-deriver.mjs +573 -0
- package/scripts/emit-event.mjs +160 -0
- package/scripts/emit-session.mjs +212 -0
- package/scripts/eval-session.mjs +262 -0
- package/scripts/export-hw-learnings.mjs +437 -0
- package/scripts/gc-stale-worktrees.mjs +666 -0
- package/scripts/generate-pi-prompts.mjs +127 -0
- package/scripts/harness-audit.mjs +287 -0
- package/scripts/lib/agent-frontmatter.mjs +266 -0
- package/scripts/lib/agent-output-schema.mjs +166 -0
- package/scripts/lib/agent-status.mjs +303 -0
- package/scripts/lib/ajv-loader.mjs +34 -0
- package/scripts/lib/auto-dialectic.mjs +382 -0
- package/scripts/lib/auto-dream.mjs +471 -0
- package/scripts/lib/autonomy/suitability.mjs +212 -0
- package/scripts/lib/autopilot/dep-graph.mjs +417 -0
- package/scripts/lib/autopilot/durable-telemetry.mjs +121 -0
- package/scripts/lib/autopilot/flags.mjs +104 -0
- package/scripts/lib/autopilot/kill-switches.mjs +174 -0
- package/scripts/lib/autopilot/loop.mjs +320 -0
- package/scripts/lib/autopilot/mr-draft.mjs +520 -0
- package/scripts/lib/autopilot/multi-killswitch.mjs +184 -0
- package/scripts/lib/autopilot/recent-runs.mjs +106 -0
- package/scripts/lib/autopilot/stall-sampler.mjs +97 -0
- package/scripts/lib/autopilot/telemetry.mjs +224 -0
- package/scripts/lib/autopilot/worktree-pipeline.mjs +605 -0
- package/scripts/lib/autopilot-telemetry.mjs +11 -0
- package/scripts/lib/autopilot.mjs +39 -0
- package/scripts/lib/backlog-scan.mjs +179 -0
- package/scripts/lib/bootstrap-lock-freshness.mjs +260 -0
- package/scripts/lib/bootstrap-lock-refresh.mjs +186 -0
- package/scripts/lib/build-live-signals.mjs +150 -0
- package/scripts/lib/ci-status-banner.mjs +425 -0
- package/scripts/lib/claude-md-budget-lint.mjs +246 -0
- package/scripts/lib/cli-flags.mjs +158 -0
- package/scripts/lib/codex/plugin-contract.mjs +610 -0
- package/scripts/lib/cold-start-detector.mjs +240 -0
- package/scripts/lib/command-blocker.mjs +458 -0
- package/scripts/lib/common.mjs +333 -0
- package/scripts/lib/config/auto-dream.mjs +77 -0
- package/scripts/lib/config/block-header.mjs +94 -0
- package/scripts/lib/config/broken-window.mjs +114 -0
- package/scripts/lib/config/coercers.mjs +248 -0
- package/scripts/lib/config/cold-start.mjs +92 -0
- package/scripts/lib/config/config-protection.mjs +120 -0
- package/scripts/lib/config/cross-repo.mjs +104 -0
- package/scripts/lib/config/custom-phases.mjs +213 -0
- package/scripts/lib/config/dialectic.mjs +92 -0
- package/scripts/lib/config/discovery-validator.mjs +75 -0
- package/scripts/lib/config/dispatcher-autonomy-capture.mjs +240 -0
- package/scripts/lib/config/dispatcher-autonomy.mjs +152 -0
- package/scripts/lib/config/docs-orchestrator.mjs +90 -0
- package/scripts/lib/config/docs-staleness.mjs +96 -0
- package/scripts/lib/config/drift-check.mjs +155 -0
- package/scripts/lib/config/eval.mjs +130 -0
- package/scripts/lib/config/events-rotation.mjs +74 -0
- package/scripts/lib/config/evolve.mjs +308 -0
- package/scripts/lib/config/frontend-slop-hook.mjs +104 -0
- package/scripts/lib/config/gitlab-portfolio.mjs +150 -0
- package/scripts/lib/config/handover-gate.mjs +106 -0
- package/scripts/lib/config/host-paths.mjs +76 -0
- package/scripts/lib/config/io.mjs +54 -0
- package/scripts/lib/config/loop-guard.mjs +117 -0
- package/scripts/lib/config/memory.mjs +150 -0
- package/scripts/lib/config/persona-gate-wave.mjs +258 -0
- package/scripts/lib/config/reconcile.mjs +205 -0
- package/scripts/lib/config/section-extractor.mjs +100 -0
- package/scripts/lib/config/skill-evolution.mjs +112 -0
- package/scripts/lib/config/slopcheck.mjs +99 -0
- package/scripts/lib/config/state-md-lock.mjs +83 -0
- package/scripts/lib/config/templates-first.mjs +94 -0
- package/scripts/lib/config/test.mjs +113 -0
- package/scripts/lib/config/vault-integration.mjs +201 -0
- package/scripts/lib/config/vault-mirror-quality.mjs +99 -0
- package/scripts/lib/config/vault-staleness.mjs +84 -0
- package/scripts/lib/config/vault-sync.mjs +96 -0
- package/scripts/lib/config/verification-auto-fix.mjs +84 -0
- package/scripts/lib/config/wave-reviewers.mjs +133 -0
- package/scripts/lib/config-schema.mjs +345 -0
- package/scripts/lib/config.mjs +474 -0
- package/scripts/lib/convergence-monitor.mjs +389 -0
- package/scripts/lib/coordinator-snapshot.mjs +371 -0
- package/scripts/lib/crypto-digest-utils.mjs +91 -0
- package/scripts/lib/discovery/helpers.mjs +127 -0
- package/scripts/lib/discovery/triage-state.mjs +279 -0
- package/scripts/lib/dispatcher/cli.mjs +257 -0
- package/scripts/lib/dispatcher/enumerate.mjs +243 -0
- package/scripts/lib/dispatcher/rank.mjs +363 -0
- package/scripts/lib/ecosystem-health.mjs +224 -0
- package/scripts/lib/ecosystem-wizard/ci-detector.mjs +18 -0
- package/scripts/lib/ecosystem-wizard/config-parser.mjs +54 -0
- package/scripts/lib/ecosystem-wizard/config-writer.mjs +287 -0
- package/scripts/lib/ecosystem-wizard/package-manager-detector.mjs +42 -0
- package/scripts/lib/ecosystem-wizard/wizard-prompt.mjs +246 -0
- package/scripts/lib/ecosystem-wizard.mjs +48 -0
- package/scripts/lib/env-check.mjs +89 -0
- package/scripts/lib/eval/engine.mjs +605 -0
- package/scripts/lib/eval/judge.mjs +433 -0
- package/scripts/lib/eval/report.mjs +367 -0
- package/scripts/lib/eval/schema.mjs +618 -0
- package/scripts/lib/eval/session-resolve.mjs +137 -0
- package/scripts/lib/eval/sink.mjs +77 -0
- package/scripts/lib/events-rotation.mjs +86 -0
- package/scripts/lib/events-schema.mjs +81 -0
- package/scripts/lib/events.mjs +80 -0
- package/scripts/lib/evolve/autonomy-verdict.mjs +461 -0
- package/scripts/lib/evolve/autopilot-effectiveness.mjs +293 -0
- package/scripts/lib/exclusivity-matrix.mjs +68 -0
- package/scripts/lib/fetch-baseline.mjs +311 -0
- package/scripts/lib/file-lock.mjs +512 -0
- package/scripts/lib/frontend-detect/detect.mjs +138 -0
- package/scripts/lib/frontend-detect/rules.mjs +295 -0
- package/scripts/lib/frontmatter-guard.mjs +241 -0
- package/scripts/lib/gates/echo-stub-detect.mjs +39 -0
- package/scripts/lib/gates/gate-baseline.mjs +42 -0
- package/scripts/lib/gates/gate-full.mjs +85 -0
- package/scripts/lib/gates/gate-helpers.mjs +231 -0
- package/scripts/lib/gates/gate-incremental.mjs +76 -0
- package/scripts/lib/gates/gate-per-file.mjs +55 -0
- package/scripts/lib/gitlab-ops/stale-mr-sweep.mjs +447 -0
- package/scripts/lib/gitlab-portfolio/aggregator.mjs +383 -0
- package/scripts/lib/gitlab-portfolio/cli.mjs +428 -0
- package/scripts/lib/gitlab-portfolio/markdown-writer.mjs +289 -0
- package/scripts/lib/gitlab-portfolio/vcs-detect.mjs +182 -0
- package/scripts/lib/handover-gate.mjs +222 -0
- package/scripts/lib/hardening.mjs +43 -0
- package/scripts/lib/hardware-pattern-detector.mjs +238 -0
- package/scripts/lib/harness-audit/categories/category1.mjs +123 -0
- package/scripts/lib/harness-audit/categories/category2.mjs +145 -0
- package/scripts/lib/harness-audit/categories/category3.mjs +143 -0
- package/scripts/lib/harness-audit/categories/category4.mjs +202 -0
- package/scripts/lib/harness-audit/categories/category5.mjs +152 -0
- package/scripts/lib/harness-audit/categories/category6.mjs +211 -0
- package/scripts/lib/harness-audit/categories/category7.mjs +125 -0
- package/scripts/lib/harness-audit/categories/category8.mjs +328 -0
- package/scripts/lib/harness-audit/categories/category9.mjs +294 -0
- package/scripts/lib/harness-audit/categories/helpers.mjs +165 -0
- package/scripts/lib/harness-audit/categories.mjs +19 -0
- package/scripts/lib/historical-guard.mjs +15 -0
- package/scripts/lib/host-identity.mjs +262 -0
- package/scripts/lib/instruction-budget-guard.mjs +332 -0
- package/scripts/lib/io.mjs +304 -0
- package/scripts/lib/issue-close-strip-labels.mjs +161 -0
- package/scripts/lib/language-mappers/README.md +57 -0
- package/scripts/lib/language-mappers/index.mjs +165 -0
- package/scripts/lib/language-mappers/markdown.mjs +149 -0
- package/scripts/lib/language-mappers/python.mjs +249 -0
- package/scripts/lib/language-mappers/swift.mjs +201 -0
- package/scripts/lib/language-mappers/typescript.mjs +433 -0
- package/scripts/lib/learnings/expiry-sweep.mjs +164 -0
- package/scripts/lib/learnings/filters.mjs +43 -0
- package/scripts/lib/learnings/io.mjs +255 -0
- package/scripts/lib/learnings/schema.mjs +518 -0
- package/scripts/lib/learnings/surface.mjs +207 -0
- package/scripts/lib/learnings.mjs +42 -0
- package/scripts/lib/lock-reaper.mjs +648 -0
- package/scripts/lib/locks/index.mjs +31 -0
- package/scripts/lib/locks/lock-body.mjs +62 -0
- package/scripts/lib/locks/staging-fence-lock.mjs +267 -0
- package/scripts/lib/locks/state-md-lock.mjs +351 -0
- package/scripts/lib/loop-readiness-banner.mjs +144 -0
- package/scripts/lib/memory-banner.mjs +478 -0
- package/scripts/lib/memory-cleanup/worktree-sweep.mjs +108 -0
- package/scripts/lib/memory-cleanup-stamp.mjs +56 -0
- package/scripts/lib/memory-paths.mjs +31 -0
- package/scripts/lib/memory-proposals/collector.mjs +334 -0
- package/scripts/lib/memory-proposals/schema.mjs +289 -0
- package/scripts/lib/memory-proposals/sink.mjs +507 -0
- package/scripts/lib/memory-proposals/store.mjs +441 -0
- package/scripts/lib/mission-status-schema.mjs +114 -0
- package/scripts/lib/mode-selector/alternatives.mjs +64 -0
- package/scripts/lib/mode-selector/constants.mjs +29 -0
- package/scripts/lib/mode-selector/context-pressure.mjs +157 -0
- package/scripts/lib/mode-selector/rationale.mjs +55 -0
- package/scripts/lib/mode-selector/scoring.mjs +221 -0
- package/scripts/lib/mode-selector-accuracy.mjs +121 -0
- package/scripts/lib/mode-selector.mjs +160 -0
- package/scripts/lib/multi-provider-build/providers.mjs +64 -0
- package/scripts/lib/multi-provider-build/templating.mjs +130 -0
- package/scripts/lib/named-baseline-resolver.mjs +233 -0
- package/scripts/lib/named-vault-resolver.mjs +433 -0
- package/scripts/lib/owner-config/coerce.mjs +29 -0
- package/scripts/lib/owner-config/constants.mjs +21 -0
- package/scripts/lib/owner-config/defaults.mjs +50 -0
- package/scripts/lib/owner-config/error.mjs +19 -0
- package/scripts/lib/owner-config/index.mjs +13 -0
- package/scripts/lib/owner-config/merge.mjs +52 -0
- package/scripts/lib/owner-config/validate.mjs +259 -0
- package/scripts/lib/owner-config-banner.mjs +126 -0
- package/scripts/lib/owner-config-loader.mjs +159 -0
- package/scripts/lib/owner-config.example.yaml +72 -0
- package/scripts/lib/owner-config.mjs +28 -0
- package/scripts/lib/owner-interview.mjs +243 -0
- package/scripts/lib/owner-yaml.mjs +571 -0
- package/scripts/lib/package-manager.mjs +160 -0
- package/scripts/lib/path-utils.mjs +217 -0
- package/scripts/lib/peer-cards/merger.mjs +310 -0
- package/scripts/lib/peer-cards/reader.mjs +125 -0
- package/scripts/lib/peer-cards/schema.mjs +230 -0
- package/scripts/lib/peer-cards/staleness-banner.mjs +86 -0
- package/scripts/lib/peer-cards/writer.mjs +138 -0
- package/scripts/lib/peer-discovery.mjs +200 -0
- package/scripts/lib/persona-panel/catalog-loader.mjs +577 -0
- package/scripts/lib/persona-panel/consolidator.mjs +370 -0
- package/scripts/lib/persona-panel/persona-runner.mjs +375 -0
- package/scripts/lib/persona-panel/threshold.mjs +130 -0
- package/scripts/lib/pi-hook-bridge.mjs +328 -0
- package/scripts/lib/platform.mjs +266 -0
- package/scripts/lib/playwright-driver/runner.mjs +297 -0
- package/scripts/lib/plugin-root.mjs +210 -0
- package/scripts/lib/pre-dispatch-check.mjs +126 -0
- package/scripts/lib/product-repo-detect.mjs +121 -0
- package/scripts/lib/profiles/registry.mjs +176 -0
- package/scripts/lib/profiles/schema.mjs +209 -0
- package/scripts/lib/qg-command-drift-banner.mjs +88 -0
- package/scripts/lib/quality-gate/diagnostics.mjs +92 -0
- package/scripts/lib/quality-gate.mjs +536 -0
- package/scripts/lib/quality-gates-cache.mjs +228 -0
- package/scripts/lib/quality-gates-policy.mjs +95 -0
- package/scripts/lib/recommendations-v0.mjs +156 -0
- package/scripts/lib/reconcile/eligibility.mjs +203 -0
- package/scripts/lib/reconcile/emitter.mjs +244 -0
- package/scripts/lib/reconcile/engine.mjs +412 -0
- package/scripts/lib/reconcile/idempotency.mjs +239 -0
- package/scripts/lib/reconcile/renderer.mjs +211 -0
- package/scripts/lib/reconcile/writer.mjs +293 -0
- package/scripts/lib/reconcile-nudge-banner.mjs +284 -0
- package/scripts/lib/resource-probe/evaluate.mjs +190 -0
- package/scripts/lib/resource-probe/parsers.mjs +181 -0
- package/scripts/lib/resource-probe/probe-platform.mjs +300 -0
- package/scripts/lib/resource-probe.mjs +95 -0
- package/scripts/lib/rule-loader.mjs +552 -0
- package/scripts/lib/rules-sync.mjs +439 -0
- package/scripts/lib/scope-gate.mjs +496 -0
- package/scripts/lib/session-close-backfill.mjs +539 -0
- package/scripts/lib/session-discovery.mjs +256 -0
- package/scripts/lib/session-end/phase-skip.mjs +357 -0
- package/scripts/lib/session-end/worktree-cleanup.mjs +112 -0
- package/scripts/lib/session-id.mjs +362 -0
- package/scripts/lib/session-lock.mjs +703 -0
- package/scripts/lib/session-registry.mjs +355 -0
- package/scripts/lib/session-schema/aliases.mjs +71 -0
- package/scripts/lib/session-schema/constants.mjs +115 -0
- package/scripts/lib/session-schema/normalizer.mjs +66 -0
- package/scripts/lib/session-schema/timestamps.mjs +64 -0
- package/scripts/lib/session-schema/validator.mjs +453 -0
- package/scripts/lib/session-schema.mjs +71 -0
- package/scripts/lib/session-token-rollup.mjs +137 -0
- package/scripts/lib/sessions-staleness-banner.mjs +247 -0
- package/scripts/lib/skill-evolution/blast-radius-classifier.mjs +114 -0
- package/scripts/lib/skill-evolution/candidate-intake.mjs +270 -0
- package/scripts/lib/skill-evolution/config-validation-gate.mjs +279 -0
- package/scripts/lib/skill-evolution/engine.mjs +719 -0
- package/scripts/lib/skill-evolution/idempotency.mjs +279 -0
- package/scripts/lib/skill-evolution/mr-opener.mjs +507 -0
- package/scripts/lib/skill-health/join.mjs +181 -0
- package/scripts/lib/skill-health/score.mjs +123 -0
- package/scripts/lib/skill-invocations-schema.mjs +214 -0
- package/scripts/lib/skill-judge.mjs +348 -0
- package/scripts/lib/skill-judgments-schema.mjs +264 -0
- package/scripts/lib/slopcheck.mjs +501 -0
- package/scripts/lib/soul-resolve.mjs +118 -0
- package/scripts/lib/spiral-carryover.mjs +495 -0
- package/scripts/lib/state-md/body-sections.mjs +851 -0
- package/scripts/lib/state-md/frontmatter-mutators.mjs +453 -0
- package/scripts/lib/state-md/mission-status.mjs +247 -0
- package/scripts/lib/state-md/recommendations.mjs +57 -0
- package/scripts/lib/state-md/yaml-parser.mjs +234 -0
- package/scripts/lib/state-md-peer-guard.mjs +232 -0
- package/scripts/lib/state-md.mjs +53 -0
- package/scripts/lib/subagents-schema.mjs +309 -0
- package/scripts/lib/sunset/walker.mjs +1192 -0
- package/scripts/lib/test-runner/artifact-paths.mjs +94 -0
- package/scripts/lib/test-runner/fingerprint.mjs +33 -0
- package/scripts/lib/test-runner/issue-reconcile.mjs +770 -0
- package/scripts/lib/tmux-layout/layouts.mjs +224 -0
- package/scripts/lib/tmux-layout/telemetry-stats.mjs +100 -0
- package/scripts/lib/tmux-layout/telemetry.mjs +88 -0
- package/scripts/lib/tmux-layout/tmux-shell.mjs +82 -0
- package/scripts/lib/tmux-layout/vcs-detector.mjs +88 -0
- package/scripts/lib/validate/check-agents.mjs +457 -0
- package/scripts/lib/validate/check-codex-plugin.mjs +37 -0
- package/scripts/lib/validate/check-commands.mjs +148 -0
- package/scripts/lib/validate/check-component-paths.mjs +112 -0
- package/scripts/lib/validate/check-dead-bridge.mjs +180 -0
- package/scripts/lib/validate/check-hooks-symmetry.mjs +258 -0
- package/scripts/lib/validate/check-json-files.mjs +116 -0
- package/scripts/lib/validate/check-owner-leakage.mjs +1011 -0
- package/scripts/lib/validate/check-path-utils-canary.mjs +175 -0
- package/scripts/lib/validate/check-peekaboo-driver-canary.mjs +201 -0
- package/scripts/lib/validate/check-pi-package.mjs +110 -0
- package/scripts/lib/validate/check-pi-prompts.mjs +43 -0
- package/scripts/lib/validate/check-playwright-mcp-canary.mjs +154 -0
- package/scripts/lib/validate/check-plugin-json.mjs +96 -0
- package/scripts/lib/validate/check-plugin-monitors.mjs +206 -0
- package/scripts/lib/validate/check-plugin-schema.mjs +137 -0
- package/scripts/lib/validate/check-rules.mjs +143 -0
- package/scripts/lib/validate/check-session-plan-routing.mjs +154 -0
- package/scripts/lib/validate/check-test-fixture-shapes.mjs +280 -0
- package/scripts/lib/validate/check-unicode-safety.mjs +533 -0
- package/scripts/lib/validate/confidential-names.mjs +169 -0
- package/scripts/lib/validate/dead-bridge-corpus.mjs +141 -0
- package/scripts/lib/validate/dead-bridge-detectors.mjs +568 -0
- package/scripts/lib/validate/tier-inference.mjs +100 -0
- package/scripts/lib/validate-vendored-rules.mjs +519 -0
- package/scripts/lib/vault-archive.mjs +404 -0
- package/scripts/lib/vault-backfill/glab.mjs +164 -0
- package/scripts/lib/vault-backfill/manifest.mjs +75 -0
- package/scripts/lib/vault-backfill/template.mjs +130 -0
- package/scripts/lib/vault-consolidate-fs.mjs +331 -0
- package/scripts/lib/vault-migration-rules.mjs +155 -0
- package/scripts/lib/vault-mirror/auto-commit.mjs +203 -0
- package/scripts/lib/vault-mirror/namespace.mjs +152 -0
- package/scripts/lib/vault-mirror/process.mjs +567 -0
- package/scripts/lib/vault-mirror/pseudonym-map.mjs +164 -0
- package/scripts/lib/vault-mirror/render-learnings.mjs +201 -0
- package/scripts/lib/vault-mirror/render-sessions.mjs +367 -0
- package/scripts/lib/vault-mirror/render.mjs +8 -0
- package/scripts/lib/vault-mirror/utils.mjs +217 -0
- package/scripts/lib/vault-relocation-rules.mjs +555 -0
- package/scripts/lib/vault-repo-backfill.mjs +235 -0
- package/scripts/lib/vault-staleness-banner.mjs +142 -0
- package/scripts/lib/vault-status/board-writer.mjs +769 -0
- package/scripts/lib/vault-status/narrative-mirror.mjs +544 -0
- package/scripts/lib/vault-sync-baseline.mjs +152 -0
- package/scripts/lib/wave-context.mjs +29 -0
- package/scripts/lib/wave-executor/pool.mjs +248 -0
- package/scripts/lib/wave-resource-gate.mjs +204 -0
- package/scripts/lib/wave-sizing.mjs +75 -0
- package/scripts/lib/webhook-url.mjs +105 -0
- package/scripts/lib/workspace.mjs +198 -0
- package/scripts/lib/worktree/constants.mjs +35 -0
- package/scripts/lib/worktree/index.mjs +17 -0
- package/scripts/lib/worktree/lifecycle.mjs +287 -0
- package/scripts/lib/worktree/listing.mjs +118 -0
- package/scripts/lib/worktree/meta.mjs +64 -0
- package/scripts/lib/worktree-freshness.mjs +313 -0
- package/scripts/lib/worktree.mjs +15 -0
- package/scripts/lifecycle-sim-v6.mjs +347 -0
- package/scripts/lock-reaper.mjs +185 -0
- package/scripts/mcp-server.sh +241 -0
- package/scripts/measure-policy-cache-effectiveness.mjs +427 -0
- package/scripts/memory-propose.mjs +464 -0
- package/scripts/migrate-cold-start-seed.mjs +404 -0
- package/scripts/migrate-learnings-jsonl.mjs +189 -0
- package/scripts/migrate-legacy-learnings.sh +61 -0
- package/scripts/migrate-sessions-jsonl.mjs +448 -0
- package/scripts/migrate-subagents-jsonl.mjs +196 -0
- package/scripts/migrate-vault-paths.mjs +796 -0
- package/scripts/parse-config.mjs +149 -0
- package/scripts/pi-install.mjs +117 -0
- package/scripts/print-applicable-rules.mjs +247 -0
- package/scripts/promote-vault-strict.mjs +496 -0
- package/scripts/relocate-vault-corpus.mjs +1178 -0
- package/scripts/run-migrate-v2-cross-repo.mjs +385 -0
- package/scripts/run-quality-gate.mjs +216 -0
- package/scripts/spikes/h3-agent-teams/preflight.sh +53 -0
- package/scripts/spikes/h3-agent-teams/run-h3.sh +112 -0
- package/scripts/spikes/h3-agent-teams/setup.sh +137 -0
- package/scripts/spikes/h3-agent-teams/toggle.sh +38 -0
- package/scripts/sweep-expired-learnings.mjs +135 -0
- package/scripts/sync-vault-schema.mjs +376 -0
- package/scripts/tests/fixtures/fetch-baseline/sample-rule.md +8 -0
- package/scripts/tmux-layout.mjs +245 -0
- package/scripts/token-audit.sh +191 -0
- package/scripts/typecheck.mjs +42 -0
- package/scripts/upload-social-preview.mjs +316 -0
- package/scripts/validate-config.mjs +46 -0
- package/scripts/validate-plugin-manifests.mjs +163 -0
- package/scripts/validate-plugin.mjs +264 -0
- package/scripts/validate-wave-scope.mjs +289 -0
- package/scripts/vault-backfill.mjs +404 -0
- package/scripts/vault-consolidate.mjs +596 -0
- package/scripts/vault-integration-watcher.mjs +394 -0
- package/scripts/vault-mirror.mjs +430 -0
- package/skills/_shared/bootstrap-gate.md +111 -0
- package/skills/_shared/config-reading.md +226 -0
- package/skills/_shared/instruction-file-resolution.md +79 -0
- package/skills/_shared/model-selection.md +64 -0
- package/skills/_shared/monitor-patterns.md +300 -0
- package/skills/_shared/parallel-aware-auq.md +121 -0
- package/skills/_shared/parallel-aware-preamble.md +185 -0
- package/skills/_shared/platform-tools.md +96 -0
- package/skills/_shared/state-ownership.md +221 -0
- package/skills/architecture/DEEPENING.md +37 -0
- package/skills/architecture/INTERFACE-DESIGN.md +44 -0
- package/skills/architecture/LANGUAGE.md +53 -0
- package/skills/architecture/SKILL.md +92 -0
- package/skills/autopilot/SKILL.md +419 -0
- package/skills/bootstrap/SKILL.md +592 -0
- package/skills/bootstrap/STATE.md.template +24 -0
- package/skills/bootstrap/_shared-template.md +243 -0
- package/skills/bootstrap/deep-template.md +659 -0
- package/skills/bootstrap/fast-template.md +251 -0
- package/skills/bootstrap/intensity-heuristic.md +80 -0
- package/skills/bootstrap/public-fallback.md +342 -0
- package/skills/bootstrap/standard-template.md +736 -0
- package/skills/bootstrap/templates/agents/project-code-review.md +18 -0
- package/skills/bootstrap/templates/agents/project-discovery.md +18 -0
- package/skills/bootstrap/templates/agents/project-quality-gate.md +18 -0
- package/skills/brainstorm/SKILL.md +268 -0
- package/skills/brainstorm/soul.md +49 -0
- package/skills/claude-md-drift-check/SKILL.md +186 -0
- package/skills/claude-md-drift-check/checker.mjs +1380 -0
- package/skills/claude-md-drift-check/checker.sh +37 -0
- package/skills/claude-md-drift-check/package.json +16 -0
- package/skills/convergence-monitoring/README.md +39 -0
- package/skills/convergence-monitoring/SIGNALS.md +246 -0
- package/skills/convergence-monitoring/SKILL.md +285 -0
- package/skills/daily/SKILL.md +222 -0
- package/skills/daily/generate.sh +92 -0
- package/skills/daily/templates/daily.md.tpl +36 -0
- package/skills/debug/SKILL.md +188 -0
- package/skills/debug/soul.md +35 -0
- package/skills/discovery/SKILL.md +567 -0
- package/skills/discovery/issue-templates.md +237 -0
- package/skills/discovery/probes/docs-staleness.mjs +195 -0
- package/skills/discovery/probes/frontend-slop.mjs +186 -0
- package/skills/discovery/probes/ssot-code-diff.mjs +310 -0
- package/skills/discovery/probes/supply-chain-slopcheck.mjs +440 -0
- package/skills/discovery/probes/vault-narrative-staleness.mjs +355 -0
- package/skills/discovery/probes/vault-staleness.mjs +272 -0
- package/skills/discovery/probes-arch.md +252 -0
- package/skills/discovery/probes-audit.md +95 -0
- package/skills/discovery/probes-code.md +329 -0
- package/skills/discovery/probes-docs.md +76 -0
- package/skills/discovery/probes-feature.md +150 -0
- package/skills/discovery/probes-infra.md +138 -0
- package/skills/discovery/probes-intro.md +25 -0
- package/skills/discovery/probes-session.md +495 -0
- package/skills/discovery/probes-supply-chain.md +94 -0
- package/skills/discovery/probes-ui.md +147 -0
- package/skills/discovery/probes-vault.md +64 -0
- package/skills/discovery/slop-patterns.md +115 -0
- package/skills/dispatcher/SKILL.md +173 -0
- package/skills/docs-orchestrator/SKILL.md +362 -0
- package/skills/docs-orchestrator/audience-mapping.md +140 -0
- package/skills/domain-model/ADR-FORMAT.md +47 -0
- package/skills/domain-model/CONTEXT-FORMAT.md +77 -0
- package/skills/domain-model/SKILL.md +85 -0
- package/skills/ecosystem-health/SKILL.md +119 -0
- package/skills/ecosystem-health/wizard.md +193 -0
- package/skills/eval/SKILL.md +293 -0
- package/skills/eval/rubric-v1.md +218 -0
- package/skills/evolve/SKILL.md +546 -0
- package/skills/frontmatter-guard/SKILL.md +126 -0
- package/skills/gitlab-ops/SKILL.md +368 -0
- package/skills/gitlab-portfolio/SKILL.md +196 -0
- package/skills/grill/SKILL.md +185 -0
- package/skills/grill/soul.md +55 -0
- package/skills/hook-development/SKILL.md +413 -0
- package/skills/mcp-builder/SKILL.md +260 -0
- package/skills/memory-cleanup/SKILL.md +310 -0
- package/skills/mode-selector/SKILL.md +226 -0
- package/skills/peekaboo-driver/SKILL.md +237 -0
- package/skills/peekaboo-driver/soul.md +32 -0
- package/skills/persona-panel/SKILL.md +365 -0
- package/skills/persona-panel/persona-format.md +205 -0
- package/skills/persona-panel/presets/designer-lens.md +87 -0
- package/skills/persona-panel/presets/engineer-lens.md +88 -0
- package/skills/persona-panel/presets/pm-lens.md +86 -0
- package/skills/plan/SKILL.md +496 -0
- package/skills/plan/mode-feature.md +141 -0
- package/skills/plan/mode-new.md +297 -0
- package/skills/plan/mode-retro.md +271 -0
- package/skills/plan/prd-feature-template.md +132 -0
- package/skills/plan/prd-full-template.md +151 -0
- package/skills/plan/prd-reviewer-prompt.md +103 -0
- package/skills/plan/retro-template.md +75 -0
- package/skills/plan/soul.md +62 -0
- package/skills/playwright-driver/SKILL.md +226 -0
- package/skills/playwright-driver/soul.md +30 -0
- package/skills/quality-gates/SKILL.md +212 -0
- package/skills/reconcile/SKILL.md +324 -0
- package/skills/repo-audit/SKILL.md +272 -0
- package/skills/session-end/SKILL.md +1044 -0
- package/skills/session-end/discovery-scan.md +37 -0
- package/skills/session-end/drift-operations.md +97 -0
- package/skills/session-end/learning-patterns.md +78 -0
- package/skills/session-end/metrics-collection.md +175 -0
- package/skills/session-end/phase-3-2-docs-verification.md +148 -0
- package/skills/session-end/phase-3-6-tail.md +344 -0
- package/skills/session-end/phase-3-7a-recommendations.md +86 -0
- package/skills/session-end/plan-verification.md +288 -0
- package/skills/session-end/session-metrics-write.md +223 -0
- package/skills/session-end/vault-operations.md +50 -0
- package/skills/session-end/verification-checklist.md +20 -0
- package/skills/session-plan/SKILL.md +554 -0
- package/skills/session-plan/wave-template.md +37 -0
- package/skills/session-start/SKILL.md +1043 -0
- package/skills/session-start/phase-2-5-docs-planning.md +119 -0
- package/skills/session-start/phase-4-5-resource-health.md +49 -0
- package/skills/session-start/phase-7-1-premise-check.md +47 -0
- package/skills/session-start/phase-7-5-mode-selector.md +237 -0
- package/skills/session-start/phase-8-5-express-path.md +61 -0
- package/skills/session-start/presentation-format.md +81 -0
- package/skills/session-start/soul.md +57 -0
- package/skills/skill-creator/SKILL.md +168 -0
- package/skills/spinout/SKILL.md +76 -0
- package/skills/sunset-review/SKILL.md +96 -0
- package/skills/test-runner/SKILL.md +362 -0
- package/skills/test-runner/rubric-v1.md +388 -0
- package/skills/test-runner/soul.md +46 -0
- package/skills/tmux-layout/SKILL.md +104 -0
- package/skills/ubiquitous-language/SKILL.md +97 -0
- package/skills/using-orchestrator/SKILL.md +144 -0
- package/skills/vault-mirror/SKILL.md +234 -0
- package/skills/vault-sync/SKILL.md +319 -0
- package/skills/vault-sync/package-lock.json +40 -0
- package/skills/vault-sync/package.json +11 -0
- package/skills/vault-sync/tests/fixtures/archive-test-vault/90-archive/bad-archived.md +8 -0
- package/skills/vault-sync/tests/fixtures/archive-test-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/archive-test-vault/live-note.md +8 -0
- package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/bad-type.md +8 -0
- package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/good-note.md +8 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/.obsidian/config.md +8 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/01-projects/foo/projects-baseline.md +10 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/03-daily/daily-2026-04-13.md +8 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/README.md +3 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/hello-world.md +11 -0
- package/skills/vault-sync/tests/fixtures/dangling-link-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/dangling-link-vault/has-dangling.md +9 -0
- package/skills/vault-sync/tests/fixtures/dangling-link-vault/real-target.md +8 -0
- package/skills/vault-sync/tests/fixtures/empty-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/missing-field-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/missing-field-vault/missing-id.md +7 -0
- package/skills/vault-sync/tests/fixtures/nested-tag-vault/03-daily/daily-2026-04-13.md +9 -0
- package/skills/vault-sync/tests/fixtures/nested-tag-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/nested-tag-vault/nested-tags-note.md +11 -0
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/README.md +3 -0
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/_MOC.md +3 -0
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/with-moc-vault/_MOC.md +11 -0
- package/skills/vault-sync/tests/fixtures/with-moc-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/with-moc-vault/hello-world.md +11 -0
- package/skills/vault-sync/tests/schema-drift.test.mjs +133 -0
- package/skills/vault-sync/validator.mjs +658 -0
- package/skills/vault-sync/validator.sh +55 -0
- package/skills/wave-executor/SKILL.md +496 -0
- package/skills/wave-executor/circuit-breaker.md +169 -0
- package/skills/wave-executor/wave-loop.md +1043 -0
- package/skills/write-executable-plan/SKILL.md +237 -0
- package/skills/write-executable-plan/plan-template.md +154 -0
- package/templates/_minimal/CLAUDE.md.tmpl +41 -0
- package/templates/_minimal/README.md.tmpl +15 -0
- package/templates/_minimal/gitignore.tmpl +47 -0
- package/templates/_shared/harte-regeln.md +16 -0
- package/templates/_shared/loop.md +90 -0
- package/templates/_shared/rules/parallel-sessions.md +77 -0
- package/templates/nextjs-minimal/README.md +30 -0
- package/templates/nextjs-minimal/app/layout.tsx +18 -0
- package/templates/nextjs-minimal/app/page.tsx +7 -0
- package/templates/nextjs-minimal/eslint.config.mjs +16 -0
- package/templates/nextjs-minimal/next.config.mjs +4 -0
- package/templates/nextjs-minimal/package.json +27 -0
- package/templates/nextjs-minimal/tsconfig.json +23 -0
- package/templates/node-minimal/README.md +33 -0
- package/templates/node-minimal/eslint.config.mjs +10 -0
- package/templates/node-minimal/package.json +21 -0
- package/templates/node-minimal/src/index.ts +1 -0
- package/templates/node-minimal/tests/sanity.test.ts +5 -0
- package/templates/node-minimal/tsconfig.json +17 -0
- package/templates/personas/README.md +150 -0
- package/templates/personas/accounting-compliance.v1.md +120 -0
- package/templates/personas/accounting-tax-advisor.v1.md +116 -0
- package/templates/personas/buyer-p1-cto.v1.md +125 -0
- package/templates/personas/buyer-p2-kanzlei.v1.md +134 -0
- package/templates/personas/buyer-p3-build.v1.md +130 -0
- package/templates/personas/buyer-p4-tech-veto.v1.md +130 -0
- package/templates/personas/buyer-p5-solo.v1.md +132 -0
- package/templates/personas/buyer-p6-ld.v1.md +130 -0
- package/templates/personas/klima-ai-expert.v1.md +114 -0
- package/templates/personas/klima-physicist.v1.md +117 -0
- package/templates/python-uv/README.md +28 -0
- package/templates/python-uv/pyproject.toml +32 -0
- package/templates/python-uv/src/__PROJECT_NAME__/__init__.py +0 -0
- package/templates/python-uv/src/__PROJECT_NAME__/main.py +6 -0
- package/templates/python-uv/tests/test_sanity.py +2 -0
- package/templates/static-html/README.md +19 -0
- package/templates/static-html/index.html +15 -0
- package/templates/static-html/script.js +1 -0
- package/templates/static-html/styles.css +26 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "When executing session plan waves via /go command — task sequencing, quality checks, progress tracking"
|
|
3
|
+
globs: ""
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Wave Execution (Cursor Adaptation)
|
|
8
|
+
|
|
9
|
+
> **CRITICAL**: Cursor does NOT have an `Agent()` tool. All wave tasks execute **sequentially in the current Composer session**. You are both the coordinator AND the implementer. Agent dispatch (3-tier resolution: project > plugin > general-purpose) is NOT applicable — follow the role's agent-prompt patterns directly.
|
|
10
|
+
|
|
11
|
+
> **State directory**: All state files live in `.cursor/` (STATE.md, wave-scope.json).
|
|
12
|
+
|
|
13
|
+
## Pre-Execution
|
|
14
|
+
|
|
15
|
+
Before starting Wave 1:
|
|
16
|
+
|
|
17
|
+
1. `git status --short` — commit or stash any uncommitted changes
|
|
18
|
+
2. Capture baseline: `SESSION_START_REF=$(git rev-parse HEAD)` — keep for the whole session
|
|
19
|
+
3. Confirm the agreed plan is still valid
|
|
20
|
+
4. Read `persistence` from Session Config (default: `true`)
|
|
21
|
+
|
|
22
|
+
### Initialize STATE.md (if persistence enabled)
|
|
23
|
+
|
|
24
|
+
Create `.cursor/STATE.md` (`mkdir -p .cursor` if needed):
|
|
25
|
+
|
|
26
|
+
```yaml
|
|
27
|
+
---
|
|
28
|
+
schema-version: 1
|
|
29
|
+
session-type: feature|deep|housekeeping
|
|
30
|
+
branch: <current branch>
|
|
31
|
+
issues: [<issue numbers from plan>]
|
|
32
|
+
started_at: <ISO 8601 timestamp>
|
|
33
|
+
status: active
|
|
34
|
+
current-wave: 0
|
|
35
|
+
total-waves: <from session plan>
|
|
36
|
+
---
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```markdown
|
|
40
|
+
## Current Wave
|
|
41
|
+
|
|
42
|
+
Wave 0 — Initializing
|
|
43
|
+
|
|
44
|
+
## Wave History
|
|
45
|
+
|
|
46
|
+
(none yet)
|
|
47
|
+
|
|
48
|
+
## Deviations
|
|
49
|
+
|
|
50
|
+
(none yet)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Wave Loop
|
|
54
|
+
|
|
55
|
+
For each wave in the session plan:
|
|
56
|
+
|
|
57
|
+
### Step 1: Write Scope Manifest
|
|
58
|
+
|
|
59
|
+
Write `.cursor/wave-scope.json` before each wave. Set `enforcement: warn` — Cursor's afterFileEdit hook is post-hoc (warns only, cannot block):
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"wave": 1,
|
|
64
|
+
"role": "<role>",
|
|
65
|
+
"enforcement": "warn",
|
|
66
|
+
"allowedPaths": ["<union of all task file scopes for this wave>"],
|
|
67
|
+
"blockedCommands": ["rm -rf", "git push --force", "DROP TABLE", "git reset --hard", "git checkout -- ."]
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Role-specific scope rules:
|
|
72
|
+
- **Discovery**: `allowedPaths: []` — READ-ONLY, do not edit files
|
|
73
|
+
- **Quality Phase 1 (Simplification)**: production files changed this session only (no test files)
|
|
74
|
+
- **Quality Phase 2 (Tests)**: test file patterns only (`**/*.test.*`, `**/*.spec.*`, `**/__tests__/**`)
|
|
75
|
+
|
|
76
|
+
Validate with: `bash "$CURSOR_RULES_DIR/../scripts/validate-wave-scope.sh"` — fix JSON if it exits 1.
|
|
77
|
+
|
|
78
|
+
### Step 2: Execute Tasks Sequentially
|
|
79
|
+
|
|
80
|
+
For each task in the wave:
|
|
81
|
+
1. Read the task description and acceptance criteria
|
|
82
|
+
2. Implement the task fully (you are the implementer)
|
|
83
|
+
3. Report status after each task:
|
|
84
|
+
```
|
|
85
|
+
Task "[description]": done|partial|failed — [1-line summary]
|
|
86
|
+
```
|
|
87
|
+
4. If stuck, note the blocker and move to the next task
|
|
88
|
+
|
|
89
|
+
**DO NOT commit during wave execution** — `/close` handles commits.
|
|
90
|
+
|
|
91
|
+
### Step 3: Run Incremental Quality Checks
|
|
92
|
+
|
|
93
|
+
After ALL tasks in the wave complete:
|
|
94
|
+
|
|
95
|
+
| Role | Quality check |
|
|
96
|
+
|------|--------------|
|
|
97
|
+
| Discovery | None (read-only) |
|
|
98
|
+
| Impl-Core | typecheck + test changed files |
|
|
99
|
+
| Impl-Polish | typecheck + test changed files + integration verification |
|
|
100
|
+
| Quality | Full Gate: typecheck + test + lint — all must pass |
|
|
101
|
+
| Finalization | `git status` — verify clean state |
|
|
102
|
+
|
|
103
|
+
### Step 4: Quality Wave — Simplification Pass
|
|
104
|
+
|
|
105
|
+
At the START of the Quality wave, before running tests:
|
|
106
|
+
|
|
107
|
+
1. `git diff --name-only $SESSION_START_REF..HEAD` — list files changed this session
|
|
108
|
+
2. Filter to production files (exclude `*.test.*`, `*.spec.*`, `__tests__/`). If none, skip.
|
|
109
|
+
3. Review each production file for AI-generated patterns and apply targeted cleanup:
|
|
110
|
+
- Remove unnecessary try-catch around non-throwing operations
|
|
111
|
+
- Delete over-documentation (params that restate the name, returns that say "the result")
|
|
112
|
+
- Replace re-implemented stdlib functions with standard alternatives
|
|
113
|
+
- Simplify redundant boolean logic (if/else returning true/false, double negation)
|
|
114
|
+
- **Do NOT change functionality**
|
|
115
|
+
4. After simplification, run Full Gate quality checks (typecheck + test + lint)
|
|
116
|
+
|
|
117
|
+
**Note:** Session-reviewer cannot be dispatched as a subagent on Cursor. Quality review is deferred to session-end Phase 1.8. In-wave quality relies on incremental checks + this simplification pass.
|
|
118
|
+
|
|
119
|
+
### Step 5: Update STATE.md (if persistence enabled)
|
|
120
|
+
|
|
121
|
+
After each wave:
|
|
122
|
+
|
|
123
|
+
1. **Frontmatter**: update `current-wave` to the completed wave number
|
|
124
|
+
2. **`## Current Wave`**: replace with next wave info
|
|
125
|
+
3. **`## Wave History`**: append:
|
|
126
|
+
```
|
|
127
|
+
### Wave N — <Role>
|
|
128
|
+
- Task "[description]": done|partial|failed — [files changed] — [1-line note]
|
|
129
|
+
```
|
|
130
|
+
4. **`## Deviations`**: if plan was adapted, append:
|
|
131
|
+
```
|
|
132
|
+
- [<ISO timestamp>] Wave N: <what changed and why>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Step 6: Capture Wave Metrics (if persistence enabled)
|
|
136
|
+
|
|
137
|
+
Record after each wave:
|
|
138
|
+
- `wave_number`, `role`, `agent_count` (always 1 on Cursor), `files_changed`
|
|
139
|
+
- Per-task results: `{description, status: done|partial|failed}`
|
|
140
|
+
- `quality_check`: pass/fail/skipped
|
|
141
|
+
|
|
142
|
+
This data is written to `.orchestrator/metrics/sessions.jsonl` by session-end.
|
|
143
|
+
|
|
144
|
+
### Step 7: Report Wave Status
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
## Wave [N] ([Role]) Complete
|
|
148
|
+
|
|
149
|
+
- Task 1: [done/partial/failed] — [1-line summary]
|
|
150
|
+
- Task 2: [done/partial/failed] — [1-line summary]
|
|
151
|
+
- Tests: [passing/failing] | TypeScript: [0 errors / N errors]
|
|
152
|
+
- Adaptations for Wave [N+1] ([NextRole]): [none / list changes]
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Step 8: Adapt Plan (if needed)
|
|
156
|
+
|
|
157
|
+
- **On track**: proceed to next wave as planned
|
|
158
|
+
- **Minor issues**: add fix tasks to the next wave
|
|
159
|
+
- **Major blocker**: STOP — inform the user, propose revised plan
|
|
160
|
+
- **Scope change**: document WHY, adjust remaining waves, inform user
|
|
161
|
+
|
|
162
|
+
## Agent-Mapping Config (Reference Only)
|
|
163
|
+
|
|
164
|
+
If Session Config includes `agent-mapping`, use it to determine which role's prompt patterns to follow for each task type (e.g., `db-specialist` patterns for DB tasks). On Cursor this is reference only — no actual agent dispatch occurs.
|
|
165
|
+
|
|
166
|
+
## Circuit Breaker
|
|
167
|
+
|
|
168
|
+
**If the same error appears 3+ times:**
|
|
169
|
+
|
|
170
|
+
1. STOP immediately
|
|
171
|
+
2. Report:
|
|
172
|
+
```
|
|
173
|
+
CIRCUIT BREAKER: Stuck on [error description].
|
|
174
|
+
Attempted [N] times. Same error persists.
|
|
175
|
+
|
|
176
|
+
Options:
|
|
177
|
+
1. Narrow scope and retry with a different approach
|
|
178
|
+
2. Skip this task and continue with remaining waves
|
|
179
|
+
3. Abort session
|
|
180
|
+
```
|
|
181
|
+
3. Wait for user decision
|
|
182
|
+
|
|
183
|
+
**Spiral indicators**: same file edited 3+ times without progress, same error repeating, reverting own changes.
|
|
184
|
+
|
|
185
|
+
## Session Type Behavior
|
|
186
|
+
|
|
187
|
+
| Type | Behavior |
|
|
188
|
+
|------|----------|
|
|
189
|
+
| Housekeeping | Serial tasks, no wave-scope.json, Baseline QC at end, single commit via /close |
|
|
190
|
+
| Feature | Full 5-role wave execution, incremental QC |
|
|
191
|
+
| Deep | Full 5-role wave execution, extra emphasis on Discovery and Quality roles |
|
|
192
|
+
|
|
193
|
+
## Completion
|
|
194
|
+
|
|
195
|
+
After the final (Finalization) wave:
|
|
196
|
+
1. Delete `.cursor/wave-scope.json`
|
|
197
|
+
2. Report final status to the user
|
|
198
|
+
3. Suggest running `/close` — do NOT auto-commit
|
|
199
|
+
|
|
200
|
+
## Error Recovery
|
|
201
|
+
|
|
202
|
+
| Situation | Action |
|
|
203
|
+
|-----------|--------|
|
|
204
|
+
| Tests fail after wave | Diagnose and fix, don't skip |
|
|
205
|
+
| TypeScript errors introduced | Track count, fix by Quality wave |
|
|
206
|
+
| New critical issue discovered | Inform user, add to remaining waves if in scope |
|
|
207
|
+
| Edits to wrong files | Revert via git, redo with correct scope |
|
|
208
|
+
| Stuck in loop | Trigger circuit breaker (see above) |
|
|
209
|
+
|
|
210
|
+
## Anti-Patterns
|
|
211
|
+
|
|
212
|
+
- **NEVER** skip inter-wave review — quality degrades exponentially
|
|
213
|
+
- **NEVER** commit during wave execution — `/close` handles that
|
|
214
|
+
- **NEVER** continue to next wave with unresolved failures
|
|
215
|
+
- **NEVER** execute without reporting progress to the user
|
|
216
|
+
- **NEVER** modify files outside the wave's `allowedPaths`
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "When the user types /discovery or requests quality analysis, code audit, or issue detection"
|
|
3
|
+
globs: ""
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Discovery — Quality Analysis & Issue Detection
|
|
8
|
+
|
|
9
|
+
Systematic quality discovery that runs modular probes adapted to the project's tech stack, presents findings interactively, and creates VCS issues for confirmed problems.
|
|
10
|
+
|
|
11
|
+
## Invocation
|
|
12
|
+
|
|
13
|
+
- **Standalone** (`/discovery [scope]`): Full flow with interactive triage (Phases 0-5 + Phase 6 stats)
|
|
14
|
+
- **Embedded** (from session-end when `discovery-on-close: true`): Phases 0-3 only, returns structured JSON to caller
|
|
15
|
+
|
|
16
|
+
Scope accepts: `all` (default), `code`, `infra`, `ui`, `arch`, `session`, `audit`, `vault`, `feature`, or comma-separated like `code,session`.
|
|
17
|
+
|
|
18
|
+
## Phase 0: Read Session Config
|
|
19
|
+
|
|
20
|
+
Read Session Config from CLAUDE.md. Parse discovery-specific fields:
|
|
21
|
+
- `discovery-probes`, `discovery-exclude-paths`, `discovery-severity-threshold`, `discovery-confidence-threshold`, `discovery-on-close`
|
|
22
|
+
|
|
23
|
+
## Phase 1: Stack Detection
|
|
24
|
+
|
|
25
|
+
Detect the project's tech stack via marker file checks (Glob):
|
|
26
|
+
|
|
27
|
+
| Marker File(s) | Activates |
|
|
28
|
+
|----------------|-----------|
|
|
29
|
+
| `package.json` | JS/TS probes |
|
|
30
|
+
| `tsconfig.json` | TypeScript probes |
|
|
31
|
+
| `requirements.txt` / `pyproject.toml` | Python probes |
|
|
32
|
+
| `Dockerfile` / `docker-compose.yml` | Container probes |
|
|
33
|
+
| `.github/workflows/` | GitHub CI probes |
|
|
34
|
+
| `.gitlab-ci.yml` | GitLab CI probes |
|
|
35
|
+
| `next.config.*` / `nuxt.config.*` | SSR probes |
|
|
36
|
+
| `tailwind.config.*` | Tailwind probes |
|
|
37
|
+
| `.orchestrator/` exists | Session probes |
|
|
38
|
+
|
|
39
|
+
Build activation set: start with marker-matched probes → intersect `discovery-probes` config (if set) → restrict to scope argument (if passed).
|
|
40
|
+
|
|
41
|
+
Default exclude paths (always apply): `node_modules/`, `.git/`, `dist/`, `build/`, `.next/`, `.nuxt/`, `coverage/`. Add paths from `discovery-exclude-paths`.
|
|
42
|
+
|
|
43
|
+
Report: "Discovery: [N] probes active across [categories]. Stack: [detected]. Threshold: [severity]."
|
|
44
|
+
|
|
45
|
+
## Phase 2: Probe Execution
|
|
46
|
+
|
|
47
|
+
Run probes **sequentially** — Cursor has no parallel agents. One category at a time. Complete each category's analysis before moving to the next.
|
|
48
|
+
|
|
49
|
+
### 6 Probe Categories
|
|
50
|
+
|
|
51
|
+
**Code probes** (any project with source files):
|
|
52
|
+
- `hardcoded-values`, `orphaned-annotations`, `dead-code`, `ai-slop`, `type-safety-gaps`, `test-coverage-gaps`, `test-anti-patterns`, `security-basics`
|
|
53
|
+
|
|
54
|
+
**Infra probes** (when CI/Docker markers found):
|
|
55
|
+
- CI configuration issues, Dockerfile anti-patterns
|
|
56
|
+
|
|
57
|
+
**UI probes** (when frontend frameworks detected):
|
|
58
|
+
- Accessibility gaps, component anti-patterns
|
|
59
|
+
|
|
60
|
+
**Arch probes** (any project):
|
|
61
|
+
- Circular dependencies, complexity hotspots, deep nesting
|
|
62
|
+
|
|
63
|
+
**Session probes** (when `.orchestrator/` exists):
|
|
64
|
+
- Session metric anomalies, recurring failures, stale learnings
|
|
65
|
+
|
|
66
|
+
For each probe match, record a finding in this exact format:
|
|
67
|
+
```
|
|
68
|
+
FINDING:
|
|
69
|
+
probe: <probe_name>
|
|
70
|
+
category: <category>
|
|
71
|
+
severity: <critical|high|medium|low>
|
|
72
|
+
file_path: <absolute path>
|
|
73
|
+
line_number: <number>
|
|
74
|
+
matched_text: <exact text from tool output>
|
|
75
|
+
title: <short title>
|
|
76
|
+
description: <1-2 sentence description>
|
|
77
|
+
recommended_fix: <concrete fix suggestion>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
If a probe's activation condition is not met, skip with note. If a probe command fails, skip gracefully and continue.
|
|
81
|
+
|
|
82
|
+
**CRITICAL**: Do NOT fabricate findings. Only report what tool output confirms.
|
|
83
|
+
|
|
84
|
+
### Key Detection Patterns
|
|
85
|
+
|
|
86
|
+
| Probe | Severity | Pattern |
|
|
87
|
+
|-------|----------|---------|
|
|
88
|
+
| Hardcoded secrets | Critical | `(password\|api_key\|secret\|token)\s*[:=]\s*["'][^"']+["']` (exclude test/env/fixtures) |
|
|
89
|
+
| eval usage | High | `eval\s*\(` |
|
|
90
|
+
| XSS (React) | High | `dangerouslySetInnerHTML` |
|
|
91
|
+
| SQL injection | High | `` `[^`]*SELECT[^`]*\$\{`` |
|
|
92
|
+
| any type | Medium | `:\s*any\b` or `as\s+any\b` |
|
|
93
|
+
| TS suppression | Medium | `@ts-ignore` |
|
|
94
|
+
| AI filler | Medium | `(as you can see\|it's worth noting\|needless to say)` |
|
|
95
|
+
|
|
96
|
+
## Phase 3: Verification & Scoring
|
|
97
|
+
|
|
98
|
+
### 3.1 Verify Each Finding
|
|
99
|
+
|
|
100
|
+
For EACH finding: read the file at `file_path:line_number`. Confirm `matched_text` appears at or near that line (+/-3 lines tolerance). If NOT confirmed, discard as false positive.
|
|
101
|
+
|
|
102
|
+
Report: "Verification: N confirmed, M discarded as false positives"
|
|
103
|
+
|
|
104
|
+
### 3.2 Confidence Scoring
|
|
105
|
+
|
|
106
|
+
Start at 40 baseline, add factor scores, clamp to 0-100. Critical severity findings always get minimum 70.
|
|
107
|
+
|
|
108
|
+
| Factor | Low (+0) | Medium (+10) | High (+20) |
|
|
109
|
+
|--------|----------|-------------|------------|
|
|
110
|
+
| Pattern specificity | Generic (URL, TODO) | Moderate (orphaned annotation) | Specific (API key regex, eval()) |
|
|
111
|
+
| File context | Test/example/docs | Utility/config/scripts | Production source/API handler |
|
|
112
|
+
| Historical signal | Previously dismissed | No prior data | Recurring issue |
|
|
113
|
+
|
|
114
|
+
Read `discovery-confidence-threshold` from config (default: 60).
|
|
115
|
+
|
|
116
|
+
### 3.3 Deduplication
|
|
117
|
+
|
|
118
|
+
Same `file_path` + overlapping line range (+/-5 lines) + different probes = duplicate. Keep higher severity finding.
|
|
119
|
+
|
|
120
|
+
### 3.4 Apply Thresholds
|
|
121
|
+
|
|
122
|
+
Remove findings below `discovery-severity-threshold` and below `discovery-confidence-threshold`. Log auto-dismissed count.
|
|
123
|
+
|
|
124
|
+
### 3.5 Embedded Mode Exit
|
|
125
|
+
|
|
126
|
+
If in embedded mode (called from session-end): STOP HERE. Return this JSON schema:
|
|
127
|
+
|
|
128
|
+
```json
|
|
129
|
+
{
|
|
130
|
+
"findings": [
|
|
131
|
+
{"probe": "string", "category": "string", "severity": "critical|high|medium|low",
|
|
132
|
+
"confidence": 0, "file": "string", "line": 0, "description": "string", "recommendation": "string"}
|
|
133
|
+
],
|
|
134
|
+
"stats": {
|
|
135
|
+
"probes_run": 0, "findings_raw": 0, "verified": 0,
|
|
136
|
+
"false_positives": 0, "by_category": {"<category>": {"findings": 0}}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Phase 4: Interactive Triage (Standalone Only)
|
|
142
|
+
|
|
143
|
+
Use **numbered Markdown lists** for all choices — Cursor does not have AskUserQuestion.
|
|
144
|
+
|
|
145
|
+
### Step 1: Summary Table
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
## Discovery Results
|
|
149
|
+
|
|
150
|
+
Probes run: [N] | Findings verified: [N] | False positives discarded: [N]
|
|
151
|
+
|
|
152
|
+
| Category | Critical | High | Medium | Low | Total |
|
|
153
|
+
|----------|----------|------|--------|-----|-------|
|
|
154
|
+
| Code | ... | ... | ... | ... | ... |
|
|
155
|
+
| Infra | ... | ... | ... | ... | ... |
|
|
156
|
+
| UI | ... | ... | ... | ... | ... |
|
|
157
|
+
| Arch | ... | ... | ... | ... | ... |
|
|
158
|
+
| Session | ... | ... | ... | ... | ... |
|
|
159
|
+
| Audit | ... | ... | ... | ... | ... |
|
|
160
|
+
| Vault | ... | ... | ... | ... | ... |
|
|
161
|
+
| Feature | ... | ... | ... | ... | ... |
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Step 2: Critical + High Findings — Review Individually
|
|
165
|
+
|
|
166
|
+
For each Critical or High finding, present with file context (+/-3 lines):
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
[CRITICAL] (confidence: 85) hardcoded-values: API key found in src/config.ts:42
|
|
170
|
+
|
|
171
|
+
<file context>
|
|
172
|
+
|
|
173
|
+
Recommended fix: <suggestion>
|
|
174
|
+
|
|
175
|
+
Options:
|
|
176
|
+
1. Create issue (critical)
|
|
177
|
+
2. Adjust priority
|
|
178
|
+
3. Dismiss — intentional
|
|
179
|
+
4. Dismiss — false positive
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Step 3: Medium + Low Findings — Review Batched
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
[N] medium/low findings in [category]:
|
|
186
|
+
1. [title] — [file_path]:[line] ([severity])
|
|
187
|
+
|
|
188
|
+
Options:
|
|
189
|
+
1. Accept all (Recommended) — create issues for all
|
|
190
|
+
2. Review individually
|
|
191
|
+
3. Dismiss all
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Step 4: Batch Confirmation
|
|
195
|
+
|
|
196
|
+
```
|
|
197
|
+
Ready to create [N] issues? ([X] critical, [Y] high, [Z] medium, [W] low)
|
|
198
|
+
|
|
199
|
+
1. Create all [N] issues (Recommended)
|
|
200
|
+
2. Review list first
|
|
201
|
+
3. Cancel
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## Phase 5: Issue Creation
|
|
205
|
+
|
|
206
|
+
For each approved finding:
|
|
207
|
+
1. Format using gitlab-ops discovery issue template
|
|
208
|
+
2. Labels: `type:discovery` + `priority:<level>` + `area:<inferred>` + `status:ready`
|
|
209
|
+
3. **GitLab**: `glab issue create --title "[Discovery] <title>" --label "type:discovery,priority:<level>,area:<area>,status:ready" --description "<body>"`
|
|
210
|
+
4. **GitHub**: `gh issue create --title "[Discovery] <title>" --label "..." --body "<body>"`
|
|
211
|
+
5. Brief pause (1s) between creations
|
|
212
|
+
|
|
213
|
+
### Final Report
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
## Discovery Report
|
|
217
|
+
- Probes run: [N] across [categories]
|
|
218
|
+
- Verified: [N] (false positives: [M])
|
|
219
|
+
- User approved: [N]
|
|
220
|
+
- Issues created: [N]
|
|
221
|
+
|
|
222
|
+
| # | Title | Priority | Area | Probe |
|
|
223
|
+
|---|-------|----------|------|-------|
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Phase 6: Capture Stats (Standalone Only)
|
|
227
|
+
|
|
228
|
+
After Phase 5, prepare stats for session metrics (do NOT write to `sessions.jsonl` directly — session-end handles that):
|
|
229
|
+
|
|
230
|
+
- `probes_run`, `findings_raw`, `findings_verified`, `false_positives`, `user_dismissed`, `issues_created`, `by_category`
|
|
231
|
+
|
|
232
|
+
Report: "Discovery stats: [probes_run] probes, [findings_raw] raw → [findings_verified] verified ([false_positives] false positives). Created [issues_created] issues."
|
|
233
|
+
|
|
234
|
+
## Critical Rules
|
|
235
|
+
|
|
236
|
+
- **NEVER** fabricate findings — every finding must come from tool output with verifiable evidence
|
|
237
|
+
- **NEVER** create issues without user approval (standalone mode)
|
|
238
|
+
- **ALWAYS** verify findings by re-reading the file at the reported line (Phase 3)
|
|
239
|
+
- **ALWAYS** use numbered Markdown lists for choices — Cursor has no AskUserQuestion
|
|
240
|
+
- If a probe command fails, skip gracefully, continue with others
|
|
241
|
+
- If in embedded mode, stop after Phase 3, return findings as structured JSON
|
|
242
|
+
- Default exclude paths always apply
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "When the user types /plan or asks to create a project plan, feature PRD, or retrospective"
|
|
3
|
+
globs: ""
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Plan — Structured Project Planning & PRD Generation
|
|
8
|
+
|
|
9
|
+
Three planning modes with a shared research-driven Q&A engine. Pattern across all modes: **research → questions → document → review → issues**.
|
|
10
|
+
|
|
11
|
+
## Phase 0: Read Session Config
|
|
12
|
+
|
|
13
|
+
Read Session Config from CLAUDE.md. Required field: `plan-baseline-path`. If missing or absent, stop with error:
|
|
14
|
+
|
|
15
|
+
> "Error: `plan-baseline-path` is not configured in Session Config. Add it to your CLAUDE.md under `## Session Config`. Example: `plan-baseline-path: ~/Projects/projects-baseline`"
|
|
16
|
+
|
|
17
|
+
Additional fields: `plan-default-visibility`, `plan-prd-location`, `plan-retro-location`, `vcs`. Expand `~` in paths.
|
|
18
|
+
|
|
19
|
+
## Phase 1: Mode Selection
|
|
20
|
+
|
|
21
|
+
Parse the argument to determine mode:
|
|
22
|
+
|
|
23
|
+
- **`new`** — Project kickoff: scaffolding, architecture decisions, initial setup
|
|
24
|
+
- **`feature`** — Feature PRD: requirements gathering, compact scope, acceptance criteria
|
|
25
|
+
- **`retro`** — Retrospective: data-driven analysis of recent work, learnings extraction
|
|
26
|
+
|
|
27
|
+
If no mode specified, ask via numbered list:
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
Which planning mode?
|
|
31
|
+
|
|
32
|
+
1. new (Recommended) — Project kickoff (full PRD, repo setup, issue creation)
|
|
33
|
+
2. feature — Feature PRD (compact scope, acceptance criteria, issues)
|
|
34
|
+
3. retro — Retrospective (metrics analysis, reflection, improvement actions)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Phase 2: Q&A Engine (Shared Core)
|
|
38
|
+
|
|
39
|
+
Every question wave follows the same pattern. This is the core mechanic across all modes.
|
|
40
|
+
|
|
41
|
+
### 2.1 Pre-Question Research
|
|
42
|
+
|
|
43
|
+
Before each Q&A wave, perform research **sequentially** — Cursor has no parallel agents:
|
|
44
|
+
|
|
45
|
+
1. **Market/online context** — Search for relevant market data, best practices, competitor analysis, or technical patterns for the upcoming questions
|
|
46
|
+
2. **Baseline analysis** — Read projects-baseline templates, rules, and scripts at `$BASELINE_PATH` (Glob, Grep, Read)
|
|
47
|
+
3. **Repo context** — Analyze current repository for patterns, file structure, dependencies, conventions (skip for `/plan new` wave 1)
|
|
48
|
+
|
|
49
|
+
### 2.2 Question Presentation
|
|
50
|
+
|
|
51
|
+
Synthesize research into **5 questions per wave**. Present as numbered Markdown lists — Cursor has no AskUserQuestion:
|
|
52
|
+
|
|
53
|
+
- **Option 1 is ALWAYS the recommendation**, marked with `(Recommended)`
|
|
54
|
+
- Include Pros/Cons drawn from the research for each option
|
|
55
|
+
- Include an "Other" option when custom input makes sense
|
|
56
|
+
|
|
57
|
+
Example:
|
|
58
|
+
```
|
|
59
|
+
## Architecture (Wave 1, Q1)
|
|
60
|
+
|
|
61
|
+
Which project archetype fits best?
|
|
62
|
+
|
|
63
|
+
1. nextjs-saas (Recommended) — Pro: Full SaaS stack with auth, payments. Con: Heavier setup.
|
|
64
|
+
2. express-service — Pro: Lightweight API. Con: No frontend.
|
|
65
|
+
3. docker-service — Pro: Maximum flexibility. Con: More manual setup.
|
|
66
|
+
4. Other — Describe your preferred archetype.
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 2.3 Adaptive Depth
|
|
70
|
+
|
|
71
|
+
Starting wave counts: `new` → 3 waves minimum, `feature` → 1 wave minimum, `retro` → 1 wave minimum. Maximum 5 waves across all modes.
|
|
72
|
+
|
|
73
|
+
After each wave:
|
|
74
|
+
- **Answers clear** → proceed to document generation
|
|
75
|
+
- **Complexity revealed** → add targeted follow-up wave
|
|
76
|
+
- **User aborts** → proceed with answers gathered
|
|
77
|
+
|
|
78
|
+
### 2.4 Answer Tracking
|
|
79
|
+
|
|
80
|
+
After each wave, output a recap:
|
|
81
|
+
```
|
|
82
|
+
## Answers So Far (Wave N/M)
|
|
83
|
+
1. Archetype: nextjs-saas
|
|
84
|
+
2. Visibility: internal
|
|
85
|
+
3. Audience: B2B customers
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Mode: new — Project Kickoff
|
|
91
|
+
|
|
92
|
+
**Wave 1** — Core Decisions: archetype (read `$BASELINE_PATH/templates/`), visibility, target audience, core problem, GitLab group.
|
|
93
|
+
|
|
94
|
+
**Wave 2** — Technical Details (per chosen archetype): tech stack decisions, design style, external integrations, performance requirements, security requirements.
|
|
95
|
+
|
|
96
|
+
**Wave 3** — Business & Scope: MVP appetite (1w/2w/6w), success criteria (SMART), known risks, post-launch plan, ecosystem dependencies.
|
|
97
|
+
|
|
98
|
+
Document: 8-section full PRD. Save to `{plan-prd-location}/YYYY-MM-DD-{project-name}.md`.
|
|
99
|
+
|
|
100
|
+
After PRD approval: run `$BASELINE_PATH/scripts/setup-project.sh`, verify repo, populate CLAUDE.md, commit PRD.
|
|
101
|
+
|
|
102
|
+
Issues: Epic (project name) + sub-issues per MVP feature from PRD Section 4 (Solution & Scope).
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Mode: feature — Feature PRD
|
|
107
|
+
|
|
108
|
+
**Wave 1** — Feature Core: what to build, why now, who uses it, scope + explicit exclusions, dependencies.
|
|
109
|
+
|
|
110
|
+
**Wave 2** (conditional — only if Wave 1 reveals multiple subsystems or unclear integration): architecture decisions, integration points, data model changes, edge cases, performance impact.
|
|
111
|
+
|
|
112
|
+
Document: 5-section compact PRD. Save to `{plan-prd-location}/YYYY-MM-DD-{feature-slug}.md`.
|
|
113
|
+
|
|
114
|
+
Issues: Epic (feature name) + sub-issues per acceptance criterion group.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Mode: retro — Retrospective
|
|
119
|
+
|
|
120
|
+
**Phase 1 (automatic, no user input):** Read `.orchestrator/metrics/sessions.jsonl`, run git log analysis, query open issues, compare last 5 vs prior 5 sessions.
|
|
121
|
+
|
|
122
|
+
**Wave 1** — What went well / what didn't: highlights, blockers with root causes, carryover items, process assessment, data anomalies.
|
|
123
|
+
|
|
124
|
+
**Wave 2** (conditional — if Wave 1 reveals significant blockers or process issues): improvement actions, priority ranking, ownership, baseline changes, Session Config adjustments.
|
|
125
|
+
|
|
126
|
+
Artifacts: retro doc → `{plan-retro-location}/YYYY-MM-DD-retro.md`. Improvement issues + learnings update (`.orchestrator/metrics/learnings.jsonl`).
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Phase 3: Document Generation
|
|
131
|
+
|
|
132
|
+
Read the appropriate template from the skill directory:
|
|
133
|
+
- `new` → `prd-full-template.md` (8 sections)
|
|
134
|
+
- `feature` → `prd-feature-template.md` (5 sections)
|
|
135
|
+
- `retro` → `retro-template.md`
|
|
136
|
+
|
|
137
|
+
Fill ALL sections — no TBD or placeholder content. If a section cannot be filled from gathered data, make a best-effort recommendation and mark it `<!-- REVIEW: inferred from research, confirm with stakeholders -->`.
|
|
138
|
+
|
|
139
|
+
Save the document, creating the target directory (`mkdir -p`) if needed.
|
|
140
|
+
|
|
141
|
+
## Phase 4: PRD Review (skip for retro)
|
|
142
|
+
|
|
143
|
+
Dispatch a sequential self-review (read `prd-reviewer-prompt.md` from skill directory). Reviewer checks 6 criteria:
|
|
144
|
+
1. **Completeness** — all sections filled
|
|
145
|
+
2. **Consistency** — no internal contradictions
|
|
146
|
+
3. **Clarity** — implementable by a developer from this document alone
|
|
147
|
+
4. **Scope** — focused on one project/feature
|
|
148
|
+
5. **YAGNI** — no unrequested features
|
|
149
|
+
6. **SMART metrics** — success criteria are measurable
|
|
150
|
+
|
|
151
|
+
If any criterion fails, revise and re-review. Maximum **3 iterations**. After 3 rounds with remaining issues, present to user as numbered list:
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
The PRD reviewer flagged these remaining issues:
|
|
155
|
+
[list]
|
|
156
|
+
|
|
157
|
+
1. Accept as-is (Recommended) — issues are minor, proceed
|
|
158
|
+
2. Manual edit — I'll edit the PRD myself before continuing
|
|
159
|
+
3. Re-run review — try one more revision round
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Then present the saved PRD path and ask for final approval:
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
PRD saved to [path]. Ready for your review.
|
|
166
|
+
|
|
167
|
+
1. Approve PRD (Recommended) — proceed to issue creation
|
|
168
|
+
2. Request changes — describe what to change
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Phase 5: Issue Creation
|
|
172
|
+
|
|
173
|
+
### Auto-Prioritize
|
|
174
|
+
|
|
175
|
+
Score each issue by three factors:
|
|
176
|
+
1. **Technical dependencies** (highest weight) — blocking issues get `priority:critical` or `priority:high`. DB schema before API, API before frontend.
|
|
177
|
+
2. **Business value** (medium weight) — core MVP = `priority:high`, nice-to-haves = `priority:medium/low`.
|
|
178
|
+
3. **Risk** (tiebreaker) — unknowns or external dependencies bump priority up one level.
|
|
179
|
+
|
|
180
|
+
Labels: `priority:<level>`, `type:feature/enhancement/chore`, `status:ready`, `area:<inferred>`. For `new`: add `appetite:<1w|2w|6w>`.
|
|
181
|
+
|
|
182
|
+
### User Confirmation (numbered list)
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
Proposed issue structure:
|
|
186
|
+
|
|
187
|
+
Epic: [title]
|
|
188
|
+
|
|
189
|
+
| # | Sub-Issue | Priority | Labels | Blocked By |
|
|
190
|
+
|---|-----------|----------|--------|------------|
|
|
191
|
+
|
|
192
|
+
Total: [N] issues.
|
|
193
|
+
|
|
194
|
+
1. Create all issues (Recommended)
|
|
195
|
+
2. Adjust priorities
|
|
196
|
+
3. Remove issues
|
|
197
|
+
4. Cancel
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Issue Creation
|
|
201
|
+
|
|
202
|
+
- **GitLab**: `glab issue create --title "[Plan] <title>" --label "<labels>" --description "<body>"`
|
|
203
|
+
- **GitHub**: `gh issue create --title "[Plan] <title>" --label "<labels>" --body "<body>"`
|
|
204
|
+
- 1s pause between creations. Set dependency links after all issues are created (GitLab: `glab api` blocking relations).
|
|
205
|
+
|
|
206
|
+
### Final Report
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
## Plan Complete
|
|
210
|
+
|
|
211
|
+
### Document
|
|
212
|
+
- [PRD/Retro] saved to: [path]
|
|
213
|
+
|
|
214
|
+
### Issues Created
|
|
215
|
+
| # | Title | Priority | Labels | Blocks |
|
|
216
|
+
|---|-------|----------|--------|--------|
|
|
217
|
+
|
|
218
|
+
### Dependencies
|
|
219
|
+
[Dependency graph: #1 → #2 → #4, #3 (independent)]
|
|
220
|
+
|
|
221
|
+
### Next Steps
|
|
222
|
+
- [Contextual: run /session feature to implement, or address improvement issues]
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## Critical Rules
|
|
226
|
+
|
|
227
|
+
- **NEVER skip the Q&A phase** — even with a detailed brief, validate through structured questions
|
|
228
|
+
- **NEVER assume baseline templates** — always read from the configured `plan-baseline-path`
|
|
229
|
+
- **ALWAYS research before asking** — sequential research before every Q&A wave
|
|
230
|
+
- **ALWAYS mark Option 1 as recommended** — with `(Recommended)` on every question
|
|
231
|
+
- **ALWAYS use numbered Markdown lists** — Cursor has no AskUserQuestion
|
|
232
|
+
- **ALWAYS save documents before creating issues** — the PRD/retro document is the source of truth
|
|
233
|
+
- **NEVER leave PRD sections with TBD** — make a best-effort recommendation if data is insufficient
|
|
234
|
+
- **NEVER create issues without user confirmation**
|
|
235
|
+
- **NEVER include internal paths, IPs, or infrastructure details in output documents**
|