@opengsd/gsd-core 1.14.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/README.ja-JP.md +3 -3
- package/README.ko-KR.md +3 -3
- package/README.pt-BR.md +3 -3
- package/README.zh-CN.md +3 -3
- package/agents/gsd-code-fixer.compact.md +7 -6
- package/agents/gsd-code-fixer.md +9 -8
- 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 +17 -2
- package/agents/gsd-debug-session-manager.md +17 -2
- package/agents/gsd-debugger.md +3 -3
- package/agents/gsd-eval-auditor.compact.md +1 -1
- package/agents/gsd-eval-auditor.md +1 -1
- package/agents/gsd-executor.md +17 -12
- 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 +19 -11
- package/agents/gsd-plan-checker.md +15 -9
- package/agents/gsd-planner.md +15 -11
- 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 +166 -37
- package/agents/gsd-ui-researcher.compact.md +1 -1
- package/agents/gsd-ui-researcher.md +1 -1
- package/agents/gsd-verifier.md +37 -14
- package/bin/install.js +764 -287
- 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 +7 -2
- package/commands/gsd/capture.md +9 -5
- 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 +12 -4
- 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 +11 -7
- package/commands/gsd/pr-branch.md +4 -0
- package/commands/gsd/profile-user.md +5 -1
- package/commands/gsd/progress.md +7 -2
- package/commands/gsd/quick-batch.md +21 -9
- package/commands/gsd/quick.md +12 -7
- package/commands/gsd/review.md +7 -4
- 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 +477 -78
- package/gsd-core/bin/lib/active-workstream-store.cjs +15 -0
- package/gsd-core/bin/lib/adr-parser.cjs +3 -1
- package/gsd-core/bin/lib/agent-install-check.cjs +4 -1
- package/gsd-core/bin/lib/audit.cjs +144 -42
- 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 +197 -222
- package/gsd-core/bin/lib/capability-validator.cjs +16 -1
- package/gsd-core/bin/lib/check-auto-mode.cjs +35 -0
- package/gsd-core/bin/lib/check-command-router.cjs +164 -1625
- 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 +32 -33
- 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 +343 -207
- package/gsd-core/bin/lib/complexity-trigger.cjs +8 -7
- package/gsd-core/bin/lib/config-loader.cjs +65 -4
- package/gsd-core/bin/lib/config.cjs +76 -19
- 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/decisions.cjs +30 -14
- 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 +426 -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/graphify.cjs +10 -2
- 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/host-runtime-detection.cjs +9 -0
- package/gsd-core/bin/lib/init.cjs +364 -132
- package/gsd-core/bin/lib/install-engine.cjs +30 -33
- package/gsd-core/bin/lib/install-profiles.cjs +7 -4
- package/gsd-core/bin/lib/installer-migrations.cjs +8 -1
- 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 +37 -6
- package/gsd-core/bin/lib/model-resolver.cjs +171 -62
- 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 +20 -5
- package/gsd-core/bin/lib/phase-estimation.cjs +5 -4
- package/gsd-core/bin/lib/phase-id-card.cjs +32 -0
- package/gsd-core/bin/lib/phase-id-display.cjs +78 -0
- package/gsd-core/bin/lib/phase-id.cjs +110 -8
- package/gsd-core/bin/lib/phase-lifecycle.cjs +9 -2
- package/gsd-core/bin/lib/phase-locator.cjs +29 -10
- package/gsd-core/bin/lib/phase-status.cjs +360 -0
- package/gsd-core/bin/lib/phase.cjs +489 -88
- package/gsd-core/bin/lib/plan-document.cjs +142 -20
- package/gsd-core/bin/lib/plan-drift-guard.cjs +5 -0
- package/gsd-core/bin/lib/planning-document.cjs +692 -0
- package/gsd-core/bin/lib/planning-inspect.cjs +60 -9
- package/gsd-core/bin/lib/planning-snapshot.cjs +18 -0
- package/gsd-core/bin/lib/planning-workspace.cjs +83 -55
- package/gsd-core/bin/lib/pr-branch-patterns.cjs +57 -0
- package/gsd-core/bin/lib/pristine-baseline.cjs +10 -0
- package/gsd-core/bin/lib/probe-core.cjs +7 -1
- 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/project-root.cjs +41 -2
- 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/review-lane-descriptor.cjs +10 -30
- package/gsd-core/bin/lib/review-reviewer-selection.cjs +2 -2
- package/gsd-core/bin/lib/roadmap-command-router.cjs +25 -19
- package/gsd-core/bin/lib/roadmap-parser.cjs +242 -15
- package/gsd-core/bin/lib/roadmap-upgrade.cjs +1653 -65
- package/gsd-core/bin/lib/roadmap.cjs +405 -88
- package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +373 -187
- package/gsd-core/bin/lib/runtime-artifact-install-plan.cjs +5 -2
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +57 -1
- package/gsd-core/bin/lib/runtime-homes.cjs +14 -7
- package/gsd-core/bin/lib/runtime-hooks-surface.cjs +522 -624
- package/gsd-core/bin/lib/runtime-name-policy.cjs +246 -21
- package/gsd-core/bin/lib/runtime-slash.cjs +47 -30
- package/gsd-core/bin/lib/shell-command-projection.cjs +47 -8
- 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-transition.cjs +39 -2
- package/gsd-core/bin/lib/state.cjs +256 -105
- package/gsd-core/bin/lib/surface.cjs +19 -2
- package/gsd-core/bin/lib/tdd-red-evidence.cjs +48 -79
- package/gsd-core/bin/lib/uat-predicate.cjs +359 -38
- package/gsd-core/bin/lib/uat.cjs +432 -7
- package/gsd-core/bin/lib/ui-consideration-probe.cjs +15 -2
- package/gsd-core/bin/lib/ui-frontend-evidence.cjs +167 -40
- package/gsd-core/bin/lib/undo-commit-selection.cjs +131 -0
- 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 +1378 -274
- package/gsd-core/bin/lib/verify-command-grounding.cjs +46 -2
- package/gsd-core/bin/lib/verify-command-router.cjs +18 -7
- package/gsd-core/bin/lib/verify.cjs +357 -531
- 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/lib/worktree-base-ref.cjs +482 -73
- package/gsd-core/bin/lib/worktree-safety.cjs +784 -51
- package/gsd-core/bin/shared/config-defaults.manifest.json +8 -0
- package/gsd-core/bin/shared/config-schema.manifest.json +5 -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/checkpoints.md +5 -3
- package/gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json +28 -3
- package/gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json +37 -4
- package/gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json +28 -3
- package/gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json +28 -3
- package/gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json +37 -4
- package/gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json +37 -4
- package/gsd-core/references/edge-probe.md +195 -21
- package/gsd-core/references/execute-mvp-tdd.md +5 -10
- package/gsd-core/references/execute-phase-between-wave-reset.md +10 -6
- package/gsd-core/references/execute-phase-response-language.md +1 -1
- package/gsd-core/references/execute-phase-wave-guard.md +22 -11
- package/gsd-core/references/gsd-run-resolver.md +1 -1
- package/gsd-core/references/loop-hook-dispatch.md +7 -1
- package/gsd-core/references/model-profiles.md +1 -1
- package/gsd-core/references/offer-next.md +1 -1
- package/gsd-core/references/phase-argument-parsing.md +9 -7
- package/gsd-core/references/phase-id-convention.md +28 -0
- package/gsd-core/references/planner-gap-closure.md +2 -0
- package/gsd-core/references/planner-load-graph-context.md +24 -13
- package/gsd-core/references/planner-verify-command-grounding.md +14 -0
- package/gsd-core/references/planning-config.md +12 -3
- package/gsd-core/references/spidr-splitting.md +1 -1
- package/gsd-core/references/tdd.md +37 -8
- package/gsd-core/references/ui-consideration-probe.md +10 -5
- package/gsd-core/references/verifier-phase-gates.md +5 -2
- package/gsd-core/references/verify-command-path-resolvability.md +10 -2
- package/gsd-core/references/verify-mvp-mode.md +2 -2
- package/gsd-core/references/workstream-flag.md +33 -3
- package/gsd-core/references/worktree-path-safety.md +321 -0
- 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 +4 -3
- package/gsd-core/workflows/add-todo.md +6 -5
- package/gsd-core/workflows/ai-integration-phase.md +13 -4
- 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/steps/converge-fail-fast.md +9 -18
- package/gsd-core/workflows/autonomous.md +43 -23
- package/gsd-core/workflows/check-todos.md +7 -6
- package/gsd-core/workflows/cleanup.md +2 -2
- package/gsd-core/workflows/code-review/steps/dispatch-fix.md +4 -3
- package/gsd-core/workflows/code-review/steps/structural-pre-pass.md +20 -13
- package/gsd-core/workflows/code-review-fix.md +112 -25
- package/gsd-core/workflows/code-review.md +146 -135
- package/gsd-core/workflows/complete-milestone/detail/elaboration.md +4 -3
- package/gsd-core/workflows/complete-milestone.md +13 -8
- package/gsd-core/workflows/debug.md +32 -7
- 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 +2 -2
- package/gsd-core/workflows/docs-update.md +6 -5
- package/gsd-core/workflows/edit-phase.md +4 -3
- package/gsd-core/workflows/eval-review.md +14 -5
- package/gsd-core/workflows/execute-phase/detail/elaboration.md +2 -2
- package/gsd-core/workflows/execute-phase/steps/code-review-disposition.md +1019 -0
- 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 +37 -3
- 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 +46 -9
- package/gsd-core/workflows/execute-phase/steps/protected-branch.md +1 -1
- package/gsd-core/workflows/execute-phase/steps/ready-wave-gate.md +37 -0
- 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/threat-id-gate.md +28 -0
- 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/steps/worktree-base-check.md +25 -0
- package/gsd-core/workflows/execute-phase.md +96 -178
- package/gsd-core/workflows/execute-plan.md +18 -23
- package/gsd-core/workflows/explore.md +4 -4
- package/gsd-core/workflows/extract-learnings.md +4 -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 +3 -2
- package/gsd-core/workflows/help/modes/full.compact.md +3 -3
- package/gsd-core/workflows/help/modes/full.md +5 -5
- package/gsd-core/workflows/help/modes/topic.md +15 -5
- package/gsd-core/workflows/import.md +4 -3
- package/gsd-core/workflows/inbox.md +2 -2
- package/gsd-core/workflows/ingest-docs.md +3 -3
- 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 +6 -4
- package/gsd-core/workflows/map-codebase.md +5 -4
- 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 +11 -11
- package/gsd-core/workflows/new-project/steps/auto-mode-config.md +3 -3
- package/gsd-core/workflows/new-project/steps/codebase-map-offer.md +1 -1
- package/gsd-core/workflows/new-project.md +7 -7
- package/gsd-core/workflows/new-workspace.md +2 -2
- package/gsd-core/workflows/next.md +1 -1
- package/gsd-core/workflows/note.md +1 -1
- package/gsd-core/workflows/onboard.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 +17 -5
- 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 +23 -5
- package/gsd-core/workflows/plan-phase.md +50 -24
- package/gsd-core/workflows/plan-review-convergence.md +21 -5
- package/gsd-core/workflows/plant-seed.md +62 -20
- package/gsd-core/workflows/pr-branch.md +113 -13
- package/gsd-core/workflows/profile-user.md +2 -2
- package/gsd-core/workflows/progress.md +19 -49
- package/gsd-core/workflows/quick/steps/plan-checker-loop.md +27 -0
- 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 +62 -39
- package/gsd-core/workflows/reapply-patches.md +9 -3
- package/gsd-core/workflows/remove-phase.md +3 -2
- package/gsd-core/workflows/remove-workspace.md +2 -2
- package/gsd-core/workflows/resume-project.md +3 -2
- package/gsd-core/workflows/review.md +33 -17
- package/gsd-core/workflows/scan.md +3 -2
- package/gsd-core/workflows/secure-phase.md +13 -13
- package/gsd-core/workflows/settings-advanced.md +30 -10
- package/gsd-core/workflows/settings-integrations.md +2 -3
- package/gsd-core/workflows/settings.md +4 -4
- package/gsd-core/workflows/ship.md +14 -13
- 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 +2 -2
- package/gsd-core/workflows/spec-phase.md +15 -5
- 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 +5 -5
- package/gsd-core/workflows/thread.md +2 -2
- package/gsd-core/workflows/transition.md +13 -23
- package/gsd-core/workflows/ui-phase.md +48 -11
- package/gsd-core/workflows/ui-review.md +21 -6
- package/gsd-core/workflows/ultraplan-phase.md +3 -2
- package/gsd-core/workflows/undo.md +339 -20
- package/gsd-core/workflows/update.md +7 -7
- package/gsd-core/workflows/validate-phase.md +12 -13
- 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 +129 -55
- package/hooks/dist/gsd-agent-isolation-guard.js +32 -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 +161 -4
- package/hooks/dist/gsd-statusline.js +85 -20
- package/hooks/dist/gsd-update-banner.js +8 -0
- package/hooks/dist/gsd-validate-commit.sh +63 -4
- 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 +32 -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 +161 -4
- package/hooks/gsd-statusline.js +85 -20
- package/hooks/gsd-update-banner.js +8 -0
- package/hooks/gsd-validate-commit.sh +63 -4
- 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 +22 -4
- package/scripts/build-hooks.js +15 -6
- package/scripts/changeset/parse.cjs +52 -4
- package/scripts/check-contract-drift.cjs +127 -11
- package/scripts/ci-timeout-report.cjs +770 -4
- package/scripts/command-contract-helpers.cjs +15 -8
- package/scripts/docs-guard-registry.cjs +34 -0
- package/scripts/gen-features.cjs +13 -8
- package/scripts/gen-hooks-cli-exit.cjs +12 -28
- package/scripts/gen-loop-host-contract.cjs +79 -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 +34 -2
- package/scripts/lib/ndjson-reporter.cjs +31 -5
- package/scripts/lib/platform-conformance-tier.generated.cjs +45 -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 +38 -1
- 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-arg-assignment.cjs +257 -0
- package/scripts/lint-phase-enumeration-drift.cjs +12 -8
- package/scripts/lint-phase-id-drift.cjs +319 -5
- package/scripts/lint-planning-document-positive-control.cjs +329 -0
- package/scripts/lint-pr-branch-pattern-drift.cjs +148 -0
- package/scripts/lint-response-language-coverage.cjs +3 -0
- package/scripts/lint-retired-runtime-name.cjs +619 -0
- package/scripts/lint-skill-deps.cjs +7 -3
- package/scripts/lint-state-write-path-drift.cjs +93 -0
- package/scripts/lint-test-file-count.allowlist.json +38 -9
- package/scripts/lint-test-file-count.cjs +34 -1
- package/scripts/lint-vendored-deps.cjs +41 -5
- package/scripts/lint-workflow-shellcheck-baseline.json +25 -10
- package/scripts/mutation-matrix.cjs +50 -5
- package/scripts/prompt-injection-scan.sh +4 -0
- package/scripts/release-tarball-smoke.cjs +194 -1
- 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 +7 -2
- package/skills/gsd-capture/SKILL.md +9 -5
- 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 +12 -4
- 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 +10 -6
- package/skills/gsd-pr-branch/SKILL.md +4 -0
- package/skills/gsd-profile-user/SKILL.md +5 -1
- package/skills/gsd-progress/SKILL.md +7 -2
- package/skills/gsd-quick/SKILL.md +16 -10
- package/skills/gsd-quick-batch/SKILL.md +21 -9
- package/skills/gsd-review/SKILL.md +7 -4
- 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
|
@@ -14,6 +14,11 @@
|
|
|
14
14
|
"phase_id_convention": null,
|
|
15
15
|
"mode": "interactive",
|
|
16
16
|
"claude_md_path": "./.claude/CLAUDE.md",
|
|
17
|
+
"gates": {
|
|
18
|
+
"execute_next_plan": true,
|
|
19
|
+
"confirm_transition": true,
|
|
20
|
+
"confirm_milestone_scope": true
|
|
21
|
+
},
|
|
17
22
|
"git": {
|
|
18
23
|
"branching_strategy": "none",
|
|
19
24
|
"create_tag": true,
|
|
@@ -68,6 +73,9 @@
|
|
|
68
73
|
"sub_repos": [],
|
|
69
74
|
"granularity": "standard"
|
|
70
75
|
},
|
|
76
|
+
"planner": {
|
|
77
|
+
"stall_detection_enabled": true
|
|
78
|
+
},
|
|
71
79
|
"hooks": {
|
|
72
80
|
"context_warnings": true,
|
|
73
81
|
"workflow_guard": false
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
"_comment": "Canonical schema manifest for valid config key paths. This manifest is the single CJS source of truth for valid config keys; dynamicKeyPatterns source strings are recompiled to RegExp at runtime by config-schema.cjs. runtimeStateKeys mirrors RUNTIME_STATE_KEYS.",
|
|
3
3
|
"validKeys": [
|
|
4
4
|
"mode",
|
|
5
|
+
"gates.execute_next_plan",
|
|
6
|
+
"gates.confirm_transition",
|
|
7
|
+
"gates.confirm_milestone_scope",
|
|
5
8
|
"granularity",
|
|
6
9
|
"parallelization",
|
|
7
10
|
"commit_docs",
|
|
@@ -72,6 +75,7 @@
|
|
|
72
75
|
"workflow.context_guard_mode",
|
|
73
76
|
"executor.stall_detect_interval_minutes",
|
|
74
77
|
"executor.stall_threshold_minutes",
|
|
78
|
+
"planner.stall_detection_enabled",
|
|
75
79
|
"planner.stall_detect_interval_minutes",
|
|
76
80
|
"planner.stall_threshold_minutes",
|
|
77
81
|
"workflow.inline_plan_threshold",
|
|
@@ -110,6 +114,7 @@
|
|
|
110
114
|
"resolve_model_ids",
|
|
111
115
|
"effort.default",
|
|
112
116
|
"fast_mode.enabled",
|
|
117
|
+
"audit.enabled",
|
|
113
118
|
"plan_review.source_grounding",
|
|
114
119
|
"plan_review.source_grounding_authority",
|
|
115
120
|
"model_policy.provider",
|
|
@@ -5,7 +5,8 @@ Smart discuss is the autonomous-optimized variant of `gsd-discuss-phase`. It pro
|
|
|
5
5
|
**Inputs:** `PHASE_NUM` from execute_phase. Run init to get phase paths:
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
|
|
8
|
+
GSD_WS=$(echo " $ARGUMENTS" | sed -nE 's/.* --ws +([A-Za-z0-9][A-Za-z0-9._-]*).*/--ws \1/p' | head -n 1)
|
|
9
|
+
PHASE_STATE=$(gsd_run query init.phase-op ${GSD_WS:+--ws=${GSD_WS##* }} ${PHASE_NUM})
|
|
9
10
|
```
|
|
10
11
|
|
|
11
12
|
Parse from JSON: `phase_dir`, `phase_slug`, `padded_phase`, `phase_name`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# UI Design Contract (Frontend Phases) — Autonomous Mode
|
|
2
2
|
|
|
3
|
-
Step 3a.5 of `/gsd:autonomous`: resolve whether the current phase needs a UI-SPEC.md generated before planning, and generate one via active `plan:pre` step hooks if so.
|
|
3
|
+
Step 3a.5 of `/gsd:autonomous`: resolve whether the current phase needs a UI-SPEC.md generated before planning, and generate one via active `plan:pre` step hooks if so. Non-blocking for every answer it gets — proceeds to step 3b (Plan) — except a gate that could not look (below), which is surfaced and stops.
|
|
4
4
|
|
|
5
5
|
**Inputs:** `PHASE_NUM`, `PHASE_DIR` from execute_phase.
|
|
6
6
|
|
|
@@ -16,10 +16,10 @@ Read the `activeHooks` array directly from `HOOKS_JSON` (in-context — do NOT i
|
|
|
16
16
|
(At least one active step hook ⇒ `workflow.ui_phase` is on.) Run the UI-SPEC gate:
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
GATE=$(gsd_run check ui-plan-gate "${PHASE_NUM}" --raw)
|
|
19
|
+
GATE=$(gsd_run check ui-plan-gate "${PHASE_NUM}" --raw) && GATE_RC=0 || GATE_RC=$?
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
A non-zero `GATE_RC` is a command failure, including `69` (`UNAVAILABLE`: the gate could not read its evidence, so its `frontend: false` is not an answer): surface it and stop — never skip silently to 3b as if the phase had no frontend. Otherwise read `frontend` and `hasUiSpec` from `GATE` (in-context).
|
|
23
23
|
|
|
24
24
|
**If `frontend` is false:** Skip silently to 3b.
|
|
25
25
|
|
|
@@ -8,14 +8,14 @@ Plans execute autonomously. Checkpoints formalize interaction points where human
|
|
|
8
8
|
2. **Claude sets up the verification environment** - Start dev servers, seed databases, configure env vars
|
|
9
9
|
3. **User only does what requires human judgment** - Visual checks, UX evaluation, "does this feel right?"
|
|
10
10
|
4. **Secrets come from user, automation comes from Claude** - Ask for API keys, then Claude uses them via CLI
|
|
11
|
-
5. **Auto-mode bypasses verification
|
|
11
|
+
5. **Auto-mode bypasses verification checkpoints, and decision checkpoints with a declared `auto_select`** — When `workflow._auto_chain_active` or `workflow.auto_advance` is true in config: human-verify auto-approves; a `checkpoint:decision` carrying `auto_select="<option-id>"` auto-selects that named option; a `checkpoint:decision` with NO `auto_select` escalates to a human instead of guessing by position (#4095); human-action still stops (auth gates cannot be automated)
|
|
12
12
|
6. **`gate="blocking-human"` is never auto-approved** — a checkpoint carrying this gate stops for a human in *every* mode, including auto-mode, regardless of its type. Rule 5 does not apply to it. The executor's precondition-unmet checkpoint (a task's `<precondition>` evaluated false — unmet `user_setup` step, missing env var, absent prior-phase artifact) reports this gate (#3210).
|
|
13
13
|
|
|
14
14
|
**The `gate` attribute:**
|
|
15
15
|
|
|
16
16
|
| Value | Auto-mode behavior | Use for |
|
|
17
17
|
|-------|--------------------|---------|
|
|
18
|
-
| `gate="blocking"` | Bypassed per rule 5 (human-verify auto-approves
|
|
18
|
+
| `gate="blocking"` | Bypassed per rule 5 (human-verify auto-approves; decision auto-selects only when `auto_select` names an option, else escalates) | The default. Post-hoc verification and implementation choices that are safe to take the recommended path on when unattended. |
|
|
19
19
|
| `gate="blocking-human"` | **Never bypassed.** Stops for a human in auto-mode too. | Irreversible or trust-establishing steps a human must actually see: package-legitimacy verification before install, any decision whose default answer would be wrong to assume, and unmet `<precondition>` facts the executor cannot establish on its own (#3210). |
|
|
20
20
|
|
|
21
21
|
Reach for `gate="blocking-human"` whenever auto-approving the checkpoint would defeat its purpose. If the checkpoint exists because a human must *decide* something, `blocking` is the wrong gate — auto-mode will decide it for them.
|
|
@@ -147,7 +147,7 @@ HUMAN_VERIFY_MODE=$(gsd_run query config-get workflow.human_verify_mode --defaul
|
|
|
147
147
|
|
|
148
148
|
**Structure:**
|
|
149
149
|
```xml
|
|
150
|
-
<task type="checkpoint:decision" gate="blocking">
|
|
150
|
+
<task type="checkpoint:decision" gate="blocking" auto_select="option-a">
|
|
151
151
|
<decision>[What's being decided]</decision>
|
|
152
152
|
<context>[Why this decision matters]</context>
|
|
153
153
|
<options>
|
|
@@ -166,6 +166,8 @@ HUMAN_VERIFY_MODE=$(gsd_run query config-get workflow.human_verify_mode --defaul
|
|
|
166
166
|
</task>
|
|
167
167
|
```
|
|
168
168
|
|
|
169
|
+
`auto_select` is optional and names the `id` of the `<option>` auto-mode should pick when this checkpoint is reached unattended. Omit it and auto-mode escalates to a human instead of guessing from option order — the same treatment `gate="blocking-human"` already gets. An `auto_select` value that doesn't match any `<option id="…">` fails `verify plan-structure` at plan-parse time rather than silently falling back to the first option.
|
|
170
|
+
|
|
169
171
|
**Example: Auth Provider Selection**
|
|
170
172
|
```xml
|
|
171
173
|
<task type="checkpoint:decision" gate="blocking">
|
|
@@ -1,7 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"items": [
|
|
3
|
-
{
|
|
4
|
-
|
|
3
|
+
{
|
|
4
|
+
"requirement_id": "R1",
|
|
5
|
+
"category": "boundary",
|
|
6
|
+
"status": "unresolved",
|
|
7
|
+
"verification": null,
|
|
8
|
+
"resolution": null,
|
|
9
|
+
"reason": null,
|
|
10
|
+
"probe": "What happens exactly at each min/max/threshold — and one step either side?"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"requirement_id": "R1",
|
|
14
|
+
"category": "precision",
|
|
15
|
+
"status": "unresolved",
|
|
16
|
+
"verification": null,
|
|
17
|
+
"resolution": null,
|
|
18
|
+
"reason": null,
|
|
19
|
+
"probe": "Where can precision loss, overflow, or rounding/tie-breaking occur — and what is the exact contract (e.g. half-up vs half-to-even, ceil/floor/truncate)?"
|
|
20
|
+
}
|
|
5
21
|
],
|
|
6
|
-
"coverage": {
|
|
22
|
+
"coverage": {
|
|
23
|
+
"applicable": 2,
|
|
24
|
+
"resolved": 0,
|
|
25
|
+
"unresolved": 2,
|
|
26
|
+
"unclassified": 0,
|
|
27
|
+
"byVerification": {
|
|
28
|
+
"explicit": 0,
|
|
29
|
+
"backstop": 0
|
|
30
|
+
}
|
|
31
|
+
}
|
|
7
32
|
}
|
|
@@ -1,8 +1,41 @@
|
|
|
1
1
|
{
|
|
2
2
|
"items": [
|
|
3
|
-
{
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
{
|
|
4
|
+
"requirement_id": "R1",
|
|
5
|
+
"category": "adjacency",
|
|
6
|
+
"status": "unresolved",
|
|
7
|
+
"verification": null,
|
|
8
|
+
"resolution": null,
|
|
9
|
+
"reason": null,
|
|
10
|
+
"probe": "When two things are exactly equal or just touch, do they merge, collide, or separate?"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"requirement_id": "R1",
|
|
14
|
+
"category": "empty",
|
|
15
|
+
"status": "unresolved",
|
|
16
|
+
"verification": null,
|
|
17
|
+
"resolution": null,
|
|
18
|
+
"reason": null,
|
|
19
|
+
"probe": "What is the result for empty, single-element, or null input?"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"requirement_id": "R1",
|
|
23
|
+
"category": "ordering",
|
|
24
|
+
"status": "unresolved",
|
|
25
|
+
"verification": null,
|
|
26
|
+
"resolution": null,
|
|
27
|
+
"reason": null,
|
|
28
|
+
"probe": "When elements compare equal, is output order specified and stable?"
|
|
29
|
+
}
|
|
6
30
|
],
|
|
7
|
-
"coverage": {
|
|
31
|
+
"coverage": {
|
|
32
|
+
"applicable": 3,
|
|
33
|
+
"resolved": 0,
|
|
34
|
+
"unresolved": 3,
|
|
35
|
+
"unclassified": 0,
|
|
36
|
+
"byVerification": {
|
|
37
|
+
"explicit": 0,
|
|
38
|
+
"backstop": 0
|
|
39
|
+
}
|
|
40
|
+
}
|
|
8
41
|
}
|
package/gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json
CHANGED
|
@@ -1,7 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"items": [
|
|
3
|
-
{
|
|
4
|
-
|
|
3
|
+
{
|
|
4
|
+
"requirement_id": "R1",
|
|
5
|
+
"category": "empty",
|
|
6
|
+
"status": "unresolved",
|
|
7
|
+
"verification": null,
|
|
8
|
+
"resolution": null,
|
|
9
|
+
"reason": null,
|
|
10
|
+
"probe": "What is the result for empty, single-element, or null input?"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"requirement_id": "R1",
|
|
14
|
+
"category": "encoding",
|
|
15
|
+
"status": "unresolved",
|
|
16
|
+
"verification": null,
|
|
17
|
+
"resolution": null,
|
|
18
|
+
"reason": null,
|
|
19
|
+
"probe": "Whose definition of length/equality applies — bytes, code points, grapheme clusters, or normalized form?"
|
|
20
|
+
}
|
|
5
21
|
],
|
|
6
|
-
"coverage": {
|
|
22
|
+
"coverage": {
|
|
23
|
+
"applicable": 2,
|
|
24
|
+
"resolved": 0,
|
|
25
|
+
"unresolved": 2,
|
|
26
|
+
"unclassified": 0,
|
|
27
|
+
"byVerification": {
|
|
28
|
+
"explicit": 0,
|
|
29
|
+
"backstop": 0
|
|
30
|
+
}
|
|
31
|
+
}
|
|
7
32
|
}
|
|
@@ -1,7 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"items": [
|
|
3
|
-
{
|
|
4
|
-
|
|
3
|
+
{
|
|
4
|
+
"requirement_id": "R1",
|
|
5
|
+
"category": "boundary",
|
|
6
|
+
"status": "unresolved",
|
|
7
|
+
"verification": null,
|
|
8
|
+
"resolution": null,
|
|
9
|
+
"reason": null,
|
|
10
|
+
"probe": "What happens exactly at each min/max/threshold — and one step either side?"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"requirement_id": "R1",
|
|
14
|
+
"category": "precision",
|
|
15
|
+
"status": "unresolved",
|
|
16
|
+
"verification": null,
|
|
17
|
+
"resolution": null,
|
|
18
|
+
"reason": null,
|
|
19
|
+
"probe": "Where can precision loss, overflow, or rounding/tie-breaking occur — and what is the exact contract (e.g. half-up vs half-to-even, ceil/floor/truncate)?"
|
|
20
|
+
}
|
|
5
21
|
],
|
|
6
|
-
"coverage": {
|
|
22
|
+
"coverage": {
|
|
23
|
+
"applicable": 2,
|
|
24
|
+
"resolved": 0,
|
|
25
|
+
"unresolved": 2,
|
|
26
|
+
"unclassified": 0,
|
|
27
|
+
"byVerification": {
|
|
28
|
+
"explicit": 0,
|
|
29
|
+
"backstop": 0
|
|
30
|
+
}
|
|
31
|
+
}
|
|
7
32
|
}
|
|
@@ -1,8 +1,41 @@
|
|
|
1
1
|
{
|
|
2
2
|
"items": [
|
|
3
|
-
{
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
{
|
|
4
|
+
"requirement_id": "R1",
|
|
5
|
+
"category": "adjacency",
|
|
6
|
+
"status": "unresolved",
|
|
7
|
+
"verification": null,
|
|
8
|
+
"resolution": null,
|
|
9
|
+
"reason": null,
|
|
10
|
+
"probe": "When two things are exactly equal or just touch, do they merge, collide, or separate?"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"requirement_id": "R1",
|
|
14
|
+
"category": "empty",
|
|
15
|
+
"status": "unresolved",
|
|
16
|
+
"verification": null,
|
|
17
|
+
"resolution": null,
|
|
18
|
+
"reason": null,
|
|
19
|
+
"probe": "What is the result for empty, single-element, or null input?"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"requirement_id": "R1",
|
|
23
|
+
"category": "ordering",
|
|
24
|
+
"status": "unresolved",
|
|
25
|
+
"verification": null,
|
|
26
|
+
"resolution": null,
|
|
27
|
+
"reason": null,
|
|
28
|
+
"probe": "When elements compare equal, is output order specified and stable?"
|
|
29
|
+
}
|
|
6
30
|
],
|
|
7
|
-
"coverage": {
|
|
31
|
+
"coverage": {
|
|
32
|
+
"applicable": 3,
|
|
33
|
+
"resolved": 0,
|
|
34
|
+
"unresolved": 3,
|
|
35
|
+
"unclassified": 0,
|
|
36
|
+
"byVerification": {
|
|
37
|
+
"explicit": 0,
|
|
38
|
+
"backstop": 0
|
|
39
|
+
}
|
|
40
|
+
}
|
|
8
41
|
}
|
|
@@ -1,8 +1,41 @@
|
|
|
1
1
|
{
|
|
2
2
|
"items": [
|
|
3
|
-
{
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
{
|
|
4
|
+
"requirement_id": "R1",
|
|
5
|
+
"category": "adjacency",
|
|
6
|
+
"status": "resolved",
|
|
7
|
+
"verification": "explicit",
|
|
8
|
+
"resolution": "AC#6: touching intervals merge",
|
|
9
|
+
"reason": null,
|
|
10
|
+
"probe": "When two things are exactly equal or just touch, do they merge, collide, or separate?"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"requirement_id": "R1",
|
|
14
|
+
"category": "empty",
|
|
15
|
+
"status": "unresolved",
|
|
16
|
+
"verification": null,
|
|
17
|
+
"resolution": null,
|
|
18
|
+
"reason": null,
|
|
19
|
+
"probe": "What is the result for empty, single-element, or null input?"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"requirement_id": "R1",
|
|
23
|
+
"category": "ordering",
|
|
24
|
+
"status": "dismissed",
|
|
25
|
+
"verification": null,
|
|
26
|
+
"resolution": null,
|
|
27
|
+
"reason": "output is canonically sorted; no tie possible",
|
|
28
|
+
"probe": "When elements compare equal, is output order specified and stable?"
|
|
29
|
+
}
|
|
6
30
|
],
|
|
7
|
-
"coverage": {
|
|
31
|
+
"coverage": {
|
|
32
|
+
"applicable": 3,
|
|
33
|
+
"resolved": 2,
|
|
34
|
+
"unresolved": 1,
|
|
35
|
+
"unclassified": 0,
|
|
36
|
+
"byVerification": {
|
|
37
|
+
"explicit": 1,
|
|
38
|
+
"backstop": 0
|
|
39
|
+
}
|
|
40
|
+
}
|
|
8
41
|
}
|
|
@@ -169,11 +169,44 @@ resolutions supplied, every applicable edge is `unresolved`:
|
|
|
169
169
|
```json edge-probe:02-merge-intervals/expected-coverage.json
|
|
170
170
|
{
|
|
171
171
|
"items": [
|
|
172
|
-
{
|
|
173
|
-
|
|
174
|
-
|
|
172
|
+
{
|
|
173
|
+
"requirement_id": "R1",
|
|
174
|
+
"category": "adjacency",
|
|
175
|
+
"status": "unresolved",
|
|
176
|
+
"verification": null,
|
|
177
|
+
"resolution": null,
|
|
178
|
+
"reason": null,
|
|
179
|
+
"probe": "When two things are exactly equal or just touch, do they merge, collide, or separate?"
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"requirement_id": "R1",
|
|
183
|
+
"category": "empty",
|
|
184
|
+
"status": "unresolved",
|
|
185
|
+
"verification": null,
|
|
186
|
+
"resolution": null,
|
|
187
|
+
"reason": null,
|
|
188
|
+
"probe": "What is the result for empty, single-element, or null input?"
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"requirement_id": "R1",
|
|
192
|
+
"category": "ordering",
|
|
193
|
+
"status": "unresolved",
|
|
194
|
+
"verification": null,
|
|
195
|
+
"resolution": null,
|
|
196
|
+
"reason": null,
|
|
197
|
+
"probe": "When elements compare equal, is output order specified and stable?"
|
|
198
|
+
}
|
|
175
199
|
],
|
|
176
|
-
"coverage": {
|
|
200
|
+
"coverage": {
|
|
201
|
+
"applicable": 3,
|
|
202
|
+
"resolved": 0,
|
|
203
|
+
"unresolved": 3,
|
|
204
|
+
"unclassified": 0,
|
|
205
|
+
"byVerification": {
|
|
206
|
+
"explicit": 0,
|
|
207
|
+
"backstop": 0
|
|
208
|
+
}
|
|
209
|
+
}
|
|
177
210
|
}
|
|
178
211
|
```
|
|
179
212
|
|
|
@@ -192,10 +225,35 @@ rule, the requirement classifies as `numeric-range`, which raises `boundary` and
|
|
|
192
225
|
```json edge-probe:01-round-half-even/expected-coverage.json
|
|
193
226
|
{
|
|
194
227
|
"items": [
|
|
195
|
-
{
|
|
196
|
-
|
|
228
|
+
{
|
|
229
|
+
"requirement_id": "R1",
|
|
230
|
+
"category": "boundary",
|
|
231
|
+
"status": "unresolved",
|
|
232
|
+
"verification": null,
|
|
233
|
+
"resolution": null,
|
|
234
|
+
"reason": null,
|
|
235
|
+
"probe": "What happens exactly at each min/max/threshold — and one step either side?"
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"requirement_id": "R1",
|
|
239
|
+
"category": "precision",
|
|
240
|
+
"status": "unresolved",
|
|
241
|
+
"verification": null,
|
|
242
|
+
"resolution": null,
|
|
243
|
+
"reason": null,
|
|
244
|
+
"probe": "Where can precision loss, overflow, or rounding/tie-breaking occur — and what is the exact contract (e.g. half-up vs half-to-even, ceil/floor/truncate)?"
|
|
245
|
+
}
|
|
197
246
|
],
|
|
198
|
-
"coverage": {
|
|
247
|
+
"coverage": {
|
|
248
|
+
"applicable": 2,
|
|
249
|
+
"resolved": 0,
|
|
250
|
+
"unresolved": 2,
|
|
251
|
+
"unclassified": 0,
|
|
252
|
+
"byVerification": {
|
|
253
|
+
"explicit": 0,
|
|
254
|
+
"backstop": 0
|
|
255
|
+
}
|
|
256
|
+
}
|
|
199
257
|
}
|
|
200
258
|
```
|
|
201
259
|
|
|
@@ -211,10 +269,35 @@ the requirement classifies as `text`, which raises `empty` and `encoding`:
|
|
|
211
269
|
```json edge-probe:03-truncate-graphemes/expected-coverage.json
|
|
212
270
|
{
|
|
213
271
|
"items": [
|
|
214
|
-
{
|
|
215
|
-
|
|
272
|
+
{
|
|
273
|
+
"requirement_id": "R1",
|
|
274
|
+
"category": "empty",
|
|
275
|
+
"status": "unresolved",
|
|
276
|
+
"verification": null,
|
|
277
|
+
"resolution": null,
|
|
278
|
+
"reason": null,
|
|
279
|
+
"probe": "What is the result for empty, single-element, or null input?"
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"requirement_id": "R1",
|
|
283
|
+
"category": "encoding",
|
|
284
|
+
"status": "unresolved",
|
|
285
|
+
"verification": null,
|
|
286
|
+
"resolution": null,
|
|
287
|
+
"reason": null,
|
|
288
|
+
"probe": "Whose definition of length/equality applies — bytes, code points, grapheme clusters, or normalized form?"
|
|
289
|
+
}
|
|
216
290
|
],
|
|
217
|
-
"coverage": {
|
|
291
|
+
"coverage": {
|
|
292
|
+
"applicable": 2,
|
|
293
|
+
"resolved": 0,
|
|
294
|
+
"unresolved": 2,
|
|
295
|
+
"unclassified": 0,
|
|
296
|
+
"byVerification": {
|
|
297
|
+
"explicit": 0,
|
|
298
|
+
"backstop": 0
|
|
299
|
+
}
|
|
300
|
+
}
|
|
218
301
|
}
|
|
219
302
|
```
|
|
220
303
|
|
|
@@ -231,10 +314,35 @@ classifies as `numeric-range`, which raises `boundary` and `precision`:
|
|
|
231
314
|
```json edge-probe:04-money-rounding/expected-coverage.json
|
|
232
315
|
{
|
|
233
316
|
"items": [
|
|
234
|
-
{
|
|
235
|
-
|
|
317
|
+
{
|
|
318
|
+
"requirement_id": "R1",
|
|
319
|
+
"category": "boundary",
|
|
320
|
+
"status": "unresolved",
|
|
321
|
+
"verification": null,
|
|
322
|
+
"resolution": null,
|
|
323
|
+
"reason": null,
|
|
324
|
+
"probe": "What happens exactly at each min/max/threshold — and one step either side?"
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
"requirement_id": "R1",
|
|
328
|
+
"category": "precision",
|
|
329
|
+
"status": "unresolved",
|
|
330
|
+
"verification": null,
|
|
331
|
+
"resolution": null,
|
|
332
|
+
"reason": null,
|
|
333
|
+
"probe": "Where can precision loss, overflow, or rounding/tie-breaking occur — and what is the exact contract (e.g. half-up vs half-to-even, ceil/floor/truncate)?"
|
|
334
|
+
}
|
|
236
335
|
],
|
|
237
|
-
"coverage": {
|
|
336
|
+
"coverage": {
|
|
337
|
+
"applicable": 2,
|
|
338
|
+
"resolved": 0,
|
|
339
|
+
"unresolved": 2,
|
|
340
|
+
"unclassified": 0,
|
|
341
|
+
"byVerification": {
|
|
342
|
+
"explicit": 0,
|
|
343
|
+
"backstop": 0
|
|
344
|
+
}
|
|
345
|
+
}
|
|
238
346
|
}
|
|
239
347
|
```
|
|
240
348
|
|
|
@@ -250,11 +358,44 @@ Given a requirement to deduplicate a list of items, the requirement classifies a
|
|
|
250
358
|
```json edge-probe:05-list-dedupe/expected-coverage.json
|
|
251
359
|
{
|
|
252
360
|
"items": [
|
|
253
|
-
{
|
|
254
|
-
|
|
255
|
-
|
|
361
|
+
{
|
|
362
|
+
"requirement_id": "R1",
|
|
363
|
+
"category": "adjacency",
|
|
364
|
+
"status": "unresolved",
|
|
365
|
+
"verification": null,
|
|
366
|
+
"resolution": null,
|
|
367
|
+
"reason": null,
|
|
368
|
+
"probe": "When two things are exactly equal or just touch, do they merge, collide, or separate?"
|
|
369
|
+
},
|
|
370
|
+
{
|
|
371
|
+
"requirement_id": "R1",
|
|
372
|
+
"category": "empty",
|
|
373
|
+
"status": "unresolved",
|
|
374
|
+
"verification": null,
|
|
375
|
+
"resolution": null,
|
|
376
|
+
"reason": null,
|
|
377
|
+
"probe": "What is the result for empty, single-element, or null input?"
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
"requirement_id": "R1",
|
|
381
|
+
"category": "ordering",
|
|
382
|
+
"status": "unresolved",
|
|
383
|
+
"verification": null,
|
|
384
|
+
"resolution": null,
|
|
385
|
+
"reason": null,
|
|
386
|
+
"probe": "When elements compare equal, is output order specified and stable?"
|
|
387
|
+
}
|
|
256
388
|
],
|
|
257
|
-
"coverage": {
|
|
389
|
+
"coverage": {
|
|
390
|
+
"applicable": 3,
|
|
391
|
+
"resolved": 0,
|
|
392
|
+
"unresolved": 3,
|
|
393
|
+
"unclassified": 0,
|
|
394
|
+
"byVerification": {
|
|
395
|
+
"explicit": 0,
|
|
396
|
+
"backstop": 0
|
|
397
|
+
}
|
|
398
|
+
}
|
|
258
399
|
}
|
|
259
400
|
```
|
|
260
401
|
|
|
@@ -270,11 +411,44 @@ left unresolved:
|
|
|
270
411
|
```json edge-probe:06-resolved-mixed/expected-coverage.json
|
|
271
412
|
{
|
|
272
413
|
"items": [
|
|
273
|
-
{
|
|
274
|
-
|
|
275
|
-
|
|
414
|
+
{
|
|
415
|
+
"requirement_id": "R1",
|
|
416
|
+
"category": "adjacency",
|
|
417
|
+
"status": "resolved",
|
|
418
|
+
"verification": "explicit",
|
|
419
|
+
"resolution": "AC#6: touching intervals merge",
|
|
420
|
+
"reason": null,
|
|
421
|
+
"probe": "When two things are exactly equal or just touch, do they merge, collide, or separate?"
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
"requirement_id": "R1",
|
|
425
|
+
"category": "empty",
|
|
426
|
+
"status": "unresolved",
|
|
427
|
+
"verification": null,
|
|
428
|
+
"resolution": null,
|
|
429
|
+
"reason": null,
|
|
430
|
+
"probe": "What is the result for empty, single-element, or null input?"
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
"requirement_id": "R1",
|
|
434
|
+
"category": "ordering",
|
|
435
|
+
"status": "dismissed",
|
|
436
|
+
"verification": null,
|
|
437
|
+
"resolution": null,
|
|
438
|
+
"reason": "output is canonically sorted; no tie possible",
|
|
439
|
+
"probe": "When elements compare equal, is output order specified and stable?"
|
|
440
|
+
}
|
|
276
441
|
],
|
|
277
|
-
"coverage": {
|
|
442
|
+
"coverage": {
|
|
443
|
+
"applicable": 3,
|
|
444
|
+
"resolved": 2,
|
|
445
|
+
"unresolved": 1,
|
|
446
|
+
"unclassified": 0,
|
|
447
|
+
"byVerification": {
|
|
448
|
+
"explicit": 1,
|
|
449
|
+
"backstop": 0
|
|
450
|
+
}
|
|
451
|
+
}
|
|
278
452
|
}
|
|
279
453
|
```
|
|
280
454
|
|