@opengsd/gsd-core 1.15.0 → 1.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 +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.opencode/plugins/gsd-core.js +85 -5
- package/agents/gsd-code-fixer.compact.md +1 -1
- package/agents/gsd-code-fixer.md +1 -1
- package/agents/gsd-code-reviewer.compact.md +5 -3
- package/agents/gsd-code-reviewer.md +8 -6
- package/agents/gsd-debug-session-manager.compact.md +1 -1
- package/agents/gsd-debug-session-manager.md +1 -1
- package/agents/gsd-debugger.md +2 -2
- package/agents/gsd-eval-auditor.compact.md +1 -1
- package/agents/gsd-eval-auditor.md +1 -1
- package/agents/gsd-executor.md +4 -4
- package/agents/gsd-intel-updater.compact.md +1 -1
- package/agents/gsd-intel-updater.md +1 -1
- package/agents/gsd-mempalace-curator.md +2 -2
- package/agents/gsd-phase-researcher.md +1 -1
- package/agents/gsd-plan-checker.md +7 -2
- package/agents/gsd-planner.md +3 -3
- package/agents/gsd-project-researcher.compact.md +1 -1
- package/agents/gsd-project-researcher.md +1 -1
- package/agents/gsd-research-synthesizer.compact.md +1 -1
- package/agents/gsd-research-synthesizer.md +1 -1
- package/agents/gsd-ui-auditor.compact.md +21 -30
- package/agents/gsd-ui-auditor.md +42 -51
- package/agents/gsd-ui-researcher.compact.md +1 -1
- package/agents/gsd-ui-researcher.md +1 -1
- package/agents/gsd-verifier.md +31 -9
- package/bin/install.js +126 -196
- package/commands/gsd/add-tests.md +6 -1
- package/commands/gsd/ai-integration-phase.md +6 -1
- package/commands/gsd/audit-fix.md +5 -0
- package/commands/gsd/audit-milestone.md +6 -1
- package/commands/gsd/autonomous.md +5 -0
- package/commands/gsd/capture.md +8 -4
- package/commands/gsd/code-review.md +7 -2
- package/commands/gsd/complete-milestone.md +4 -0
- package/commands/gsd/config.md +7 -3
- package/commands/gsd/debug.md +11 -7
- package/commands/gsd/discuss-phase.md +7 -3
- package/commands/gsd/docs-update.md +12 -7
- package/commands/gsd/eval-review.md +6 -1
- package/commands/gsd/execute-phase.md +12 -7
- package/commands/gsd/extract-learnings.md +5 -0
- package/commands/gsd/fast.md +4 -0
- package/commands/gsd/forensics.md +5 -1
- package/commands/gsd/graphify.md +10 -6
- package/commands/gsd/health.md +5 -0
- package/commands/gsd/help.md +7 -2
- package/commands/gsd/import.md +7 -3
- package/commands/gsd/inbox.md +5 -0
- package/commands/gsd/ingest-docs.md +5 -1
- package/commands/gsd/manager.md +6 -1
- package/commands/gsd/map-codebase.md +7 -3
- package/commands/gsd/mempalace-capture.md +5 -1
- package/commands/gsd/mempalace-recall.md +5 -1
- package/commands/gsd/milestone-summary.md +5 -1
- package/commands/gsd/mvp-phase.md +8 -3
- package/commands/gsd/new-milestone.md +6 -1
- package/commands/gsd/new-project.md +5 -0
- package/commands/gsd/next.md +6 -1
- package/commands/gsd/ns-context.md +4 -0
- package/commands/gsd/ns-ideate.md +4 -0
- package/commands/gsd/ns-manage.md +4 -0
- package/commands/gsd/ns-project.md +4 -0
- package/commands/gsd/ns-review.md +4 -0
- package/commands/gsd/ns-workflow.md +4 -0
- package/commands/gsd/onboard.md +6 -1
- package/commands/gsd/pause-work.md +5 -1
- package/commands/gsd/phase.md +8 -4
- package/commands/gsd/plan-phase.md +6 -1
- package/commands/gsd/plan-review-convergence.md +5 -1
- package/commands/gsd/pr-branch.md +4 -0
- package/commands/gsd/profile-user.md +5 -1
- package/commands/gsd/progress.md +6 -1
- package/commands/gsd/quick-batch.md +20 -8
- package/commands/gsd/quick.md +12 -7
- package/commands/gsd/review.md +5 -1
- package/commands/gsd/secure-phase.md +6 -1
- package/commands/gsd/ship.md +5 -0
- package/commands/gsd/sketch.md +7 -2
- package/commands/gsd/spec-phase.md +5 -1
- package/commands/gsd/spike.md +8 -3
- package/commands/gsd/surface.md +5 -1
- package/commands/gsd/thread.md +4 -0
- package/commands/gsd/ui-phase.md +6 -1
- package/commands/gsd/ui-review.md +6 -1
- package/commands/gsd/ultraplan-phase.md +5 -1
- package/commands/gsd/undo.md +5 -1
- package/commands/gsd/update.md +6 -2
- package/commands/gsd/validate-phase.md +6 -1
- package/commands/gsd/verify-work.md +6 -1
- package/commands/gsd/workspace.md +7 -3
- package/gsd-core/bin/gsd-tools.cjs +142 -56
- package/gsd-core/bin/lib/active-workstream-store.cjs +15 -0
- package/gsd-core/bin/lib/agent-install-check.cjs +4 -1
- package/gsd-core/bin/lib/audit.cjs +78 -44
- package/gsd-core/bin/lib/broken-windows.cjs +13 -13
- package/gsd-core/bin/lib/capability-activation.cjs +9 -4
- package/gsd-core/bin/lib/capability-registry.cjs +183 -103
- package/gsd-core/bin/lib/capability-validator.cjs +16 -0
- package/gsd-core/bin/lib/check-auto-mode.cjs +35 -0
- package/gsd-core/bin/lib/check-command-router.cjs +164 -1712
- package/gsd-core/bin/lib/cjs-command-router-adapter.cjs +13 -2
- package/gsd-core/bin/lib/cli-exit.cjs +12 -0
- package/gsd-core/bin/lib/codex-agent-toml.cjs +11 -8
- package/gsd-core/bin/lib/command-aliases.cjs +7 -0
- package/gsd-core/bin/lib/command-routing-hub.cjs +48 -1
- package/gsd-core/bin/lib/commands.cjs +173 -170
- package/gsd-core/bin/lib/complexity-trigger.cjs +8 -7
- package/gsd-core/bin/lib/config.cjs +43 -12
- package/gsd-core/bin/lib/core-utils.cjs +6 -1
- package/gsd-core/bin/lib/coverage.cjs +4 -8
- package/gsd-core/bin/lib/decision-coverage-support.cjs +259 -0
- package/gsd-core/bin/lib/drift.cjs +177 -42
- package/gsd-core/bin/lib/frontmatter-fence.cjs +90 -0
- package/gsd-core/bin/lib/frontmatter-splice.cjs +494 -0
- package/gsd-core/bin/lib/frontmatter.cjs +413 -234
- package/gsd-core/bin/lib/gap-checker.cjs +72 -29
- package/gsd-core/bin/lib/gate-api-coverage-verify-pre.cjs +381 -0
- package/gsd-core/bin/lib/gate-args.cjs +53 -0
- package/gsd-core/bin/lib/gate-codebase-drift.cjs +285 -0
- package/gsd-core/bin/lib/gate-config.cjs +46 -0
- package/gsd-core/bin/lib/gate-context-drift.cjs +141 -0
- package/gsd-core/bin/lib/gate-decision-coverage-plan.cjs +169 -0
- package/gsd-core/bin/lib/gate-decision-coverage-verify.cjs +126 -0
- package/gsd-core/bin/lib/gate-evaluation-scope.cjs +555 -0
- package/gsd-core/bin/lib/gate-evidence.cjs +138 -0
- package/gsd-core/bin/lib/gate-exit.cjs +27 -0
- package/gsd-core/bin/lib/gate-gap-analysis-plan-post.cjs +61 -0
- package/gsd-core/bin/lib/gate-phase-context.cjs +170 -0
- package/gsd-core/bin/lib/gate-predicate-evaluator.cjs +1 -1
- package/gsd-core/bin/lib/gate-predicate.cjs +165 -0
- package/gsd-core/bin/lib/gate-prohibition-enforcement.cjs +94 -0
- package/gsd-core/bin/lib/gate-schema-drift.cjs +165 -0
- package/gsd-core/bin/lib/gate-tdd-red-evidence.cjs +100 -0
- package/gsd-core/bin/lib/gate-tdd-review-checkpoint.cjs +182 -0
- package/gsd-core/bin/lib/gate-ui-plan.cjs +86 -0
- package/gsd-core/bin/lib/gate-ui-safety.cjs +80 -0
- package/gsd-core/bin/lib/gate-verdict.cjs +64 -0
- package/gsd-core/bin/lib/gate-verify-command-paths.cjs +78 -0
- package/gsd-core/bin/lib/gate-verify-failure-directions.cjs +41 -0
- package/gsd-core/bin/lib/health-diagnostic-rules/phase-structure.cjs +43 -47
- package/gsd-core/bin/lib/health-diagnostic.cjs +45 -8
- package/gsd-core/bin/lib/init.cjs +162 -96
- package/gsd-core/bin/lib/install-engine.cjs +19 -35
- package/gsd-core/bin/lib/install-profiles.cjs +7 -4
- package/gsd-core/bin/lib/io.cjs +122 -3
- package/gsd-core/bin/lib/loop-resolver.cjs +95 -0
- package/gsd-core/bin/lib/markdown-sectionizer.cjs +75 -1
- package/gsd-core/bin/lib/milestone.cjs +19 -1
- package/gsd-core/bin/lib/model-resolver.cjs +18 -18
- package/gsd-core/bin/lib/observability/event.cjs +1 -1
- package/gsd-core/bin/lib/observability/logger.cjs +46 -1
- package/gsd-core/bin/lib/pattern.cjs +10 -0
- package/gsd-core/bin/lib/phase-command-router.cjs +11 -4
- package/gsd-core/bin/lib/phase-estimation.cjs +5 -4
- package/gsd-core/bin/lib/phase-id.cjs +1 -1
- package/gsd-core/bin/lib/phase-lifecycle.cjs +9 -2
- package/gsd-core/bin/lib/phase-status.cjs +360 -0
- package/gsd-core/bin/lib/phase.cjs +280 -80
- package/gsd-core/bin/lib/plan-document.cjs +93 -19
- package/gsd-core/bin/lib/plan-drift-guard.cjs +5 -0
- package/gsd-core/bin/lib/planning-document.cjs +273 -40
- package/gsd-core/bin/lib/planning-inspect.cjs +42 -8
- package/gsd-core/bin/lib/planning-snapshot.cjs +18 -0
- package/gsd-core/bin/lib/planning-workspace.cjs +76 -53
- package/gsd-core/bin/lib/pristine-baseline.cjs +10 -0
- package/gsd-core/bin/lib/profile-output.cjs +6 -3
- package/gsd-core/bin/lib/prohibition-enforcement.cjs +0 -55
- package/gsd-core/bin/lib/quick-batch-command-router.cjs +35 -9
- package/gsd-core/bin/lib/quick-batch-dispatch.cjs +11 -8
- package/gsd-core/bin/lib/real-home-guard.cjs +9 -1
- package/gsd-core/bin/lib/report-parser.cjs +269 -0
- package/gsd-core/bin/lib/roadmap-command-router.cjs +13 -15
- package/gsd-core/bin/lib/roadmap-parser.cjs +82 -15
- package/gsd-core/bin/lib/roadmap-upgrade.cjs +127 -65
- package/gsd-core/bin/lib/roadmap.cjs +169 -72
- package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +91 -157
- package/gsd-core/bin/lib/runtime-artifact-install-plan.cjs +2 -1
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +57 -1
- package/gsd-core/bin/lib/runtime-homes.cjs +13 -10
- package/gsd-core/bin/lib/runtime-hooks-surface.cjs +307 -591
- package/gsd-core/bin/lib/runtime-name-policy.cjs +142 -27
- package/gsd-core/bin/lib/runtime-slash.cjs +47 -30
- package/gsd-core/bin/lib/shell-command-projection.cjs +37 -2
- package/gsd-core/bin/lib/smart-entry.cjs +19 -3
- package/gsd-core/bin/lib/stale-bake-guard.cjs +32 -48
- package/gsd-core/bin/lib/state-contract.cjs +15 -18
- package/gsd-core/bin/lib/state-document.cjs +100 -22
- package/gsd-core/bin/lib/state.cjs +214 -105
- package/gsd-core/bin/lib/surface.cjs +2 -1
- package/gsd-core/bin/lib/tdd-red-evidence.cjs +48 -152
- package/gsd-core/bin/lib/uat-predicate.cjs +313 -35
- package/gsd-core/bin/lib/uat.cjs +424 -7
- package/gsd-core/bin/lib/ui-frontend-evidence.cjs +94 -58
- package/gsd-core/bin/lib/vendor/README.md +31 -9
- package/gsd-core/bin/lib/vendor/saxes.cjs +1934 -0
- package/gsd-core/bin/lib/vendor/saxes.cjs.LICENSE.txt +92 -0
- package/gsd-core/bin/lib/vendor/tap-parser.cjs +8927 -0
- package/gsd-core/bin/lib/vendor/tap-parser.cjs.LICENSE.txt +152 -0
- package/gsd-core/bin/lib/verification-command-router.cjs +2 -1
- package/gsd-core/bin/lib/verification.cjs +1165 -314
- package/gsd-core/bin/lib/verify-command-router.cjs +18 -7
- package/gsd-core/bin/lib/verify.cjs +286 -567
- package/gsd-core/bin/lib/workstream-inventory-builder.cjs +14 -6
- package/gsd-core/bin/lib/workstream-inventory.cjs +31 -21
- package/gsd-core/bin/lib/workstream-name-policy.cjs +31 -1
- package/gsd-core/bin/lib/workstream.cjs +11 -2
- package/gsd-core/bin/shared/config-defaults.manifest.json +5 -0
- package/gsd-core/bin/shared/config-schema.manifest.json +4 -0
- package/gsd-core/references/autonomous-smart-discuss.md +2 -1
- package/gsd-core/references/autonomous-ui-design-contract.md +3 -3
- package/gsd-core/references/execute-mvp-tdd.md +5 -10
- package/gsd-core/references/execute-phase-between-wave-reset.md +3 -0
- package/gsd-core/references/execute-phase-response-language.md +1 -1
- package/gsd-core/references/gsd-run-resolver.md +1 -1
- package/gsd-core/references/loop-hook-dispatch.md +7 -1
- package/gsd-core/references/offer-next.md +1 -1
- package/gsd-core/references/planning-config.md +1 -1
- package/gsd-core/references/spidr-splitting.md +1 -1
- package/gsd-core/references/tdd.md +10 -4
- package/gsd-core/references/verifier-phase-gates.md +5 -2
- package/gsd-core/references/verify-mvp-mode.md +2 -2
- package/gsd-core/references/workstream-flag.md +33 -3
- package/gsd-core/templates/README.md +1 -1
- package/gsd-core/templates/UAT.md +17 -1
- package/gsd-core/templates/config.json +2 -11
- package/gsd-core/templates/verification-report.md +1 -1
- package/gsd-core/workflows/_runtime-launcher.snippet.sh +1 -1
- package/gsd-core/workflows/add-backlog.md +1 -1
- package/gsd-core/workflows/add-phase.md +8 -7
- package/gsd-core/workflows/add-tests.md +3 -2
- package/gsd-core/workflows/add-todo.md +4 -3
- package/gsd-core/workflows/ai-integration-phase.md +3 -2
- package/gsd-core/workflows/audit-fix.md +1 -1
- package/gsd-core/workflows/audit-milestone.md +4 -3
- package/gsd-core/workflows/audit-uat.md +1 -1
- package/gsd-core/workflows/autonomous.md +28 -18
- package/gsd-core/workflows/check-todos.md +6 -5
- package/gsd-core/workflows/cleanup.md +1 -1
- package/gsd-core/workflows/code-review/steps/structural-pre-pass.md +20 -13
- package/gsd-core/workflows/code-review-fix.md +5 -4
- package/gsd-core/workflows/code-review.md +84 -90
- package/gsd-core/workflows/complete-milestone/detail/elaboration.md +4 -3
- package/gsd-core/workflows/complete-milestone.md +12 -7
- package/gsd-core/workflows/debug.md +30 -5
- package/gsd-core/workflows/diagnose-issues.md +3 -2
- package/gsd-core/workflows/discuss-phase/modes/advisor.md +1 -1
- package/gsd-core/workflows/discuss-phase/modes/chain.md +1 -1
- package/gsd-core/workflows/discuss-phase-assumptions.md +4 -3
- package/gsd-core/workflows/discuss-phase.md +4 -3
- package/gsd-core/workflows/do.md +1 -1
- package/gsd-core/workflows/docs-update.md +4 -3
- package/gsd-core/workflows/edit-phase.md +4 -3
- package/gsd-core/workflows/eval-review.md +5 -3
- package/gsd-core/workflows/execute-phase/detail/elaboration.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/code-review-disposition.md +4 -2
- package/gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md +15 -4
- package/gsd-core/workflows/execute-phase/steps/completion-reconciliation.md +10 -7
- package/gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/gap-closure-artifacts.md +3 -1
- package/gsd-core/workflows/execute-phase/steps/partial-wave.md +2 -2
- package/gsd-core/workflows/execute-phase/steps/per-plan-executor-routing.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/post-merge-gate.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/protected-branch.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/regression-gate-run.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/regression-gate.md +2 -0
- package/gsd-core/workflows/execute-phase/steps/tdd-applicability-resolution.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/verify-phase-goal.md +187 -0
- package/gsd-core/workflows/execute-phase/steps/wave-post-gate-hooks.md +2 -3
- package/gsd-core/workflows/execute-phase.md +78 -170
- package/gsd-core/workflows/execute-plan.md +13 -19
- package/gsd-core/workflows/explore.md +2 -2
- package/gsd-core/workflows/extract-learnings.md +3 -2
- package/gsd-core/workflows/fast.md +1 -1
- package/gsd-core/workflows/forensics.md +1 -1
- package/gsd-core/workflows/graduation.md +1 -1
- package/gsd-core/workflows/health.md +2 -1
- package/gsd-core/workflows/import.md +3 -2
- package/gsd-core/workflows/inbox.md +1 -1
- package/gsd-core/workflows/ingest-docs.md +1 -1
- package/gsd-core/workflows/insert-phase.md +4 -3
- package/gsd-core/workflows/list-seeds.md +1 -1
- package/gsd-core/workflows/list-workspaces.md +1 -1
- package/gsd-core/workflows/manager.md +5 -3
- package/gsd-core/workflows/map-codebase.md +4 -3
- package/gsd-core/workflows/milestone-summary.md +3 -2
- package/gsd-core/workflows/mvp-phase.md +14 -14
- package/gsd-core/workflows/new-milestone.md +10 -10
- package/gsd-core/workflows/new-project/steps/auto-mode-config.md +1 -1
- package/gsd-core/workflows/new-project.md +1 -1
- package/gsd-core/workflows/new-workspace.md +1 -1
- package/gsd-core/workflows/next.md +1 -1
- package/gsd-core/workflows/pause-work.md +2 -2
- package/gsd-core/workflows/plan-phase/detail/elaboration.md +1 -1
- package/gsd-core/workflows/plan-phase/steps/chunked-planning-mode.md +1 -1
- package/gsd-core/workflows/plan-phase/steps/closed-phase-gate.md +1 -1
- package/gsd-core/workflows/plan-phase/steps/prd-express-path.md +1 -1
- package/gsd-core/workflows/plan-phase/steps/stall-detection-helpers.md +1 -1
- package/gsd-core/workflows/plan-phase.md +27 -18
- package/gsd-core/workflows/plan-review-convergence.md +1 -1
- package/gsd-core/workflows/plant-seed.md +1 -1
- package/gsd-core/workflows/pr-branch.md +1 -1
- package/gsd-core/workflows/profile-user.md +1 -1
- package/gsd-core/workflows/progress.md +19 -49
- package/gsd-core/workflows/quick/steps/plan-checker-loop.md +4 -2
- package/gsd-core/workflows/quick/steps/quick-verification.md +4 -4
- package/gsd-core/workflows/quick/steps/worktree-pre-dispatch-commit.md +30 -11
- package/gsd-core/workflows/quick-batch/steps/batch-init.md +1 -1
- package/gsd-core/workflows/quick-batch/steps/completion.md +1 -1
- package/gsd-core/workflows/quick-batch/steps/merge-wave.md +1 -1
- package/gsd-core/workflows/quick-batch/steps/planner-wave.md +1 -1
- package/gsd-core/workflows/quick-batch/steps/research-phase.md +1 -1
- package/gsd-core/workflows/quick-batch/steps/resume-mode.md +1 -1
- package/gsd-core/workflows/quick-batch/steps/verification-wave.md +9 -3
- package/gsd-core/workflows/quick-batch/steps/worktree-dispatch.md +1 -1
- package/gsd-core/workflows/quick-batch.md +15 -10
- package/gsd-core/workflows/quick.md +42 -31
- package/gsd-core/workflows/remove-phase.md +3 -2
- package/gsd-core/workflows/remove-workspace.md +1 -1
- package/gsd-core/workflows/resume-project.md +3 -2
- package/gsd-core/workflows/review.md +3 -2
- package/gsd-core/workflows/scan.md +3 -2
- package/gsd-core/workflows/secure-phase.md +11 -12
- package/gsd-core/workflows/settings-advanced.md +1 -1
- package/gsd-core/workflows/settings-integrations.md +1 -1
- package/gsd-core/workflows/settings.md +1 -1
- package/gsd-core/workflows/ship.md +12 -12
- package/gsd-core/workflows/sketch-wrap-up.md +1 -1
- package/gsd-core/workflows/sketch.md +1 -1
- package/gsd-core/workflows/smart-entry.md +1 -1
- package/gsd-core/workflows/spec-phase.md +1 -1
- package/gsd-core/workflows/spike-wrap-up.md +1 -1
- package/gsd-core/workflows/spike.md +1 -1
- package/gsd-core/workflows/stats.md +1 -1
- package/gsd-core/workflows/sync-skills.md +1 -1
- package/gsd-core/workflows/thread.md +2 -2
- package/gsd-core/workflows/transition.md +13 -23
- package/gsd-core/workflows/ui-phase.md +5 -4
- package/gsd-core/workflows/ui-review.md +4 -3
- package/gsd-core/workflows/ultraplan-phase.md +3 -2
- package/gsd-core/workflows/undo.md +1 -1
- package/gsd-core/workflows/validate-phase.md +10 -12
- package/gsd-core/workflows/verify-work/detail/elaboration.md +43 -3
- package/gsd-core/workflows/verify-work/steps/automated-ui-verification.md +1 -1
- package/gsd-core/workflows/verify-work/steps/mvp-uat-framing.md +5 -3
- package/gsd-core/workflows/verify-work.md +68 -59
- package/hooks/dist/gsd-agent-isolation-guard.js +8 -0
- package/hooks/dist/gsd-check-update-worker.js +8 -0
- package/hooks/dist/gsd-check-update.js +8 -0
- package/hooks/dist/gsd-context-monitor.js +31 -8
- package/hooks/dist/gsd-cursor-subagent-start.js +8 -0
- package/hooks/dist/gsd-secret-read-guard.js +147 -16
- package/hooks/dist/gsd-statusline.js +15 -7
- package/hooks/dist/gsd-update-banner.js +8 -0
- package/hooks/dist/gsd-windsurf-pre-write.js +11 -2
- package/hooks/dist/gsd-workflow-guard.js +5 -4
- package/hooks/dist/gsd-worktree-path-guard.js +6 -2
- package/hooks/dist/lib/cli-exit.js +12 -0
- package/hooks/dist/lib/git-probe.js +17 -1
- package/hooks/dist/lib/isolation-sentinel.js +2 -2
- package/hooks/gsd-agent-isolation-guard.js +8 -0
- package/hooks/gsd-check-update-worker.js +8 -0
- package/hooks/gsd-check-update.js +8 -0
- package/hooks/gsd-context-monitor.js +31 -8
- package/hooks/gsd-cursor-subagent-start.js +8 -0
- package/hooks/gsd-secret-read-guard.js +147 -16
- package/hooks/gsd-statusline.js +15 -7
- package/hooks/gsd-update-banner.js +8 -0
- package/hooks/gsd-windsurf-pre-write.js +11 -2
- package/hooks/gsd-workflow-guard.js +5 -4
- package/hooks/gsd-worktree-path-guard.js +6 -2
- package/hooks/hooks.json +5 -5
- package/hooks/lib/cli-exit.js +12 -0
- package/hooks/lib/git-probe.js +17 -1
- package/hooks/lib/isolation-sentinel.js +2 -2
- package/package.json +21 -4
- package/scripts/changeset/parse.cjs +52 -4
- package/scripts/ci-timeout-report.cjs +770 -4
- package/scripts/command-contract-helpers.cjs +12 -8
- package/scripts/docs-guard-registry.cjs +6 -0
- package/scripts/gen-features.cjs +13 -8
- package/scripts/gen-hooks-cli-exit.cjs +12 -28
- package/scripts/gen-loop-host-contract.cjs +10 -1
- package/scripts/gen-platform-conformance-tier.cjs +187 -1
- package/scripts/gen-plugin-skills.cjs +87 -1
- package/scripts/gen-research-agents.cjs +24 -31
- package/scripts/gen-scripts-cli-exit.cjs +30 -3
- package/scripts/gen-test-timings.cjs +32 -7
- package/scripts/lib/cli-exit.cjs +12 -0
- package/scripts/lib/macos-conformance-tier.generated.cjs +20 -2
- package/scripts/lib/ndjson-reporter.cjs +28 -3
- package/scripts/lib/platform-conformance-tier.generated.cjs +34 -5
- package/scripts/lib/registration-ledger-preload.cjs +155 -0
- package/scripts/lib/vendor-bundle.cjs +59 -0
- package/scripts/lib/vendor-licenses/saxes-6.0.0.txt +64 -0
- package/scripts/lint-allow-test-rule-refs.effective-ceiling.json +1 -1
- package/scripts/lint-allow-test-rule-refs.unverified-ceiling.json +1 -1
- package/scripts/lint-completion-predicate-drift.cjs +18 -19
- package/scripts/lint-descriptions.cjs +7 -3
- package/scripts/lint-docs-guard-registration.exempt-baseline.cjs +10 -0
- package/scripts/lint-eslint-glob-coverage.allowlist.json +20 -0
- package/scripts/lint-frontmatter-fence-drift.cjs +313 -0
- package/scripts/lint-frontmatter-scalar-broad-grep.cjs +122 -16
- package/scripts/lint-phase-enumeration-drift.cjs +12 -8
- package/scripts/lint-phase-id-drift.cjs +29 -0
- package/scripts/lint-planning-document-positive-control.cjs +329 -0
- package/scripts/lint-response-language-coverage.cjs +3 -0
- package/scripts/lint-skill-deps.cjs +7 -3
- package/scripts/lint-test-file-count.allowlist.json +11 -1
- package/scripts/lint-test-file-count.cjs +34 -1
- package/scripts/lint-vendored-deps.cjs +41 -5
- package/scripts/lint-workflow-shellcheck-baseline.json +10 -10
- package/scripts/mutation-matrix.cjs +50 -5
- package/scripts/require-issue-link-policy.cjs +6 -2
- package/scripts/sync-runtime-launcher.cjs +184 -2
- package/scripts/verify-npm-publish.cjs +76 -20
- package/skills/gsd-add-tests/SKILL.md +6 -1
- package/skills/gsd-ai-integration-phase/SKILL.md +6 -1
- package/skills/gsd-audit-fix/SKILL.md +5 -0
- package/skills/gsd-audit-milestone/SKILL.md +6 -1
- package/skills/gsd-autonomous/SKILL.md +5 -0
- package/skills/gsd-capture/SKILL.md +8 -4
- package/skills/gsd-code-review/SKILL.md +7 -2
- package/skills/gsd-complete-milestone/SKILL.md +4 -0
- package/skills/gsd-config/SKILL.md +8 -4
- package/skills/gsd-debug/SKILL.md +11 -7
- package/skills/gsd-discuss-phase/SKILL.md +7 -3
- package/skills/gsd-docs-update/SKILL.md +12 -7
- package/skills/gsd-eval-review/SKILL.md +6 -1
- package/skills/gsd-execute-phase/SKILL.md +12 -7
- package/skills/gsd-extract-learnings/SKILL.md +5 -0
- package/skills/gsd-fast/SKILL.md +4 -0
- package/skills/gsd-forensics/SKILL.md +5 -1
- package/skills/gsd-graphify/SKILL.md +10 -6
- package/skills/gsd-health/SKILL.md +5 -0
- package/skills/gsd-help/SKILL.md +7 -2
- package/skills/gsd-import/SKILL.md +7 -3
- package/skills/gsd-inbox/SKILL.md +5 -0
- package/skills/gsd-ingest-docs/SKILL.md +5 -1
- package/skills/gsd-manager/SKILL.md +6 -1
- package/skills/gsd-map-codebase/SKILL.md +7 -3
- package/skills/gsd-mempalace-capture/SKILL.md +5 -1
- package/skills/gsd-mempalace-recall/SKILL.md +5 -1
- package/skills/gsd-milestone-summary/SKILL.md +5 -1
- package/skills/gsd-mvp-phase/SKILL.md +8 -3
- package/skills/gsd-new-milestone/SKILL.md +6 -1
- package/skills/gsd-new-project/SKILL.md +5 -0
- package/skills/gsd-next/SKILL.md +6 -1
- package/skills/gsd-ns-context/SKILL.md +4 -0
- package/skills/gsd-ns-ideate/SKILL.md +4 -0
- package/skills/gsd-ns-manage/SKILL.md +4 -0
- package/skills/gsd-ns-project/SKILL.md +4 -0
- package/skills/gsd-ns-review/SKILL.md +4 -0
- package/skills/gsd-ns-workflow/SKILL.md +4 -0
- package/skills/gsd-onboard/SKILL.md +6 -1
- package/skills/gsd-pause-work/SKILL.md +5 -1
- package/skills/gsd-phase/SKILL.md +8 -4
- package/skills/gsd-plan-phase/SKILL.md +6 -1
- package/skills/gsd-plan-review-convergence/SKILL.md +5 -1
- package/skills/gsd-pr-branch/SKILL.md +4 -0
- package/skills/gsd-profile-user/SKILL.md +5 -1
- package/skills/gsd-progress/SKILL.md +6 -1
- package/skills/gsd-quick/SKILL.md +16 -10
- package/skills/gsd-quick-batch/SKILL.md +20 -8
- package/skills/gsd-review/SKILL.md +5 -1
- package/skills/gsd-review-backlog/SKILL.md +3 -2
- package/skills/gsd-secure-phase/SKILL.md +6 -1
- package/skills/gsd-ship/SKILL.md +5 -0
- package/skills/gsd-sketch/SKILL.md +7 -2
- package/skills/gsd-spec-phase/SKILL.md +5 -1
- package/skills/gsd-spike/SKILL.md +8 -3
- package/skills/gsd-surface/SKILL.md +5 -1
- package/skills/gsd-thread/SKILL.md +4 -0
- package/skills/gsd-ui-phase/SKILL.md +6 -1
- package/skills/gsd-ui-review/SKILL.md +6 -1
- package/skills/gsd-ultraplan-phase/SKILL.md +5 -1
- package/skills/gsd-undo/SKILL.md +5 -1
- package/skills/gsd-update/SKILL.md +6 -2
- package/skills/gsd-validate-phase/SKILL.md +6 -1
- package/skills/gsd-verify-work/SKILL.md +6 -1
- package/skills/gsd-workspace/SKILL.md +7 -3
- package/skills/gsd-workstreams/SKILL.md +6 -6
- package/vscode/package.json +1 -1
- package/gsd-core/workflows/execute-phase/steps/stale-reverification.md +0 -24
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* word boundary, so a phase section naming the repo `dashboard-financeiro` matches
|
|
8
8
|
* the token `dashboard` exactly like the real UI compound `micro-frontend` does.
|
|
9
9
|
* That boundary rule is intentional (#3718) and must not be weakened — instead,
|
|
10
|
-
* the plan gate (`computeUiPlanGate` in
|
|
10
|
+
* the plan gate (`computeUiPlanGate` in gate-ui-plan.cjs) corroborates the
|
|
11
11
|
* token match against the static repo tree before blocking.
|
|
12
12
|
*
|
|
13
13
|
* This mirrors what the sibling post-wave gate (`computeUiSafetyGate`) already
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* of file layout;
|
|
20
20
|
* (b) any `*.tsx` / `*.jsx` / `*.vue` / `*.svelte` file in the tree — the
|
|
21
21
|
* component-framework subset of `UI_FILE_EXTENSIONS_RE`
|
|
22
|
-
* (
|
|
22
|
+
* (gate-ui-safety.cjs). The weaker members of that list (css, scss,
|
|
23
23
|
* html, ...) are deliberately NOT static evidence: docs sites and
|
|
24
24
|
* markdown/bash/config repos routinely carry stray `.html`/`.css`, which
|
|
25
25
|
* is precisely the false-positive class #3312 reports.
|
|
@@ -37,16 +37,22 @@
|
|
|
37
37
|
* (imports are case-sensitive in all four ecosystems); extension
|
|
38
38
|
* matching is case-insensitive, mirroring `UI_COMPONENT_FILE_RE`.
|
|
39
39
|
*
|
|
40
|
-
*
|
|
40
|
+
* #5170 (ADR-5057 §4): the detector reads typed evidence. An affirmative finding is
|
|
41
|
+
* `found`; a walk that completed without one is `none`; a `package.json` that exists but cannot be
|
|
42
|
+
* read or parsed, a directory that cannot be listed or a native source file that cannot be opened
|
|
43
|
+
* is `unreadable` WHEN no affirmative evidence was found — the gate that consumes this must not
|
|
44
|
+
* certify "no frontend" over a tree it could not look at. Never throws.
|
|
41
45
|
*/
|
|
42
46
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
43
47
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
44
48
|
};
|
|
45
49
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
50
|
exports.NATIVE_UI_CONTENT_MARKERS = exports.NATIVE_UI_XAML_RE = exports.NATIVE_UI_SOURCE_RE = exports.UI_COMPONENT_FILE_RE = void 0;
|
|
51
|
+
exports.readStaticFrontendEvidence = readStaticFrontendEvidence;
|
|
47
52
|
exports.hasStaticFrontendEvidence = hasStaticFrontendEvidence;
|
|
48
53
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
49
54
|
const node_path_1 = __importDefault(require("node:path"));
|
|
55
|
+
const gate_evidence_cjs_1 = require("./gate-evidence.cjs");
|
|
50
56
|
/** Component-framework file extensions — the static-evidence subset of UI_FILE_EXTENSIONS_RE. */
|
|
51
57
|
exports.UI_COMPONENT_FILE_RE = /\.(tsx|jsx|vue|svelte)$/i;
|
|
52
58
|
/** Native UI source files whose CONTENT is scanned for an import marker (#4658). */
|
|
@@ -111,23 +117,23 @@ const SKIP_DIRS = new Set([
|
|
|
111
117
|
]);
|
|
112
118
|
/** Walk safety cap — beyond this the tree is treated as scanned (evidence decided by then). */
|
|
113
119
|
const MAX_WALK_ENTRIES = 10_000;
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
return
|
|
121
|
-
}
|
|
120
|
+
/** The first read failure of the package.json signal: `unreadable`, or `none` (absent), or `found`. */
|
|
121
|
+
function packageJsonEvidence(projectDir) {
|
|
122
|
+
const read = (0, gate_evidence_cjs_1.readTextEvidence)(node_path_1.default.join(projectDir, 'package.json'));
|
|
123
|
+
if (read.kind === 'none')
|
|
124
|
+
return (0, gate_evidence_cjs_1.evidenceNone)();
|
|
125
|
+
if (read.kind === 'unreadable')
|
|
126
|
+
return (0, gate_evidence_cjs_1.evidenceUnreadable)(read.reason, read.span);
|
|
122
127
|
let parsed;
|
|
123
128
|
try {
|
|
124
|
-
parsed = JSON.parse(
|
|
129
|
+
parsed = JSON.parse(read.value);
|
|
125
130
|
}
|
|
126
|
-
catch {
|
|
127
|
-
|
|
131
|
+
catch (err) {
|
|
132
|
+
// A package.json that exists but is not valid JSON could not be read: unreadable, not "no deps".
|
|
133
|
+
return (0, gate_evidence_cjs_1.evidenceFromError)(err, 'package.json');
|
|
128
134
|
}
|
|
129
135
|
if (parsed === null || typeof parsed !== 'object')
|
|
130
|
-
return
|
|
136
|
+
return (0, gate_evidence_cjs_1.evidenceNone)();
|
|
131
137
|
const pkg = parsed;
|
|
132
138
|
for (const field of ['dependencies', 'devDependencies', 'peerDependencies']) {
|
|
133
139
|
const deps = pkg[field];
|
|
@@ -135,79 +141,83 @@ function packageJsonHasUiFramework(projectDir) {
|
|
|
135
141
|
continue;
|
|
136
142
|
for (const name of Object.keys(deps)) {
|
|
137
143
|
if (UI_FRAMEWORK_DEPS.has(name))
|
|
138
|
-
return true;
|
|
144
|
+
return (0, gate_evidence_cjs_1.evidenceFound)(true);
|
|
139
145
|
}
|
|
140
146
|
}
|
|
141
|
-
return
|
|
147
|
+
return (0, gate_evidence_cjs_1.evidenceNone)();
|
|
142
148
|
}
|
|
143
149
|
/**
|
|
144
150
|
* Shared bounded BFS over the project tree — the single home of the walk
|
|
145
151
|
* semantics both evidence walks depend on: SKIP_DIRS pruning, the
|
|
146
|
-
* MAX_WALK_ENTRIES entry cap (cap-hit →
|
|
152
|
+
* MAX_WALK_ENTRIES entry cap (cap-hit → not found: the tree is treated as
|
|
147
153
|
* scanned and evidence stays undecided), symlinks never followed
|
|
148
|
-
* (withFileTypes Dirents)
|
|
149
|
-
*
|
|
150
|
-
* the walk with `
|
|
154
|
+
* (withFileTypes Dirents). `visit` is called for every regular file with its
|
|
155
|
+
* name, full path and a `note` for a read failure it met; returning `true`
|
|
156
|
+
* stops the walk with `found`. A directory that cannot be listed is NOT
|
|
157
|
+
* silently skipped: it is noted, the walk goes on, and the caller learns that
|
|
158
|
+
* part of the tree was never seen (an absent directory is just skipped).
|
|
151
159
|
*/
|
|
152
160
|
function walkProjectFiles(projectDir, visit) {
|
|
161
|
+
let unreadable = null;
|
|
162
|
+
const note = (reason) => {
|
|
163
|
+
unreadable = unreadable ?? reason;
|
|
164
|
+
};
|
|
153
165
|
const queue = [projectDir];
|
|
154
166
|
let visited = 0;
|
|
155
167
|
while (queue.length > 0 && visited < MAX_WALK_ENTRIES) {
|
|
156
168
|
const dir = queue.shift();
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
catch {
|
|
162
|
-
continue; // unreadable directory → skip it
|
|
169
|
+
const listing = (0, gate_evidence_cjs_1.readDirEntriesEvidence)(dir);
|
|
170
|
+
if (listing.kind === 'unreadable') {
|
|
171
|
+
note(listing.reason);
|
|
172
|
+
continue;
|
|
163
173
|
}
|
|
164
|
-
|
|
174
|
+
if (listing.kind === 'none')
|
|
175
|
+
continue; // vanished since it was queued: nothing to see
|
|
176
|
+
for (const entry of listing.value) {
|
|
165
177
|
visited++;
|
|
166
178
|
if (visited >= MAX_WALK_ENTRIES)
|
|
167
|
-
return false;
|
|
179
|
+
return { found: false, unreadable };
|
|
168
180
|
if (entry.isDirectory()) {
|
|
169
181
|
if (!SKIP_DIRS.has(entry.name))
|
|
170
182
|
queue.push(node_path_1.default.join(dir, entry.name));
|
|
171
183
|
}
|
|
172
|
-
else if (entry.isFile() && visit(entry.name, node_path_1.default.join(dir, entry.name))) {
|
|
173
|
-
return true;
|
|
184
|
+
else if (entry.isFile() && visit(entry.name, node_path_1.default.join(dir, entry.name), note)) {
|
|
185
|
+
return { found: true, unreadable };
|
|
174
186
|
}
|
|
175
187
|
}
|
|
176
188
|
}
|
|
177
|
-
return false;
|
|
189
|
+
return { found: false, unreadable };
|
|
178
190
|
}
|
|
179
|
-
function
|
|
191
|
+
function treeComponentFileEvidence(projectDir) {
|
|
180
192
|
return walkProjectFiles(projectDir, (name) => exports.UI_COMPONENT_FILE_RE.test(name));
|
|
181
193
|
}
|
|
182
194
|
/**
|
|
183
|
-
* Read at most the first 64 KiB of `file`
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
* generated monsters in full. Any I/O failure degrades to false — never throw.
|
|
195
|
+
* Read at most the first 64 KiB of `file` as evidence (#4658). Import sections live at
|
|
196
|
+
* the top of a source file, so a bounded prefix read keeps the gate's plan-time cost
|
|
197
|
+
* profile without reading generated monsters in full.
|
|
187
198
|
*/
|
|
188
|
-
function
|
|
199
|
+
function readPrefixEvidence(file) {
|
|
189
200
|
let fd;
|
|
190
201
|
try {
|
|
191
202
|
fd = node_fs_1.default.openSync(file, 'r');
|
|
192
203
|
}
|
|
193
|
-
catch {
|
|
194
|
-
return
|
|
204
|
+
catch (err) {
|
|
205
|
+
return (0, gate_evidence_cjs_1.evidenceFromError)(err, file);
|
|
195
206
|
}
|
|
196
207
|
try {
|
|
197
208
|
const bytes = Buffer.alloc(64 * 1024);
|
|
198
209
|
const read = node_fs_1.default.readSync(fd, bytes, 0, bytes.length, 0);
|
|
199
|
-
|
|
200
|
-
return markers.some((m) => prefix.includes(m));
|
|
210
|
+
return (0, gate_evidence_cjs_1.evidenceFound)(bytes.toString('utf8', 0, read));
|
|
201
211
|
}
|
|
202
|
-
catch {
|
|
203
|
-
return
|
|
212
|
+
catch (err) {
|
|
213
|
+
return (0, gate_evidence_cjs_1.evidenceFromError)(err, file);
|
|
204
214
|
}
|
|
205
215
|
finally {
|
|
206
216
|
try {
|
|
207
217
|
node_fs_1.default.closeSync(fd);
|
|
208
218
|
}
|
|
209
219
|
catch {
|
|
210
|
-
// already closed —
|
|
220
|
+
// already closed — the evidence was read (or its failure returned) above
|
|
211
221
|
}
|
|
212
222
|
}
|
|
213
223
|
}
|
|
@@ -216,13 +226,20 @@ function fileHasAnyMarker(file, markers) {
|
|
|
216
226
|
* extension alone; `.swift`/`.kt`/`.dart` are evidence only when the file's
|
|
217
227
|
* content carries its ecosystem's import marker.
|
|
218
228
|
*/
|
|
219
|
-
function
|
|
220
|
-
return walkProjectFiles(projectDir, (name, fullPath) => {
|
|
229
|
+
function treeNativeUiEvidence(projectDir) {
|
|
230
|
+
return walkProjectFiles(projectDir, (name, fullPath, note) => {
|
|
221
231
|
if (exports.NATIVE_UI_XAML_RE.test(name))
|
|
222
232
|
return true;
|
|
223
233
|
if (exports.NATIVE_UI_SOURCE_RE.test(name)) {
|
|
224
234
|
const markers = exports.NATIVE_UI_CONTENT_MARKERS[node_path_1.default.extname(name).toLowerCase()];
|
|
225
|
-
|
|
235
|
+
if (markers == null)
|
|
236
|
+
return false;
|
|
237
|
+
const prefix = readPrefixEvidence(fullPath);
|
|
238
|
+
if (prefix.kind === 'unreadable') {
|
|
239
|
+
note(prefix.reason);
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
return prefix.kind === 'found' && markers.some((m) => prefix.value.includes(m));
|
|
226
243
|
}
|
|
227
244
|
return false;
|
|
228
245
|
});
|
|
@@ -231,18 +248,37 @@ function treeHasNativeUiFile(projectDir) {
|
|
|
231
248
|
* Does the project tree carry static evidence of a frontend?
|
|
232
249
|
*
|
|
233
250
|
* @param projectDir - Absolute path to the project root (the gate's cwd).
|
|
234
|
-
* @returns
|
|
251
|
+
* @returns `found` when package.json declares a UI-framework dependency, the tree
|
|
235
252
|
* contains a component-framework file, or the tree contains native UI
|
|
236
253
|
* evidence (a `.xaml` file, or a `.swift`/`.kt`/`.dart` file carrying
|
|
237
|
-
* its ecosystem's UI import marker — #4658);
|
|
238
|
-
*
|
|
254
|
+
* its ecosystem's UI import marker — #4658); otherwise `unreadable` when
|
|
255
|
+
* any part of the tree or manifest could not be read (the absence of
|
|
256
|
+
* evidence is then not established), else `none`. Affirmative evidence
|
|
257
|
+
* always wins over a read failure elsewhere.
|
|
239
258
|
*/
|
|
240
|
-
function
|
|
259
|
+
function readStaticFrontendEvidence(projectDir) {
|
|
241
260
|
if (typeof projectDir !== 'string' || projectDir === '')
|
|
242
|
-
return
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
if (
|
|
246
|
-
return
|
|
247
|
-
|
|
261
|
+
return (0, gate_evidence_cjs_1.evidenceNone)();
|
|
262
|
+
let unreadable = null;
|
|
263
|
+
const manifest = packageJsonEvidence(projectDir);
|
|
264
|
+
if (manifest.kind === 'found')
|
|
265
|
+
return manifest;
|
|
266
|
+
if (manifest.kind === 'unreadable')
|
|
267
|
+
unreadable = manifest.reason;
|
|
268
|
+
const components = treeComponentFileEvidence(projectDir);
|
|
269
|
+
if (components.found)
|
|
270
|
+
return (0, gate_evidence_cjs_1.evidenceFound)(true);
|
|
271
|
+
unreadable = unreadable ?? components.unreadable;
|
|
272
|
+
const native = treeNativeUiEvidence(projectDir);
|
|
273
|
+
if (native.found)
|
|
274
|
+
return (0, gate_evidence_cjs_1.evidenceFound)(true);
|
|
275
|
+
unreadable = unreadable ?? native.unreadable;
|
|
276
|
+
return unreadable === null ? (0, gate_evidence_cjs_1.evidenceNone)() : (0, gate_evidence_cjs_1.evidenceUnreadable)(unreadable, projectDir);
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* The boolean projection of {@link readStaticFrontendEvidence}: true only on affirmative evidence. It
|
|
280
|
+
* reads nothing itself; a gate that must tell "no frontend" from "could not look" uses the evidence.
|
|
281
|
+
*/
|
|
282
|
+
function hasStaticFrontendEvidence(projectDir) {
|
|
283
|
+
return readStaticFrontendEvidence(projectDir).kind === 'found';
|
|
248
284
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# vendor/
|
|
2
2
|
|
|
3
|
-
This directory holds
|
|
4
|
-
|
|
3
|
+
This directory holds third-party artifacts that `gsd-core/bin/**` needs at
|
|
4
|
+
runtime: verbatim upstream builds or reproducible bundles of unmodified upstream code.
|
|
5
5
|
|
|
6
6
|
## Why
|
|
7
7
|
|
|
@@ -15,6 +15,19 @@ in-tree instead of depending on it being installed as an npm package.
|
|
|
15
15
|
|
|
16
16
|
## Contents
|
|
17
17
|
|
|
18
|
+
- `tap-parser.cjs` and `saxes.cjs` — standalone CJS bundles built with pinned
|
|
19
|
+
esbuild from the exact devDependency versions and their lockfile dependencies.
|
|
20
|
+
The TAP and JUnit adapters use these for report grammar and diagnostics.
|
|
21
|
+
`scripts/lib/vendor-bundle.cjs` rejects external imports other than Node
|
|
22
|
+
builtins; `lint-vendored-deps.cjs` rebuilds in memory and byte-compares both
|
|
23
|
+
code and companion `.LICENSE.txt` notices. Refresh with
|
|
24
|
+
`npm run lint:vendored-deps -- --fix`.
|
|
25
|
+
`tap-parser`'s npm metadata says BlueOak-1.0.0 while its shipped LICENSE says
|
|
26
|
+
MIT; the notices preserve both the metadata and the actual license text.
|
|
27
|
+
saxes 6.0.0 omits LICENSE from npm, so the tagged upstream license is preserved
|
|
28
|
+
verbatim in `scripts/lib/vendor-licenses/saxes-6.0.0.txt` and included in the
|
|
29
|
+
generated notices. Neither package's source is patched.
|
|
30
|
+
|
|
18
31
|
- `re2js.cjs` — verbatim copy of `node_modules/re2js/build/index.cjs`
|
|
19
32
|
(upstream package `re2js`, pinned version see `package.json`
|
|
20
33
|
`devDependencies.re2js`). Used by `src/pattern.cts` (compiled to
|
|
@@ -30,12 +43,19 @@ in-tree instead of depending on it being installed as an npm package.
|
|
|
30
43
|
`require()` calls of its own, and exposes `load`/`dump`/`FAILSAFE_SCHEMA`/
|
|
31
44
|
`YAMLException`.
|
|
32
45
|
|
|
33
|
-
##
|
|
46
|
+
## Type twins
|
|
47
|
+
|
|
48
|
+
The bundled parsers use **upstream-reference** twins: declaration-only
|
|
49
|
+
`export * from '<package>';` files under `src/vendor/`. TypeScript reads the
|
|
50
|
+
actual upstream declarations during the build, with no hand-maintained API
|
|
51
|
+
copy and no bare runtime import. The vendoring guard checks the exact forwarding
|
|
52
|
+
declaration. The installed runtime needs only the bundled JavaScript.
|
|
34
53
|
|
|
35
54
|
Each vendored package needs a `.d.cts` under `src/vendor/` so TypeScript can
|
|
36
55
|
resolve types for a relative `./vendor/<pkg>.cjs` import from `src/**`
|
|
37
56
|
(module resolution for a `.cts` source is relative to `src/`, not the
|
|
38
|
-
compiled output dir).
|
|
57
|
+
compiled output dir). Besides the upstream-reference twins above, the prebuilt
|
|
58
|
+
upstream artifacts use one of two kinds:
|
|
39
59
|
|
|
40
60
|
- **upstream-verbatim** (`re2js.d.cts`) — a byte-for-byte copy of an
|
|
41
61
|
upstream `.d.cts`/`.d.ts` that ships with the package. Both the
|
|
@@ -54,8 +74,8 @@ compiled output dir). There are two kinds:
|
|
|
54
74
|
|
|
55
75
|
## Do not hand-edit
|
|
56
76
|
|
|
57
|
-
|
|
58
|
-
|
|
77
|
+
Never edit these artifacts directly. Refresh bundled packages through the
|
|
78
|
+
vendoring command above. Refresh the prebuilt upstream artifacts as follows:
|
|
59
79
|
|
|
60
80
|
```
|
|
61
81
|
cp node_modules/re2js/build/index.cjs gsd-core/bin/lib/vendor/re2js.cjs
|
|
@@ -68,8 +88,10 @@ cp node_modules/js-yaml/dist/js-yaml.js gsd-core/bin/lib/vendor/js-yaml.cjs
|
|
|
68
88
|
```
|
|
69
89
|
|
|
70
90
|
`node scripts/lint-vendored-deps.cjs` fails CI if any vendored copy drifts
|
|
71
|
-
byte-for-byte from its `node_modules` upstream
|
|
72
|
-
|
|
91
|
+
byte-for-byte from its `node_modules` upstream (for a bundled package: from
|
|
92
|
+
an in-memory rebuild of the bundle and its license notices), from its own
|
|
93
|
+
source-side type twin (upstream-verbatim twins only; an upstream-reference
|
|
94
|
+
twin must be the exact forwarding declaration), or from the version pinned in
|
|
73
95
|
`package.json` `devDependencies`. It is table-driven (`VENDORED` in that
|
|
74
|
-
script) — adding a
|
|
96
|
+
script) — adding a vendored package means adding a row, not another
|
|
75
97
|
hardcoded check block (ADR-3473 §8.3, "one implementation per rule").
|