@therocketcode/gsd-core 1.4.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 +21 -0
- package/README.ja-JP.md +125 -0
- package/README.ko-KR.md +125 -0
- package/README.md +144 -0
- package/README.pt-BR.md +125 -0
- package/README.zh-CN.md +125 -0
- package/agents/gsd-advisor-researcher.md +108 -0
- package/agents/gsd-ai-researcher.md +114 -0
- package/agents/gsd-assumptions-analyzer.md +105 -0
- package/agents/gsd-code-fixer.md +668 -0
- package/agents/gsd-code-reviewer.md +387 -0
- package/agents/gsd-codebase-mapper.md +853 -0
- package/agents/gsd-debug-session-manager.md +314 -0
- package/agents/gsd-debugger.md +1452 -0
- package/agents/gsd-doc-classifier.md +168 -0
- package/agents/gsd-doc-synthesizer.md +204 -0
- package/agents/gsd-doc-verifier.md +217 -0
- package/agents/gsd-doc-writer.md +616 -0
- package/agents/gsd-domain-researcher.md +147 -0
- package/agents/gsd-eval-auditor.md +191 -0
- package/agents/gsd-eval-planner.md +154 -0
- package/agents/gsd-executor.md +785 -0
- package/agents/gsd-framework-selector.md +160 -0
- package/agents/gsd-integration-checker.md +470 -0
- package/agents/gsd-intel-updater.md +342 -0
- package/agents/gsd-nyquist-auditor.md +203 -0
- package/agents/gsd-pattern-mapper.md +335 -0
- package/agents/gsd-phase-researcher.md +867 -0
- package/agents/gsd-plan-checker.md +978 -0
- package/agents/gsd-planner.md +1204 -0
- package/agents/gsd-project-researcher.md +611 -0
- package/agents/gsd-research-synthesizer.md +259 -0
- package/agents/gsd-roadmapper.md +688 -0
- package/agents/gsd-security-auditor.md +155 -0
- package/agents/gsd-ui-auditor.md +495 -0
- package/agents/gsd-ui-checker.md +309 -0
- package/agents/gsd-ui-researcher.md +374 -0
- package/agents/gsd-user-profiler.md +171 -0
- package/agents/gsd-verifier.md +923 -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 +12726 -0
- package/bin/lib/ui-safety-gate.cjs +107 -0
- package/commands/gsd/add-tests.md +42 -0
- package/commands/gsd/ai-integration-phase.md +37 -0
- package/commands/gsd/audit-fix.md +34 -0
- package/commands/gsd/audit-milestone.md +37 -0
- package/commands/gsd/audit-uat.md +24 -0
- package/commands/gsd/autonomous.md +48 -0
- package/commands/gsd/capture.md +62 -0
- package/commands/gsd/cleanup.md +24 -0
- package/commands/gsd/code-review.md +59 -0
- package/commands/gsd/complete-milestone.md +143 -0
- package/commands/gsd/config.md +56 -0
- package/commands/gsd/debug.md +52 -0
- package/commands/gsd/discover-product.md +65 -0
- package/commands/gsd/discuss-phase.md +77 -0
- package/commands/gsd/docs-update.md +49 -0
- package/commands/gsd/eval-review.md +33 -0
- package/commands/gsd/execute-phase.md +66 -0
- package/commands/gsd/explore.md +27 -0
- package/commands/gsd/extract-learnings.md +23 -0
- package/commands/gsd/fast.md +31 -0
- package/commands/gsd/forensics.md +57 -0
- package/commands/gsd/graphify.md +204 -0
- package/commands/gsd/health.md +31 -0
- package/commands/gsd/help.md +28 -0
- package/commands/gsd/import.md +45 -0
- package/commands/gsd/inbox.md +39 -0
- package/commands/gsd/ingest-docs.md +42 -0
- package/commands/gsd/manager.md +45 -0
- package/commands/gsd/map-codebase.md +83 -0
- package/commands/gsd/milestone-summary.md +51 -0
- package/commands/gsd/model-domain.md +65 -0
- package/commands/gsd/mvp-phase.md +45 -0
- package/commands/gsd/new-milestone.md +45 -0
- package/commands/gsd/new-project.md +47 -0
- package/commands/gsd/ns-context.md +23 -0
- package/commands/gsd/ns-ideate.md +24 -0
- package/commands/gsd/ns-manage.md +29 -0
- package/commands/gsd/ns-project.md +22 -0
- package/commands/gsd/ns-review.md +26 -0
- package/commands/gsd/ns-workflow.md +28 -0
- package/commands/gsd/pause-work.md +43 -0
- package/commands/gsd/phase.md +56 -0
- package/commands/gsd/plan-phase.md +64 -0
- package/commands/gsd/plan-review-convergence.md +59 -0
- package/commands/gsd/pr-branch.md +26 -0
- package/commands/gsd/profile-user.md +46 -0
- package/commands/gsd/progress.md +48 -0
- package/commands/gsd/quick.md +174 -0
- package/commands/gsd/recommend-architecture.md +64 -0
- package/commands/gsd/resume-work.md +30 -0
- package/commands/gsd/review-backlog.md +63 -0
- package/commands/gsd/review.md +42 -0
- package/commands/gsd/secure-phase.md +36 -0
- package/commands/gsd/settings.md +29 -0
- package/commands/gsd/ship.md +24 -0
- package/commands/gsd/sketch.md +60 -0
- package/commands/gsd/spec-phase.md +63 -0
- package/commands/gsd/spike.md +57 -0
- package/commands/gsd/stats.md +20 -0
- package/commands/gsd/surface.md +155 -0
- package/commands/gsd/testing-strategy.md +65 -0
- package/commands/gsd/thread.md +24 -0
- package/commands/gsd/ui-phase.md +35 -0
- package/commands/gsd/ui-review.md +33 -0
- package/commands/gsd/ultraplan-phase.md +34 -0
- package/commands/gsd/undo.md +35 -0
- package/commands/gsd/update.md +49 -0
- package/commands/gsd/validate-phase.md +36 -0
- package/commands/gsd/verify-work.md +39 -0
- package/commands/gsd/workspace.md +52 -0
- package/commands/gsd/workstreams.md +70 -0
- package/gemini-extension.json +6 -0
- package/gsd-core/bin/check-latest-version.cjs +161 -0
- package/gsd-core/bin/gsd-tools.cjs +1928 -0
- package/gsd-core/bin/lib/active-workstream-store.cjs +291 -0
- package/gsd-core/bin/lib/adr-parser.cjs +399 -0
- package/gsd-core/bin/lib/agent-command-router.cjs +68 -0
- package/gsd-core/bin/lib/artifacts.cjs +51 -0
- package/gsd-core/bin/lib/audit.cjs +743 -0
- package/gsd-core/bin/lib/check-command-router.cjs +343 -0
- package/gsd-core/bin/lib/cjs-command-router-adapter.cjs +81 -0
- package/gsd-core/bin/lib/cli-exit.cjs +42 -0
- package/gsd-core/bin/lib/clock.cjs +95 -0
- package/gsd-core/bin/lib/clusters.cjs +132 -0
- package/gsd-core/bin/lib/code-review-flags.cjs +59 -0
- package/gsd-core/bin/lib/command-aliases.cjs +809 -0
- package/gsd-core/bin/lib/command-arg-projection.cjs +55 -0
- package/gsd-core/bin/lib/command-routing-hub.cjs +300 -0
- package/gsd-core/bin/lib/commands.cjs +1203 -0
- package/gsd-core/bin/lib/config-schema.cjs +29 -0
- package/gsd-core/bin/lib/config-types.cjs +19 -0
- package/gsd-core/bin/lib/config.cjs +738 -0
- package/gsd-core/bin/lib/configuration.cjs +239 -0
- package/gsd-core/bin/lib/context-utilization.cjs +48 -0
- package/gsd-core/bin/lib/core.cjs +2051 -0
- package/gsd-core/bin/lib/decisions.cjs +118 -0
- package/gsd-core/bin/lib/docs.cjs +252 -0
- package/gsd-core/bin/lib/drift.cjs +364 -0
- package/gsd-core/bin/lib/fallow-runner.cjs +115 -0
- package/gsd-core/bin/lib/frontmatter.cjs +442 -0
- package/gsd-core/bin/lib/gap-checker.cjs +257 -0
- package/gsd-core/bin/lib/graphify.cjs +496 -0
- package/gsd-core/bin/lib/gsd2-import.cjs +456 -0
- package/gsd-core/bin/lib/init-command-router.cjs +62 -0
- package/gsd-core/bin/lib/init.cjs +1815 -0
- package/gsd-core/bin/lib/install-profiles.cjs +584 -0
- package/gsd-core/bin/lib/installer-migration-authoring.cjs +122 -0
- package/gsd-core/bin/lib/installer-migration-report.cjs +350 -0
- package/gsd-core/bin/lib/installer-migrations/000-first-time-baseline.cjs +218 -0
- package/gsd-core/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +48 -0
- package/gsd-core/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +94 -0
- package/gsd-core/bin/lib/installer-migrations/003-rename-get-shit-done-to-gsd-core.cjs +108 -0
- package/gsd-core/bin/lib/installer-migrations.cjs +823 -0
- package/gsd-core/bin/lib/intel.cjs +590 -0
- package/gsd-core/bin/lib/learnings.cjs +270 -0
- package/gsd-core/bin/lib/legacy-cleanup.cjs +253 -0
- package/gsd-core/bin/lib/milestone.cjs +373 -0
- package/gsd-core/bin/lib/model-catalog.cjs +154 -0
- package/gsd-core/bin/lib/model-profiles.cjs +24 -0
- package/gsd-core/bin/lib/observability/event.cjs +51 -0
- package/gsd-core/bin/lib/observability/logger.cjs +146 -0
- package/gsd-core/bin/lib/observability/redaction.cjs +48 -0
- package/gsd-core/bin/lib/package-identity.cjs +35 -0
- package/gsd-core/bin/lib/package-legitimacy.cjs +368 -0
- package/gsd-core/bin/lib/phase-command-router.cjs +189 -0
- package/gsd-core/bin/lib/phase-lifecycle.cjs +74 -0
- package/gsd-core/bin/lib/phase.cjs +1307 -0
- package/gsd-core/bin/lib/phases-command-router.cjs +43 -0
- package/gsd-core/bin/lib/plan-scan.cjs +91 -0
- package/gsd-core/bin/lib/planning-workspace.cjs +245 -0
- package/gsd-core/bin/lib/profile-output.cjs +1120 -0
- package/gsd-core/bin/lib/profile-pipeline.cjs +517 -0
- package/gsd-core/bin/lib/project-root.cjs +119 -0
- package/gsd-core/bin/lib/prompt-budget.cjs +305 -0
- package/gsd-core/bin/lib/research-provider.cjs +137 -0
- package/gsd-core/bin/lib/research-store.cjs +167 -0
- package/gsd-core/bin/lib/review-reviewer-selection.cjs +121 -0
- package/gsd-core/bin/lib/roadmap-command-router.cjs +166 -0
- package/gsd-core/bin/lib/roadmap-upgrade.cjs +476 -0
- package/gsd-core/bin/lib/roadmap.cjs +600 -0
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +312 -0
- package/gsd-core/bin/lib/runtime-config-adapter-registry.cjs +56 -0
- package/gsd-core/bin/lib/runtime-homes.cjs +190 -0
- package/gsd-core/bin/lib/runtime-name-policy.cjs +96 -0
- package/gsd-core/bin/lib/runtime-slash.cjs +119 -0
- package/gsd-core/bin/lib/schema-detect.cjs +159 -0
- package/gsd-core/bin/lib/secrets.cjs +34 -0
- package/gsd-core/bin/lib/security.cjs +480 -0
- package/gsd-core/bin/lib/semver-compare.cjs +42 -0
- package/gsd-core/bin/lib/shell-command-projection.cjs +533 -0
- package/gsd-core/bin/lib/state-command-router.cjs +160 -0
- package/gsd-core/bin/lib/state-document.cjs +259 -0
- package/gsd-core/bin/lib/state.cjs +2010 -0
- package/gsd-core/bin/lib/surface.cjs +449 -0
- package/gsd-core/bin/lib/task-command-router.cjs +85 -0
- package/gsd-core/bin/lib/template.cjs +237 -0
- package/gsd-core/bin/lib/uat.cjs +297 -0
- package/gsd-core/bin/lib/ui-safety-gate.cjs +98 -0
- package/gsd-core/bin/lib/update-context.cjs +218 -0
- package/gsd-core/bin/lib/validate-command-router.cjs +91 -0
- package/gsd-core/bin/lib/validate.cjs +112 -0
- package/gsd-core/bin/lib/verification-command-router.cjs +31 -0
- package/gsd-core/bin/lib/verification.cjs +193 -0
- package/gsd-core/bin/lib/verify-command-router.cjs +44 -0
- package/gsd-core/bin/lib/verify.cjs +1451 -0
- package/gsd-core/bin/lib/workstream-inventory-builder.cjs +81 -0
- package/gsd-core/bin/lib/workstream-inventory.cjs +147 -0
- package/gsd-core/bin/lib/workstream-name-policy.cjs +91 -0
- package/gsd-core/bin/lib/workstream.cjs +380 -0
- package/gsd-core/bin/lib/worktree-base-ref.cjs +325 -0
- package/gsd-core/bin/lib/worktree-safety.cjs +943 -0
- package/gsd-core/bin/shared/config-defaults.manifest.json +98 -0
- package/gsd-core/bin/shared/config-schema.manifest.json +192 -0
- package/gsd-core/bin/shared/model-catalog.json +149 -0
- package/gsd-core/bin/shared/runtime-aliases.manifest.json +75 -0
- package/gsd-core/bin/verify-reapply-patches.cjs +349 -0
- package/gsd-core/contexts/dev.md +21 -0
- package/gsd-core/contexts/research.md +22 -0
- package/gsd-core/contexts/review.md +23 -0
- package/gsd-core/references/agent-contracts.md +79 -0
- package/gsd-core/references/ai-evals.md +156 -0
- package/gsd-core/references/ai-frameworks.md +186 -0
- package/gsd-core/references/architecture-decision.md +74 -0
- package/gsd-core/references/artifact-types.md +131 -0
- package/gsd-core/references/auth-in-tests.md +91 -0
- package/gsd-core/references/autonomous-smart-discuss.md +277 -0
- package/gsd-core/references/checkpoints.md +814 -0
- package/gsd-core/references/common-bug-patterns.md +114 -0
- package/gsd-core/references/context-budget.md +85 -0
- package/gsd-core/references/continuation-format.md +253 -0
- package/gsd-core/references/db-test-isolation.md +54 -0
- package/gsd-core/references/debugger-philosophy.md +76 -0
- package/gsd-core/references/decimal-phase-calculation.md +64 -0
- package/gsd-core/references/doc-conflict-engine.md +91 -0
- package/gsd-core/references/domain-modeling.md +80 -0
- package/gsd-core/references/domain-probes.md +125 -0
- package/gsd-core/references/e2e-tiering.md +35 -0
- package/gsd-core/references/execute-mvp-tdd.md +81 -0
- package/gsd-core/references/executor-examples.md +110 -0
- package/gsd-core/references/few-shot-examples/plan-checker.md +73 -0
- package/gsd-core/references/few-shot-examples/verifier.md +109 -0
- package/gsd-core/references/flaky-test-checklist.md +22 -0
- package/gsd-core/references/gate-prompts.md +100 -0
- package/gsd-core/references/gates.md +70 -0
- package/gsd-core/references/git-integration.md +298 -0
- package/gsd-core/references/git-planning-commit.md +40 -0
- package/gsd-core/references/ios-scaffold.md +123 -0
- package/gsd-core/references/mandatory-initial-read.md +2 -0
- package/gsd-core/references/model-profile-resolution.md +38 -0
- package/gsd-core/references/model-profiles.md +245 -0
- package/gsd-core/references/mvp-concepts.md +49 -0
- package/gsd-core/references/phase-argument-parsing.md +61 -0
- package/gsd-core/references/planner-antipatterns.md +89 -0
- package/gsd-core/references/planner-chunked.md +49 -0
- package/gsd-core/references/planner-gap-closure.md +62 -0
- package/gsd-core/references/planner-graphify-auto-update.md +67 -0
- package/gsd-core/references/planner-human-verify-mode.md +57 -0
- package/gsd-core/references/planner-interface-context.md +62 -0
- package/gsd-core/references/planner-load-graph-context.md +36 -0
- package/gsd-core/references/planner-mvp-mode.md +53 -0
- package/gsd-core/references/planner-reviews.md +39 -0
- package/gsd-core/references/planner-revision.md +87 -0
- package/gsd-core/references/planner-source-audit.md +73 -0
- package/gsd-core/references/planning-config.md +473 -0
- package/gsd-core/references/product-discovery.md +49 -0
- package/gsd-core/references/project-skills-discovery.md +19 -0
- package/gsd-core/references/questioning.md +162 -0
- package/gsd-core/references/realistic-test-data.md +44 -0
- package/gsd-core/references/research-documentation-lookup.md +29 -0
- package/gsd-core/references/research-philosophy.md +29 -0
- package/gsd-core/references/research-verification-protocol.md +27 -0
- package/gsd-core/references/revision-loop.md +97 -0
- package/gsd-core/references/scout-codebase.md +51 -0
- package/gsd-core/references/skeleton-template.md +48 -0
- package/gsd-core/references/sketch-interactivity.md +41 -0
- package/gsd-core/references/sketch-theme-system.md +94 -0
- package/gsd-core/references/sketch-tooling.md +45 -0
- package/gsd-core/references/sketch-variant-patterns.md +81 -0
- package/gsd-core/references/spidr-splitting.md +69 -0
- package/gsd-core/references/tdd.md +330 -0
- package/gsd-core/references/test-containers.md +55 -0
- package/gsd-core/references/test-strategy.md +75 -0
- package/gsd-core/references/thinking-models-debug.md +44 -0
- package/gsd-core/references/thinking-models-execution.md +50 -0
- package/gsd-core/references/thinking-models-planning.md +62 -0
- package/gsd-core/references/thinking-models-research.md +50 -0
- package/gsd-core/references/thinking-models-verification.md +55 -0
- package/gsd-core/references/thinking-partner.md +96 -0
- package/gsd-core/references/ui-brand.md +162 -0
- package/gsd-core/references/universal-anti-patterns.md +63 -0
- package/gsd-core/references/user-profiling.md +681 -0
- package/gsd-core/references/user-story-template.md +58 -0
- package/gsd-core/references/verification-overrides.md +227 -0
- package/gsd-core/references/verification-patterns.md +612 -0
- package/gsd-core/references/verify-mvp-mode.md +85 -0
- package/gsd-core/references/workstream-flag.md +111 -0
- package/gsd-core/references/worktree-branch-check.md +38 -0
- package/gsd-core/references/worktree-path-safety.md +67 -0
- package/gsd-core/templates/AI-SPEC.md +246 -0
- package/gsd-core/templates/DEBUG.md +169 -0
- package/gsd-core/templates/README.md +77 -0
- package/gsd-core/templates/SECURITY.md +61 -0
- package/gsd-core/templates/UAT.md +265 -0
- package/gsd-core/templates/UI-SPEC.md +100 -0
- package/gsd-core/templates/VALIDATION.md +76 -0
- package/gsd-core/templates/adr.md +58 -0
- package/gsd-core/templates/claude-md.md +145 -0
- package/gsd-core/templates/codebase/architecture.md +255 -0
- package/gsd-core/templates/codebase/concerns.md +310 -0
- package/gsd-core/templates/codebase/conventions.md +307 -0
- package/gsd-core/templates/codebase/integrations.md +280 -0
- package/gsd-core/templates/codebase/stack.md +186 -0
- package/gsd-core/templates/codebase/structure.md +285 -0
- package/gsd-core/templates/codebase/testing.md +480 -0
- package/gsd-core/templates/config.json +62 -0
- package/gsd-core/templates/context.md +352 -0
- package/gsd-core/templates/continue-here.md +78 -0
- package/gsd-core/templates/copilot-instructions.md +7 -0
- package/gsd-core/templates/debug-subagent-prompt.md +91 -0
- package/gsd-core/templates/dev-preferences.md +21 -0
- package/gsd-core/templates/discovery.md +146 -0
- package/gsd-core/templates/discussion-log.md +63 -0
- package/gsd-core/templates/domain-model.md +54 -0
- package/gsd-core/templates/milestone-archive.md +123 -0
- package/gsd-core/templates/milestone.md +115 -0
- package/gsd-core/templates/phase-prompt.md +610 -0
- package/gsd-core/templates/planner-subagent-prompt.md +117 -0
- package/gsd-core/templates/product-brief.md +55 -0
- package/gsd-core/templates/project.md +186 -0
- package/gsd-core/templates/requirements.md +231 -0
- package/gsd-core/templates/research-project/ARCHITECTURE.md +204 -0
- package/gsd-core/templates/research-project/FEATURES.md +147 -0
- package/gsd-core/templates/research-project/PITFALLS.md +200 -0
- package/gsd-core/templates/research-project/STACK.md +120 -0
- package/gsd-core/templates/research-project/SUMMARY.md +170 -0
- package/gsd-core/templates/research.md +592 -0
- package/gsd-core/templates/retrospective.md +54 -0
- package/gsd-core/templates/roadmap.md +202 -0
- package/gsd-core/templates/spec.md +307 -0
- package/gsd-core/templates/state.md +195 -0
- package/gsd-core/templates/summary-complex.md +59 -0
- package/gsd-core/templates/summary-minimal.md +41 -0
- package/gsd-core/templates/summary-standard.md +48 -0
- package/gsd-core/templates/summary.md +248 -0
- package/gsd-core/templates/test-strategy.md +50 -0
- package/gsd-core/templates/user-profile.md +146 -0
- package/gsd-core/templates/user-setup.md +311 -0
- package/gsd-core/templates/verification-report.md +322 -0
- package/gsd-core/workflows/_runtime-launcher.snippet.sh +1 -0
- package/gsd-core/workflows/add-backlog.md +91 -0
- package/gsd-core/workflows/add-phase.md +113 -0
- package/gsd-core/workflows/add-tests.md +355 -0
- package/gsd-core/workflows/add-todo.md +161 -0
- package/gsd-core/workflows/ai-integration-phase.md +295 -0
- package/gsd-core/workflows/analyze-dependencies.md +96 -0
- package/gsd-core/workflows/audit-fix.md +178 -0
- package/gsd-core/workflows/audit-milestone.md +360 -0
- package/gsd-core/workflows/audit-uat.md +110 -0
- package/gsd-core/workflows/autonomous.md +797 -0
- package/gsd-core/workflows/check-todos.md +180 -0
- package/gsd-core/workflows/cleanup.md +195 -0
- package/gsd-core/workflows/code-review-fix.md +502 -0
- package/gsd-core/workflows/code-review.md +658 -0
- package/gsd-core/workflows/complete-milestone.md +855 -0
- package/gsd-core/workflows/debug.md +237 -0
- package/gsd-core/workflows/diagnose-issues.md +245 -0
- package/gsd-core/workflows/discover-product.md +112 -0
- package/gsd-core/workflows/discovery-phase.md +291 -0
- package/gsd-core/workflows/discuss-phase/modes/advisor.md +176 -0
- package/gsd-core/workflows/discuss-phase/modes/all.md +28 -0
- package/gsd-core/workflows/discuss-phase/modes/analyze.md +44 -0
- package/gsd-core/workflows/discuss-phase/modes/auto.md +57 -0
- package/gsd-core/workflows/discuss-phase/modes/batch.md +52 -0
- package/gsd-core/workflows/discuss-phase/modes/chain.md +98 -0
- package/gsd-core/workflows/discuss-phase/modes/default.md +141 -0
- package/gsd-core/workflows/discuss-phase/modes/power.md +44 -0
- package/gsd-core/workflows/discuss-phase/modes/text.md +55 -0
- package/gsd-core/workflows/discuss-phase/templates/checkpoint.json +18 -0
- package/gsd-core/workflows/discuss-phase/templates/context.md +136 -0
- package/gsd-core/workflows/discuss-phase/templates/discussion-log.md +50 -0
- package/gsd-core/workflows/discuss-phase-assumptions.md +675 -0
- package/gsd-core/workflows/discuss-phase-power.md +291 -0
- package/gsd-core/workflows/discuss-phase.md +499 -0
- package/gsd-core/workflows/do.md +111 -0
- package/gsd-core/workflows/docs-update.md +1176 -0
- package/gsd-core/workflows/edit-phase.md +295 -0
- package/gsd-core/workflows/eval-review.md +156 -0
- package/gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md +95 -0
- package/gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +94 -0
- package/gsd-core/workflows/execute-phase/steps/post-merge-gate.md +117 -0
- package/gsd-core/workflows/execute-phase.md +1752 -0
- package/gsd-core/workflows/execute-plan.md +526 -0
- package/gsd-core/workflows/explore.md +146 -0
- package/gsd-core/workflows/extract-learnings.md +243 -0
- package/gsd-core/workflows/fast.md +124 -0
- package/gsd-core/workflows/forensics.md +279 -0
- package/gsd-core/workflows/graduation.md +196 -0
- package/gsd-core/workflows/health.md +224 -0
- package/gsd-core/workflows/help/modes/brief.md +22 -0
- package/gsd-core/workflows/help/modes/default.md +50 -0
- package/gsd-core/workflows/help/modes/full.md +789 -0
- package/gsd-core/workflows/help/modes/topic.md +74 -0
- package/gsd-core/workflows/help.md +24 -0
- package/gsd-core/workflows/import.md +256 -0
- package/gsd-core/workflows/inbox.md +387 -0
- package/gsd-core/workflows/ingest-docs.md +340 -0
- package/gsd-core/workflows/insert-phase.md +152 -0
- package/gsd-core/workflows/list-phase-assumptions.md +178 -0
- package/gsd-core/workflows/list-workspaces.md +57 -0
- package/gsd-core/workflows/manager.md +393 -0
- package/gsd-core/workflows/map-codebase.md +446 -0
- package/gsd-core/workflows/milestone-summary.md +224 -0
- package/gsd-core/workflows/model-domain.md +162 -0
- package/gsd-core/workflows/mvp-phase.md +222 -0
- package/gsd-core/workflows/new-milestone.md +635 -0
- package/gsd-core/workflows/new-project.md +1555 -0
- package/gsd-core/workflows/new-workspace.md +240 -0
- package/gsd-core/workflows/next.md +299 -0
- package/gsd-core/workflows/node-repair.md +92 -0
- package/gsd-core/workflows/note.md +158 -0
- package/gsd-core/workflows/pause-work.md +244 -0
- package/gsd-core/workflows/plan-milestone-gaps.md +281 -0
- package/gsd-core/workflows/plan-phase.md +1814 -0
- package/gsd-core/workflows/plan-review-convergence.md +346 -0
- package/gsd-core/workflows/plant-seed.md +230 -0
- package/gsd-core/workflows/pr-branch.md +157 -0
- package/gsd-core/workflows/profile-user.md +453 -0
- package/gsd-core/workflows/progress.md +699 -0
- package/gsd-core/workflows/quick.md +1017 -0
- package/gsd-core/workflows/reapply-patches.md +426 -0
- package/gsd-core/workflows/recommend-architecture.md +135 -0
- package/gsd-core/workflows/remove-phase.md +156 -0
- package/gsd-core/workflows/remove-workspace.md +108 -0
- package/gsd-core/workflows/resume-project.md +332 -0
- package/gsd-core/workflows/review.md +748 -0
- package/gsd-core/workflows/scan.md +107 -0
- package/gsd-core/workflows/secure-phase.md +182 -0
- package/gsd-core/workflows/session-report.md +146 -0
- package/gsd-core/workflows/settings-advanced.md +810 -0
- package/gsd-core/workflows/settings-integrations.md +312 -0
- package/gsd-core/workflows/settings.md +566 -0
- package/gsd-core/workflows/ship.md +405 -0
- package/gsd-core/workflows/sketch-wrap-up.md +286 -0
- package/gsd-core/workflows/sketch.md +361 -0
- package/gsd-core/workflows/spec-phase.md +263 -0
- package/gsd-core/workflows/spike-wrap-up.md +307 -0
- package/gsd-core/workflows/spike.md +453 -0
- package/gsd-core/workflows/stats.md +80 -0
- package/gsd-core/workflows/sync-skills.md +182 -0
- package/gsd-core/workflows/testing-strategy.md +122 -0
- package/gsd-core/workflows/thread.md +222 -0
- package/gsd-core/workflows/transition.md +694 -0
- package/gsd-core/workflows/ui-phase.md +328 -0
- package/gsd-core/workflows/ui-review.md +193 -0
- package/gsd-core/workflows/ultraplan-phase.md +199 -0
- package/gsd-core/workflows/undo.md +314 -0
- package/gsd-core/workflows/update.md +496 -0
- package/gsd-core/workflows/validate-phase.md +181 -0
- package/gsd-core/workflows/verify-phase.md +544 -0
- package/gsd-core/workflows/verify-work.md +781 -0
- package/hooks/dist/gsd-check-update-worker.js +108 -0
- package/hooks/dist/gsd-check-update.js +66 -0
- package/hooks/dist/gsd-config-reload.js +133 -0
- package/hooks/dist/gsd-context-monitor.js +195 -0
- package/hooks/dist/gsd-cursor-post-tool.js +75 -0
- package/hooks/dist/gsd-cursor-session-start.js +52 -0
- package/hooks/dist/gsd-graphify-update.sh +158 -0
- package/hooks/dist/gsd-phase-boundary.sh +47 -0
- package/hooks/dist/gsd-prompt-guard.js +97 -0
- package/hooks/dist/gsd-read-guard.js +101 -0
- package/hooks/dist/gsd-read-injection-scanner.js +203 -0
- package/hooks/dist/gsd-session-state.sh +59 -0
- package/hooks/dist/gsd-statusline.js +566 -0
- package/hooks/dist/gsd-update-banner.js +138 -0
- package/hooks/dist/gsd-validate-commit.sh +57 -0
- package/hooks/dist/gsd-workflow-guard.js +167 -0
- package/hooks/dist/gsd-worktree-path-guard.js +169 -0
- package/hooks/dist/lib/git-cmd.js +150 -0
- package/hooks/dist/lib/gsd-graphify-rebuild.sh +65 -0
- package/hooks/dist/managed-hooks-registry.cjs +38 -0
- package/hooks/gsd-check-update-worker.js +108 -0
- package/hooks/gsd-check-update.js +66 -0
- package/hooks/gsd-config-reload.js +133 -0
- package/hooks/gsd-context-monitor.js +195 -0
- package/hooks/gsd-cursor-post-tool.js +75 -0
- package/hooks/gsd-cursor-session-start.js +52 -0
- package/hooks/gsd-graphify-update.sh +158 -0
- package/hooks/gsd-phase-boundary.sh +47 -0
- package/hooks/gsd-prompt-guard.js +97 -0
- package/hooks/gsd-read-guard.js +101 -0
- package/hooks/gsd-read-injection-scanner.js +203 -0
- package/hooks/gsd-session-state.sh +59 -0
- package/hooks/gsd-statusline.js +566 -0
- package/hooks/gsd-update-banner.js +138 -0
- package/hooks/gsd-validate-commit.sh +57 -0
- package/hooks/gsd-workflow-guard.js +167 -0
- package/hooks/gsd-worktree-path-guard.js +169 -0
- package/hooks/hooks.json +69 -0
- package/hooks/lib/git-cmd.js +150 -0
- package/hooks/lib/gsd-graphify-rebuild.sh +65 -0
- package/hooks/managed-hooks-registry.cjs +38 -0
- package/package.json +115 -0
- package/scripts/affected-tests-lib.cjs +542 -0
- package/scripts/audit-workflow-script-paths.cjs +73 -0
- package/scripts/base64-scan.sh +351 -0
- package/scripts/build-hooks.js +247 -0
- package/scripts/changeset/README.md +129 -0
- package/scripts/changeset/cli.cjs +590 -0
- package/scripts/changeset/github-release-notes.cjs +199 -0
- package/scripts/changeset/lint.cjs +111 -0
- package/scripts/changeset/new.cjs +137 -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 +51 -0
- package/scripts/ci-rebase-check.cjs +86 -0
- package/scripts/ci-test-scope.cjs +431 -0
- package/scripts/command-contract-helpers.cjs +64 -0
- package/scripts/diff-touches-shipped-paths.cjs +155 -0
- package/scripts/fix-slash-commands.cjs +147 -0
- package/scripts/gen-inventory-manifest.cjs +115 -0
- package/scripts/gen-research-agents.cjs +276 -0
- package/scripts/generate-package-identity.cjs +125 -0
- package/scripts/issue-dedupe.cjs +278 -0
- package/scripts/lib/allowlist-ratchet.cjs +136 -0
- package/scripts/lib/cli-exit.cjs +56 -0
- package/scripts/lint-command-contract.cjs +114 -0
- package/scripts/lint-descriptions.cjs +87 -0
- package/scripts/lint-docs-required.cjs +222 -0
- package/scripts/lint-legacy-dir-name.cjs +160 -0
- package/scripts/lint-package-identity-drift.cjs +141 -0
- package/scripts/lint-pr-check-project-dir.cjs +99 -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 +135 -0
- package/scripts/lint-test-file-count.cjs +246 -0
- package/scripts/mutation-matrix.cjs +222 -0
- package/scripts/pr-template-policy.cjs +268 -0
- package/scripts/prompt-injection-scan.sh +207 -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 +629 -0
- package/scripts/research-profiles.cjs +149 -0
- package/scripts/run-affected-tests.cjs +7 -0
- package/scripts/run-cross-platform-tests.cjs +67 -0
- package/scripts/run-tests.cjs +315 -0
- package/scripts/secret-scan-lint.sh +231 -0
- package/scripts/secret-scan.sh +358 -0
- package/scripts/setup-branch-protection.sh +236 -0
- package/scripts/strip-prose-atrefs.cjs +106 -0
- package/scripts/sync-manifest-versions.cjs +119 -0
- package/scripts/sync-rulesets.sh +34 -0
- package/scripts/sync-runtime-launcher.cjs +399 -0
- package/scripts/test-failure-reasons.cjs +34 -0
- package/scripts/verify-npm-publish.cjs +240 -0
- package/scripts/workflow-policy.cjs +450 -0
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# setup-branch-protection.sh
|
|
3
|
+
#
|
|
4
|
+
# Apply branch protection rules to `main` and `next` for the GSD repo.
|
|
5
|
+
# Idempotent — run as many times as you like. Re-running brings the live
|
|
6
|
+
# rules back to what this script declares, so the script IS the source of
|
|
7
|
+
# truth for branch protection.
|
|
8
|
+
#
|
|
9
|
+
# Usage:
|
|
10
|
+
# bash scripts/setup-branch-protection.sh # apply both
|
|
11
|
+
# bash scripts/setup-branch-protection.sh main # apply only main
|
|
12
|
+
# bash scripts/setup-branch-protection.sh next # apply only next
|
|
13
|
+
# DRY_RUN=1 bash scripts/setup-branch-protection.sh # show payloads, don't apply
|
|
14
|
+
#
|
|
15
|
+
# Requirements:
|
|
16
|
+
# - gh CLI authenticated against TheRocketCodeMX/gsd-core with admin scope
|
|
17
|
+
# - jq installed
|
|
18
|
+
#
|
|
19
|
+
# What it sets:
|
|
20
|
+
#
|
|
21
|
+
# main (strict — production):
|
|
22
|
+
# - 2 required approving reviews
|
|
23
|
+
# - dismiss stale reviews on push
|
|
24
|
+
# - require code-owner review when CODEOWNERS applies
|
|
25
|
+
# - all required status checks must pass (defined in REQUIRED_CHECKS_MAIN below)
|
|
26
|
+
# - require branches to be up to date before merging (ON — `main` is production)
|
|
27
|
+
# - require linear history (OFF — release back-merges use merge commits)
|
|
28
|
+
# - require conversation resolution
|
|
29
|
+
# - require signed commits
|
|
30
|
+
# - block force-push and deletion
|
|
31
|
+
# - admins included
|
|
32
|
+
#
|
|
33
|
+
# next (loose — integration):
|
|
34
|
+
# - 1 required approving review
|
|
35
|
+
# - dismiss stale reviews on push
|
|
36
|
+
# - require code-owner review when CODEOWNERS applies
|
|
37
|
+
# - all required status checks must pass (defined in REQUIRED_CHECKS_NEXT below)
|
|
38
|
+
# - require branches to be up to date before merging (OFF — this is the whole point)
|
|
39
|
+
# - require linear history (OFF — auto-backmerge from main needs merge commits
|
|
40
|
+
# to preserve the link from next's history to main's release tags;
|
|
41
|
+
# feature PRs still squash-merge by repo merge-strategy setting)
|
|
42
|
+
# - require conversation resolution
|
|
43
|
+
# - require signed commits (OFF on next — easier for contributors)
|
|
44
|
+
# - block force-push and deletion
|
|
45
|
+
# - admins included
|
|
46
|
+
#
|
|
47
|
+
# See: docs/adr/XXXX-introduce-next-integration-branch.md
|
|
48
|
+
# See: docs/branching.md
|
|
49
|
+
|
|
50
|
+
set -euo pipefail
|
|
51
|
+
|
|
52
|
+
REPO="${REPO:-TheRocketCodeMX/gsd-core}"
|
|
53
|
+
DRY_RUN="${DRY_RUN:-0}"
|
|
54
|
+
|
|
55
|
+
# Required status checks. Adjust as your CI suite evolves.
|
|
56
|
+
# The names must match the JOB NAME (not the workflow name) that GitHub
|
|
57
|
+
# records — check existing PRs to confirm.
|
|
58
|
+
REQUIRED_CHECKS_MAIN=(
|
|
59
|
+
"test"
|
|
60
|
+
"install-smoke"
|
|
61
|
+
"security-scan"
|
|
62
|
+
"Changeset Required / changeset-lint"
|
|
63
|
+
"Docs Required / docs-lint"
|
|
64
|
+
"PR Gate / size-check"
|
|
65
|
+
"Validate Branch Name / check-branch"
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
REQUIRED_CHECKS_NEXT=(
|
|
69
|
+
"test"
|
|
70
|
+
"PR Gate / size-check"
|
|
71
|
+
"Validate Branch Name / check-branch"
|
|
72
|
+
"Changeset Required / changeset-lint"
|
|
73
|
+
"Docs Required / docs-lint"
|
|
74
|
+
"PR Target Validator / validate-target"
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
require_cmd() {
|
|
78
|
+
command -v "$1" >/dev/null 2>&1 || {
|
|
79
|
+
echo "ERROR: missing required command: $1" >&2
|
|
80
|
+
exit 1
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
require_cmd gh
|
|
85
|
+
require_cmd jq
|
|
86
|
+
|
|
87
|
+
verify_auth() {
|
|
88
|
+
if ! gh auth status >/dev/null 2>&1; then
|
|
89
|
+
echo "ERROR: gh CLI is not authenticated. Run 'gh auth login' first." >&2
|
|
90
|
+
exit 1
|
|
91
|
+
fi
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
build_payload() {
|
|
95
|
+
local branch="$1"
|
|
96
|
+
shift
|
|
97
|
+
local checks_array=("$@")
|
|
98
|
+
|
|
99
|
+
# Branch-specific knobs.
|
|
100
|
+
local approvals require_up_to_date linear_history signed_commits
|
|
101
|
+
case "$branch" in
|
|
102
|
+
main)
|
|
103
|
+
approvals=2
|
|
104
|
+
require_up_to_date=true
|
|
105
|
+
linear_history=false
|
|
106
|
+
signed_commits=true
|
|
107
|
+
;;
|
|
108
|
+
next)
|
|
109
|
+
approvals=1
|
|
110
|
+
require_up_to_date=false
|
|
111
|
+
# linear_history=false: auto-backmerge from main needs merge commits to
|
|
112
|
+
# preserve the link to release tags. Feature PRs still produce one
|
|
113
|
+
# commit each via repo-level "squash and merge" default — that gives
|
|
114
|
+
# us a clean log without enforcing linearity at the protection layer.
|
|
115
|
+
linear_history=false
|
|
116
|
+
signed_commits=false
|
|
117
|
+
;;
|
|
118
|
+
*)
|
|
119
|
+
echo "ERROR: unknown branch '$branch'" >&2
|
|
120
|
+
exit 1
|
|
121
|
+
;;
|
|
122
|
+
esac
|
|
123
|
+
|
|
124
|
+
# Build the contexts array via jq for safe quoting.
|
|
125
|
+
local contexts_json
|
|
126
|
+
contexts_json=$(printf '%s\n' "${checks_array[@]}" | jq -R . | jq -s .)
|
|
127
|
+
|
|
128
|
+
jq -n \
|
|
129
|
+
--argjson contexts "$contexts_json" \
|
|
130
|
+
--argjson approvals "$approvals" \
|
|
131
|
+
--argjson require_up_to_date "$require_up_to_date" \
|
|
132
|
+
--argjson linear_history "$linear_history" \
|
|
133
|
+
--argjson signed_commits "$signed_commits" \
|
|
134
|
+
'{
|
|
135
|
+
required_status_checks: {
|
|
136
|
+
strict: $require_up_to_date,
|
|
137
|
+
contexts: $contexts
|
|
138
|
+
},
|
|
139
|
+
enforce_admins: true,
|
|
140
|
+
required_pull_request_reviews: {
|
|
141
|
+
dismiss_stale_reviews: true,
|
|
142
|
+
require_code_owner_reviews: true,
|
|
143
|
+
required_approving_review_count: $approvals,
|
|
144
|
+
require_last_push_approval: false
|
|
145
|
+
},
|
|
146
|
+
restrictions: null,
|
|
147
|
+
required_linear_history: $linear_history,
|
|
148
|
+
allow_force_pushes: false,
|
|
149
|
+
allow_deletions: false,
|
|
150
|
+
required_conversation_resolution: true,
|
|
151
|
+
required_signatures: $signed_commits,
|
|
152
|
+
lock_branch: false,
|
|
153
|
+
allow_fork_syncing: true
|
|
154
|
+
}'
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
apply_protection() {
|
|
158
|
+
local branch="$1"
|
|
159
|
+
local checks_var_name
|
|
160
|
+
if [ "$branch" = "main" ]; then
|
|
161
|
+
checks_var_name="REQUIRED_CHECKS_MAIN"
|
|
162
|
+
else
|
|
163
|
+
checks_var_name="REQUIRED_CHECKS_NEXT"
|
|
164
|
+
fi
|
|
165
|
+
|
|
166
|
+
# Expand the array indirectly (bash 3 compatible — macOS default).
|
|
167
|
+
eval "local checks=(\"\${${checks_var_name}[@]}\")"
|
|
168
|
+
|
|
169
|
+
local payload
|
|
170
|
+
payload=$(build_payload "$branch" "${checks[@]}")
|
|
171
|
+
|
|
172
|
+
echo "──────────────────────────────────────────"
|
|
173
|
+
echo "Branch: $branch"
|
|
174
|
+
echo "Required checks (${#checks[@]}):"
|
|
175
|
+
printf ' - %s\n' "${checks[@]}"
|
|
176
|
+
echo "──────────────────────────────────────────"
|
|
177
|
+
|
|
178
|
+
if [ "$DRY_RUN" = "1" ]; then
|
|
179
|
+
echo "[DRY RUN] Would PUT to /repos/${REPO}/branches/${branch}/protection:"
|
|
180
|
+
echo "$payload" | jq .
|
|
181
|
+
return 0
|
|
182
|
+
fi
|
|
183
|
+
|
|
184
|
+
echo "Applying branch protection..."
|
|
185
|
+
echo "$payload" | gh api \
|
|
186
|
+
-X PUT \
|
|
187
|
+
-H "Accept: application/vnd.github+json" \
|
|
188
|
+
-H "X-GitHub-Api-Version: 2022-11-28" \
|
|
189
|
+
--input - \
|
|
190
|
+
"/repos/${REPO}/branches/${branch}/protection" \
|
|
191
|
+
>/dev/null
|
|
192
|
+
echo "✓ Protection rules applied to $branch."
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
ensure_branch_exists() {
|
|
196
|
+
local branch="$1"
|
|
197
|
+
if ! gh api "/repos/${REPO}/branches/${branch}" >/dev/null 2>&1; then
|
|
198
|
+
echo "ERROR: branch '$branch' does not exist in $REPO." >&2
|
|
199
|
+
if [ "$branch" = "next" ]; then
|
|
200
|
+
cat <<EOF >&2
|
|
201
|
+
|
|
202
|
+
Create the next branch first:
|
|
203
|
+
git checkout main && git pull --ff-only
|
|
204
|
+
git checkout -b next && git push -u origin next
|
|
205
|
+
|
|
206
|
+
Then re-run this script.
|
|
207
|
+
EOF
|
|
208
|
+
fi
|
|
209
|
+
exit 1
|
|
210
|
+
fi
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
main() {
|
|
214
|
+
verify_auth
|
|
215
|
+
|
|
216
|
+
local targets=()
|
|
217
|
+
if [ $# -eq 0 ]; then
|
|
218
|
+
targets=(main next)
|
|
219
|
+
else
|
|
220
|
+
targets=("$@")
|
|
221
|
+
fi
|
|
222
|
+
|
|
223
|
+
for branch in "${targets[@]}"; do
|
|
224
|
+
if [ "$branch" != "main" ] && [ "$branch" != "next" ]; then
|
|
225
|
+
echo "ERROR: unsupported branch '$branch'. Use 'main' or 'next'." >&2
|
|
226
|
+
exit 1
|
|
227
|
+
fi
|
|
228
|
+
ensure_branch_exists "$branch"
|
|
229
|
+
apply_protection "$branch"
|
|
230
|
+
done
|
|
231
|
+
|
|
232
|
+
echo ""
|
|
233
|
+
echo "Done. To verify: gh api /repos/${REPO}/branches/<branch>/protection | jq ."
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
main "$@"
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* strip-prose-atrefs.cjs
|
|
4
|
+
*
|
|
5
|
+
* Removes redundant @~/.claude/gsd-core/ path tokens from prose lines
|
|
6
|
+
* in <process> and <context> blocks. The path is already declared in
|
|
7
|
+
* <execution_context> where it actually loads the file. Prose copies are
|
|
8
|
+
* inert and add ~900 tokens/invocation of dead weight.
|
|
9
|
+
*
|
|
10
|
+
* Transformation rules (applied per matching line):
|
|
11
|
+
* - "Execute the X workflow from @PATH end-to-end." → "Execute end-to-end."
|
|
12
|
+
* - "Execute @PATH end-to-end." → "Execute end-to-end."
|
|
13
|
+
* - "Read and execute the X workflow from @PATH end-to-end." → "Execute end-to-end."
|
|
14
|
+
* - "Follow the X workflow at @PATH." → "Execute end-to-end."
|
|
15
|
+
* - "Output the X reference from @PATH." → "Execute end-to-end."
|
|
16
|
+
* - "**Follow the X** from `@PATH`." → "**Follow the X.**"
|
|
17
|
+
* - "- If it is '...': ... from @PATH end-to-end." → strip path token only
|
|
18
|
+
* - "- Otherwise: ... from @PATH end-to-end." → strip path token only
|
|
19
|
+
* - "- @PATH (label)" → "- (label)"
|
|
20
|
+
*
|
|
21
|
+
* Run with --dry-run to preview without writing.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
'use strict';
|
|
25
|
+
|
|
26
|
+
const fs = require('fs');
|
|
27
|
+
const path = require('path');
|
|
28
|
+
|
|
29
|
+
const DRY_RUN = process.argv.includes('--dry-run');
|
|
30
|
+
const ROOT = path.join(__dirname, '..');
|
|
31
|
+
const COMMANDS_DIR = path.join(ROOT, 'commands', 'gsd');
|
|
32
|
+
|
|
33
|
+
const AT_PATH_PATTERN = /@(?:~|\$HOME)\/.+?gsd-core\/[^\s`)]+/;
|
|
34
|
+
const mkAtRe = () => new RegExp(AT_PATH_PATTERN.source, 'g');
|
|
35
|
+
|
|
36
|
+
function transformLine(line) {
|
|
37
|
+
if (!AT_PATH_PATTERN.test(line)) return line;
|
|
38
|
+
|
|
39
|
+
const trimmed = line.trim();
|
|
40
|
+
|
|
41
|
+
// "- @PATH (label)" → "- (label)"
|
|
42
|
+
if (/^- @(?:~|\$HOME)\//.test(trimmed)) {
|
|
43
|
+
return line.replace(/^(\s*- )@(?:~|\$HOME)\/[^\s(]+\s*/, '$1');
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// "**Follow the X workflow** from `@PATH`." → "**Follow the X workflow.**"
|
|
47
|
+
// "**Follow the X workflow** from `@PATH`" → "**Follow the X workflow.**"
|
|
48
|
+
if (/\*\*Follow the .+ workflow\*\* from `@/.test(trimmed)) {
|
|
49
|
+
return line.replace(/\s+from `@(?:~|\$HOME)\/[^`]+`\.?/, '.');
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Routing bullet: keep everything except "from @PATH" or bare "@PATH"
|
|
53
|
+
// "- If …: … from @PATH end-to-end." → strip path, keep bullet
|
|
54
|
+
// "- Otherwise: … from @PATH end-to-end." → strip path, keep bullet
|
|
55
|
+
if (/^- (?:If |Otherwise:|pass all)/.test(trimmed)) {
|
|
56
|
+
return line
|
|
57
|
+
.replace(/\s+from\s+@(?:~|\$HOME)\/\S+/g, '')
|
|
58
|
+
.replace(/@(?:~|\$HOME)\/\S+/g, '');
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// "Execute [the X workflow] [from] @PATH [end-to-end]."
|
|
62
|
+
// "Read and execute …" / "Follow …" / "Output …"
|
|
63
|
+
// → collapse to leading indent + "Execute end-to-end."
|
|
64
|
+
const indent = line.match(/^(\s*)/)[1];
|
|
65
|
+
return `${indent}Execute end-to-end.`;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function processFile(filePath) {
|
|
69
|
+
const original = fs.readFileSync(filePath, 'utf-8');
|
|
70
|
+
const lines = original.split('\n');
|
|
71
|
+
const out = [];
|
|
72
|
+
let inProse = false; // true when inside <process> or <context> (not execution_context)
|
|
73
|
+
|
|
74
|
+
for (const line of lines) {
|
|
75
|
+
const t = line.trim();
|
|
76
|
+
if (/<(process|context)>/.test(t) && !t.includes('execution_context')) inProse = true;
|
|
77
|
+
if (/<\/(process|context)>/.test(t) && !t.includes('execution_context')) inProse = false;
|
|
78
|
+
|
|
79
|
+
if (inProse && AT_PATH_PATTERN.test(line)) {
|
|
80
|
+
const re = mkAtRe();
|
|
81
|
+
re.lastIndex = 0;
|
|
82
|
+
out.push(transformLine(line));
|
|
83
|
+
} else {
|
|
84
|
+
out.push(line);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const result = out.join('\n');
|
|
89
|
+
if (result === original) return false; // no change
|
|
90
|
+
|
|
91
|
+
if (!DRY_RUN) fs.writeFileSync(filePath, result, 'utf-8');
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const files = fs.readdirSync(COMMANDS_DIR)
|
|
96
|
+
.filter(f => f.endsWith('.md'))
|
|
97
|
+
.map(f => path.join(COMMANDS_DIR, f));
|
|
98
|
+
|
|
99
|
+
let changed = 0;
|
|
100
|
+
for (const f of files) {
|
|
101
|
+
if (processFile(f)) {
|
|
102
|
+
console.log(`${DRY_RUN ? '[dry]' : 'fixed'}: ${path.basename(f)}`);
|
|
103
|
+
changed++;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
console.log(`\n${changed} file(s) ${DRY_RUN ? 'would be' : 'were'} modified.`);
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* sync-manifest-versions.cjs
|
|
6
|
+
*
|
|
7
|
+
* Stamps the package.json version into every runtime-integration manifest whose
|
|
8
|
+
* top-level `version` field MUST track the package version. Called automatically
|
|
9
|
+
* by the `version` npm lifecycle script so that `npm version X.Y.Z` keeps all
|
|
10
|
+
* registered manifests in sync.
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* node scripts/sync-manifest-versions.cjs # stamp + report
|
|
14
|
+
* node scripts/sync-manifest-versions.cjs --stage # stamp + git-stage manifests
|
|
15
|
+
* node scripts/sync-manifest-versions.cjs --check # report drift, exit 1 if any
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
const fs = require('fs');
|
|
19
|
+
const path = require('path');
|
|
20
|
+
const { execFileSync } = require('child_process');
|
|
21
|
+
|
|
22
|
+
const ROOT = path.resolve(__dirname, '..');
|
|
23
|
+
|
|
24
|
+
// Single source of truth: runtime-integration manifests whose top-level `version`
|
|
25
|
+
// MUST track package.json. Add a new manifest here so `npm version` keeps it in
|
|
26
|
+
// sync — the regression guard test (issue 844) fails if you forget.
|
|
27
|
+
const VERSIONED_MANIFESTS = [
|
|
28
|
+
'.claude-plugin/plugin.json',
|
|
29
|
+
'gemini-extension.json',
|
|
30
|
+
];
|
|
31
|
+
|
|
32
|
+
function readJson(p) {
|
|
33
|
+
return JSON.parse(fs.readFileSync(p, 'utf8'));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function getPackageVersion(root) {
|
|
37
|
+
const r = root || ROOT;
|
|
38
|
+
return readJson(path.join(r, 'package.json')).version;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Stamp `version` into each registered manifest, preserving field order and
|
|
42
|
+
// 2-space + trailing-newline formatting. Returns the list of changed rel paths.
|
|
43
|
+
function syncManifestVersions(opts) {
|
|
44
|
+
const root = (opts && opts.root) || ROOT;
|
|
45
|
+
const v = (opts && opts.version) != null ? opts.version : getPackageVersion(root);
|
|
46
|
+
const changed = [];
|
|
47
|
+
for (const rel of VERSIONED_MANIFESTS) {
|
|
48
|
+
const abs = path.join(root, rel);
|
|
49
|
+
const manifest = readJson(abs);
|
|
50
|
+
if (manifest.version !== v) {
|
|
51
|
+
manifest.version = v;
|
|
52
|
+
fs.writeFileSync(abs, JSON.stringify(manifest, null, 2) + '\n');
|
|
53
|
+
changed.push(rel);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return changed;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Registered manifests whose version != package version.
|
|
60
|
+
function findDrift(opts) {
|
|
61
|
+
const root = (opts && opts.root) || ROOT;
|
|
62
|
+
const v = (opts && opts.version) != null ? opts.version : getPackageVersion(root);
|
|
63
|
+
const drift = [];
|
|
64
|
+
for (const rel of VERSIONED_MANIFESTS) {
|
|
65
|
+
const found = readJson(path.join(root, rel)).version;
|
|
66
|
+
if (found !== v) drift.push({ manifest: rel, found, expected: v });
|
|
67
|
+
}
|
|
68
|
+
return drift;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Best-effort outside git; fail-closed inside a work tree so a release never
|
|
72
|
+
// ships a stale manifest that the working-tree test already accepted.
|
|
73
|
+
function stageManifests(opts) {
|
|
74
|
+
const root = (opts && opts.root) || ROOT;
|
|
75
|
+
let insideWorkTree = false;
|
|
76
|
+
try {
|
|
77
|
+
insideWorkTree = execFileSync('git', ['rev-parse', '--is-inside-work-tree'], {
|
|
78
|
+
cwd: root,
|
|
79
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
80
|
+
}).toString().trim() === 'true';
|
|
81
|
+
} catch {}
|
|
82
|
+
if (!insideWorkTree) {
|
|
83
|
+
console.warn('sync-manifest-versions: not a git work tree; skipping staging.');
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
execFileSync('git', ['add', '--', ...VERSIONED_MANIFESTS], { cwd: root, stdio: ['ignore', 'ignore', 'pipe'] });
|
|
88
|
+
} catch (err) {
|
|
89
|
+
const detail = err && err.stderr ? err.stderr.toString().trim() : (err && err.message) || 'unknown error';
|
|
90
|
+
throw new Error(`sync-manifest-versions: failed to git-add manifests inside a work tree: ${detail}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
module.exports = { VERSIONED_MANIFESTS, syncManifestVersions, findDrift, getPackageVersion, stageManifests };
|
|
95
|
+
|
|
96
|
+
if (require.main === module) {
|
|
97
|
+
const args = process.argv.slice(2);
|
|
98
|
+
const version = getPackageVersion();
|
|
99
|
+
if (args.includes('--check')) {
|
|
100
|
+
const drift = findDrift({ version });
|
|
101
|
+
if (drift.length) {
|
|
102
|
+
for (const d of drift) {
|
|
103
|
+
console.error('Manifest ' + d.manifest + ' version ' + d.found + ' != package.json ' + d.expected);
|
|
104
|
+
}
|
|
105
|
+
console.error('Run `node scripts/sync-manifest-versions.cjs` to fix.');
|
|
106
|
+
process.exitCode = 1;
|
|
107
|
+
} else {
|
|
108
|
+
console.log('All ' + VERSIONED_MANIFESTS.length + ' versioned manifests in sync at ' + version + '.');
|
|
109
|
+
}
|
|
110
|
+
} else {
|
|
111
|
+
const changed = syncManifestVersions({ version });
|
|
112
|
+
if (changed.length) {
|
|
113
|
+
console.log('Stamped ' + version + ' into: ' + changed.join(', '));
|
|
114
|
+
} else {
|
|
115
|
+
console.log('Versioned manifests already at ' + version + '.');
|
|
116
|
+
}
|
|
117
|
+
if (args.includes('--stage')) stageManifests();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
REPO="${REPO:-TheRocketCodeMX/gsd-core}"
|
|
5
|
+
ENFORCEMENT="${ENFORCEMENT:-evaluate}"
|
|
6
|
+
|
|
7
|
+
case "$ENFORCEMENT" in
|
|
8
|
+
disabled|evaluate|active) ;;
|
|
9
|
+
*)
|
|
10
|
+
echo "ERROR: ENFORCEMENT must be one of: disabled|evaluate|active" >&2
|
|
11
|
+
exit 1
|
|
12
|
+
;;
|
|
13
|
+
esac
|
|
14
|
+
|
|
15
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
16
|
+
RULESETS_DIR="$SCRIPT_DIR/../.github/rulesets"
|
|
17
|
+
|
|
18
|
+
for ruleset_file in "$RULESETS_DIR"/*.json; do
|
|
19
|
+
name="$(jq -r '.name' "$ruleset_file")"
|
|
20
|
+
|
|
21
|
+
body="$(jq --arg enforcement "$ENFORCEMENT" '.enforcement = $enforcement' "$ruleset_file")"
|
|
22
|
+
|
|
23
|
+
existing_id="$(gh api "repos/$REPO/rulesets" --jq ".[] | select(.name==\"$name\") | .id" 2>/dev/null || true)"
|
|
24
|
+
|
|
25
|
+
if [ -n "$existing_id" ]; then
|
|
26
|
+
gh api --method PUT "repos/$REPO/rulesets/$existing_id" \
|
|
27
|
+
--input - <<< "$body" > /dev/null
|
|
28
|
+
echo "[update] $name -> enforcement=$ENFORCEMENT"
|
|
29
|
+
else
|
|
30
|
+
gh api --method POST "repos/$REPO/rulesets" \
|
|
31
|
+
--input - <<< "$body" > /dev/null
|
|
32
|
+
echo "[create] $name -> enforcement=$ENFORCEMENT"
|
|
33
|
+
fi
|
|
34
|
+
done
|