@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
|
@@ -21,9 +21,12 @@ const { createHub, ERROR_KINDS } = commandRoutingHub;
|
|
|
21
21
|
// --json-errors). Enabling stderr-on-error unconditionally by default is a
|
|
22
22
|
// separate, blast-radius-bearing change (it adds a second stderr line to the
|
|
23
23
|
// --json-errors envelope) — deferred as its own follow-up.
|
|
24
|
+
// #4975: #2620 wired only the env half — the gate was evaluated without the
|
|
25
|
+
// project config. resolveDispatchLogger owns the whole opt-in decision
|
|
26
|
+
// (GSD_AUDIT or `audit.enabled`) for every live seam.
|
|
24
27
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
25
28
|
const observabilityLogger = require("./observability/logger.cjs");
|
|
26
|
-
const {
|
|
29
|
+
const { resolveDispatchLogger } = observabilityLogger;
|
|
27
30
|
// Phase 2 (#1646): import ERROR_REASON so the UnknownCommand translation can
|
|
28
31
|
// pass `sdk_unknown_command` as the second arg to error(), preserving the
|
|
29
32
|
// JSON-error envelope contract that capability routers' tests assert on.
|
|
@@ -87,7 +90,8 @@ function routeHubCommandFamily({ family, args, subcommands, handlers, defaultSub
|
|
|
87
90
|
// #2620: wire the reference logger onto the live dispatch path (ADR-0174 §6),
|
|
88
91
|
// but only when observability is opt-in enabled — otherwise leave it unset
|
|
89
92
|
// so the Hub falls back to the no-op logger and stays byte-for-byte silent.
|
|
90
|
-
|
|
93
|
+
// #4975: the opt-in is GSD_AUDIT=1 or `audit.enabled` in this cwd's config.
|
|
94
|
+
logger: resolveDispatchLogger(cwd),
|
|
91
95
|
});
|
|
92
96
|
const result = hub.dispatch({
|
|
93
97
|
family,
|
|
@@ -126,6 +130,13 @@ function routeHubCommandFamily({ family, args, subcommands, handlers, defaultSub
|
|
|
126
130
|
error(result.reason);
|
|
127
131
|
return;
|
|
128
132
|
}
|
|
133
|
+
if (result.kind === ERROR_KINDS.VerificationStatusInvalid) {
|
|
134
|
+
// #5118: the Result carries the VerificationStatusError's own message and
|
|
135
|
+
// reason — the error owns its ERROR_REASON; nothing here restates it.
|
|
136
|
+
const invalid = result;
|
|
137
|
+
error(invalid.message, invalid.reason);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
129
140
|
error(result.message);
|
|
130
141
|
}
|
|
131
142
|
module.exports = {
|
|
@@ -172,6 +172,17 @@ function setPendingOutcome(v) {
|
|
|
172
172
|
function getPendingOutcome() {
|
|
173
173
|
return globalThis[PENDING_OUTCOME_KEY];
|
|
174
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* Declare the outcome a void-returning `main()` ends with (#5170, ADR-5057 §4): writes the
|
|
177
|
+
* pending-outcome cell that `runMain` projects. Validates `name` is an outcome
|
|
178
|
+
* `projectOutcome` accepts (PASS, FAIL or a registered name) and THROWS otherwise, so a typo'd
|
|
179
|
+
* name fails at the declaration rather than at process exit. Call it AFTER `output()`, which
|
|
180
|
+
* rewrites the cell on every call. `output()` and this are the only writers of the cell.
|
|
181
|
+
*/
|
|
182
|
+
function declareOutcome(name) {
|
|
183
|
+
projectOutcome(name, 'v1');
|
|
184
|
+
setPendingOutcome(name);
|
|
185
|
+
}
|
|
175
186
|
const EXIT_CONTRACT_FLAG_PREFIX = '--exit-contract=';
|
|
176
187
|
/** Scan argv for the FIRST `--exit-contract=<value>` token; undefined if absent. */
|
|
177
188
|
function findExitContractFlag(argv) {
|
|
@@ -544,4 +555,5 @@ module.exports = {
|
|
|
544
555
|
terminateNow,
|
|
545
556
|
setPendingOutcome,
|
|
546
557
|
getPendingOutcome,
|
|
558
|
+
declareOutcome,
|
|
547
559
|
};
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Codex Agent TOML — typed IR for `~/.codex/agents/<agent>.toml` (#3243, ADR-2313).
|
|
4
4
|
*
|
|
5
|
-
* A genuine leaf: node builtins
|
|
5
|
+
* A genuine leaf: node builtins, plus the zero-import `frontmatter-fence.cjs`. This is a
|
|
6
|
+
* **document model**, not a policy —
|
|
6
7
|
* it knows how to parse/render/strip two known keys (`model`,
|
|
7
8
|
* `model_reasoning_effort`) from a Codex agent `.toml`. It does NOT know which
|
|
8
9
|
* `model` values are illegal for Codex (that predicate — Anthropic-flavored
|
|
@@ -23,7 +24,9 @@
|
|
|
23
24
|
* stdout-JSON caller (`agent-install-check.cts`'s `checkCodexSandboxPosture`).
|
|
24
25
|
* This module was already the single fs/path-free-parsing home both callers
|
|
25
26
|
* shared; `fs`/`path` are imported below ONLY for `validateCodexSandboxHolds`'s
|
|
26
|
-
* roster check — still node builtins only, no third-party
|
|
27
|
+
* roster check — still node builtins only, no third-party dependency, and no bin/lib
|
|
28
|
+
* dependency beyond the zero-import, side-effect-free `frontmatter-fence.cjs` (the one
|
|
29
|
+
* frontmatter fence owner, read by `extractToolsValue`).
|
|
27
30
|
*
|
|
28
31
|
* ── The reconciliation (40-design.md) ──────────────────────────────────────
|
|
29
32
|
*
|
|
@@ -62,6 +65,7 @@ exports.deriveCodexSandboxMode = deriveCodexSandboxMode;
|
|
|
62
65
|
exports.validateCodexSandboxHolds = validateCodexSandboxHolds;
|
|
63
66
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
64
67
|
const node_path_1 = __importDefault(require("node:path"));
|
|
68
|
+
const frontmatter_fence_cjs_1 = require("./frontmatter-fence.cjs");
|
|
65
69
|
/** Frozen reason enum for a failed {@link parseCodexAgentToml}. */
|
|
66
70
|
exports.PARSE_REASON = Object.freeze({
|
|
67
71
|
UNTERMINATED_BLOCK: 'unterminated_block',
|
|
@@ -382,9 +386,9 @@ function stripReasoningEffort(doc) {
|
|
|
382
386
|
/**
|
|
383
387
|
* The 17 roles measured as widening under derivation (declare Write/Edit,
|
|
384
388
|
* never in the pre-#3897 `CODEX_AGENT_SANDBOX` map, so the old
|
|
385
|
-
* `|| 'read-only'` fallback silently under-granted them)
|
|
386
|
-
* `read-only`
|
|
387
|
-
*
|
|
389
|
+
* `|| 'read-only'` fallback silently under-granted them) — pinned to
|
|
390
|
+
* `read-only` from 2026-09-08 (HALT.md) until #4770 lifted the hold on
|
|
391
|
+
* 2026-09-21. This list is CLOSED and
|
|
388
392
|
* SHRINK-ONLY: a new writing role never lands here (S6, T26); it is validated
|
|
389
393
|
* against the live tool contract every time it is consulted
|
|
390
394
|
* ({@link _deriveCodexSandboxModeFromTools}) and against the real
|
|
@@ -401,29 +405,25 @@ function stripReasoningEffort(doc) {
|
|
|
401
405
|
* parses the list correctly, so this role genuinely derives
|
|
402
406
|
* `workspace-write` from its tool contract — HALT.md's original 16-role
|
|
403
407
|
* count measured against the pre-fix (single-line) readers and undercounted
|
|
404
|
-
* this role.
|
|
405
|
-
*
|
|
406
|
-
*
|
|
408
|
+
* this role.
|
|
409
|
+
*
|
|
410
|
+
* **LIFTED 2026-09-21 (#4770, maintainer decision: documented enforcement
|
|
411
|
+
* suffices).** The map is empty: the rung-3 hold's recorded reopen condition
|
|
412
|
+
* — official OpenAI documentation establishing Codex `sandbox_mode` as an
|
|
413
|
+
* enforced technical boundary that custom subagent TOML files honor — is
|
|
414
|
+
* satisfied, so every role now derives `sandbox_mode` purely from its own
|
|
415
|
+
* `tools:` frontmatter (`workspace-write` iff Write/Edit is declared). The
|
|
416
|
+
* shrink-to-zero invariant (ADR-3473 §8.3) is satisfied by reaching zero;
|
|
417
|
+
* the map is kept as an empty frozen structure so a future re-hold has a
|
|
418
|
+
* shape to land in, and {@link validateCodexSandboxHolds} keeps failing if
|
|
419
|
+
* the list ever grows a role that no longer exists in `agents/`. The
|
|
420
|
+
* #3897 security-review F1/F3 fail-closed pins are unchanged and
|
|
421
|
+
* map-independent: `suspicious` identities (non-ASCII after
|
|
422
|
+
* normalization) still pin `read-only`, and post-lift the sandbox derives
|
|
423
|
+
* from an artifact's own CONTENT, so the F1 identity-confusion attack no
|
|
424
|
+
* longer has a hold to ride.
|
|
407
425
|
*/
|
|
408
|
-
exports.CODEX_SANDBOX_HOLDS = Object.freeze({
|
|
409
|
-
'gsd-ai-researcher': 'declares Write/Edit; pending Codex sandbox_mode enforcement decision',
|
|
410
|
-
'gsd-code-fixer': 'declares Write/Edit; pending Codex sandbox_mode enforcement decision',
|
|
411
|
-
'gsd-code-reviewer': 'declares Write/Edit; pending Codex sandbox_mode enforcement decision',
|
|
412
|
-
'gsd-debug-session-manager': 'declares Write/Edit; pending Codex sandbox_mode enforcement decision',
|
|
413
|
-
'gsd-doc-classifier': 'declares Write/Edit; pending Codex sandbox_mode enforcement decision',
|
|
414
|
-
'gsd-doc-synthesizer': 'declares Write/Edit; pending Codex sandbox_mode enforcement decision',
|
|
415
|
-
'gsd-doc-verifier': 'declares Write/Edit; pending Codex sandbox_mode enforcement decision',
|
|
416
|
-
'gsd-doc-writer': 'declares Write/Edit; pending Codex sandbox_mode enforcement decision',
|
|
417
|
-
'gsd-dom-verifier': 'declares Write/Edit; pending Codex sandbox_mode enforcement decision',
|
|
418
|
-
'gsd-domain-researcher': 'declares Write/Edit; pending Codex sandbox_mode enforcement decision',
|
|
419
|
-
'gsd-eval-auditor': 'declares Write/Edit; pending Codex sandbox_mode enforcement decision',
|
|
420
|
-
'gsd-eval-planner': 'declares Write/Edit; pending Codex sandbox_mode enforcement decision',
|
|
421
|
-
'gsd-intel-updater': 'declares Write/Edit; pending Codex sandbox_mode enforcement decision',
|
|
422
|
-
'gsd-pattern-mapper': 'declares Write/Edit; pending Codex sandbox_mode enforcement decision',
|
|
423
|
-
'gsd-ui-auditor': 'declares Write/Edit; pending Codex sandbox_mode enforcement decision',
|
|
424
|
-
'gsd-ui-researcher': 'declares Write/Edit; pending Codex sandbox_mode enforcement decision',
|
|
425
|
-
'gsd-nyquist-auditor': 'declares Write/Edit (YAML list-form tools:, surfaced by the list-form parse fix); pending Codex sandbox_mode enforcement decision',
|
|
426
|
-
});
|
|
426
|
+
exports.CODEX_SANDBOX_HOLDS = Object.freeze({});
|
|
427
427
|
// True iff a `tools:` frontmatter value declares Write or Edit as a whole
|
|
428
428
|
// token (never a substring match, so a hypothetical "Edith"-named tool could
|
|
429
429
|
// never collide). Single predicate owner for both the emitter
|
|
@@ -593,13 +593,12 @@ function isSandboxHeld(...candidates) {
|
|
|
593
593
|
function extractToolsValue(agentContent) {
|
|
594
594
|
if (typeof agentContent !== 'string')
|
|
595
595
|
return undefined;
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
const
|
|
599
|
-
if (
|
|
596
|
+
// The block is the one the one fence owner finds, so a `---` inside a value (a
|
|
597
|
+
// description mentioning `a---b`) cannot cut the tools list off.
|
|
598
|
+
const fence = (0, frontmatter_fence_cjs_1.locateFrontmatterFence)(agentContent);
|
|
599
|
+
if (!fence?.closed)
|
|
600
600
|
return '';
|
|
601
|
-
const
|
|
602
|
-
const lines = frontmatter.split(/\r?\n/);
|
|
601
|
+
const lines = agentContent.slice(fence.openEnd, fence.bodyEnd).split(/\r?\n/);
|
|
603
602
|
const toolsLineIndex = lines.findIndex((line) => /^tools:/.test(line));
|
|
604
603
|
if (toolsLineIndex === -1)
|
|
605
604
|
return '';
|
|
@@ -892,6 +892,13 @@ exports.NON_FAMILY_COMMAND_ALIASES = [
|
|
|
892
892
|
],
|
|
893
893
|
"mutation": false
|
|
894
894
|
},
|
|
895
|
+
{
|
|
896
|
+
"canonical": "uat.complete-session",
|
|
897
|
+
"aliases": [
|
|
898
|
+
"uat complete-session"
|
|
899
|
+
],
|
|
900
|
+
"mutation": true
|
|
901
|
+
},
|
|
895
902
|
{
|
|
896
903
|
"canonical": "uat.render-checkpoint",
|
|
897
904
|
"aliases": [
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* | { ok: false, kind: 'InvalidArgs', arg: string, reason: string }
|
|
16
16
|
* | { ok: false, kind: 'HandlerRefusal', reason: string }
|
|
17
17
|
* | { ok: false, kind: 'HandlerFailure', message: string, cause?: Error }
|
|
18
|
+
* | { ok: false, kind: 'VerificationStatusInvalid', message: string, reason: string, file: string }
|
|
18
19
|
*
|
|
19
20
|
* Invariants:
|
|
20
21
|
* - Hub always routes through CJS handlers. There is no SDK path (#175).
|
|
@@ -44,6 +45,31 @@ const { createNoOpLogger } = observabilityLogger;
|
|
|
44
45
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
45
46
|
const cliExitModule = require("./cli-exit.cjs");
|
|
46
47
|
const { ExitError } = cliExitModule;
|
|
48
|
+
let _verification = null;
|
|
49
|
+
/**
|
|
50
|
+
* #5118: the verification-status owner, required lazily (the hub is loaded by
|
|
51
|
+
* every command router; the owner's I/O graph is needed only when a handler
|
|
52
|
+
* actually throws). Its exported error code is the one matched below.
|
|
53
|
+
*/
|
|
54
|
+
function verificationOwner() {
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
56
|
+
if (!_verification)
|
|
57
|
+
_verification = require('./verification.cjs');
|
|
58
|
+
return _verification;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* #5118: a handler that threw verification.cts's VerificationStatusError (a
|
|
62
|
+
* report `status` outside the closed enum). Matched by the owner's exported
|
|
63
|
+
* code constant, never a restated literal.
|
|
64
|
+
*/
|
|
65
|
+
function asVerificationStatusError(err) {
|
|
66
|
+
if (!(err instanceof Error))
|
|
67
|
+
return null;
|
|
68
|
+
const code = err.code;
|
|
69
|
+
if (typeof code !== 'string' || code !== verificationOwner().VERIFICATION_STATUS_ERROR_CODE)
|
|
70
|
+
return null;
|
|
71
|
+
return err;
|
|
72
|
+
}
|
|
47
73
|
// ─── Error kind constants ─────────────────────────────────────────────────────
|
|
48
74
|
/**
|
|
49
75
|
* Closed error-kind enum. Export as a frozen object so callers can switch on
|
|
@@ -63,6 +89,13 @@ const ERROR_KINDS = Object.freeze({
|
|
|
63
89
|
HandlerRefusal: 'HandlerRefusal',
|
|
64
90
|
/** A handler threw an unexpected exception. */
|
|
65
91
|
HandlerFailure: 'HandlerFailure',
|
|
92
|
+
/**
|
|
93
|
+
* #5118: a handler read a verification report whose `status` is outside the
|
|
94
|
+
* closed enum. The kind is PascalCase like every other (key === value); the
|
|
95
|
+
* Result carries the error's own ERROR_REASON in `reason`, so the CLI adapter
|
|
96
|
+
* fails with `error(message, reason)` and restates nothing.
|
|
97
|
+
*/
|
|
98
|
+
VerificationStatusInvalid: 'VerificationStatusInvalid',
|
|
66
99
|
});
|
|
67
100
|
// ─── Internal helpers ─────────────────────────────────────────────────────────
|
|
68
101
|
/**
|
|
@@ -117,6 +150,9 @@ function makeHandlerFailure(message, cause) {
|
|
|
117
150
|
}
|
|
118
151
|
return Object.freeze(obj);
|
|
119
152
|
}
|
|
153
|
+
function makeVerificationStatusInvalid(message, reason, file) {
|
|
154
|
+
return Object.freeze({ ok: false, kind: ERROR_KINDS.VerificationStatusInvalid, message, reason, file });
|
|
155
|
+
}
|
|
120
156
|
// ─── Handler-return shape validator (Finding 1) ───────────────────────────────
|
|
121
157
|
/**
|
|
122
158
|
* Required payload fields per ok:false kind.
|
|
@@ -141,6 +177,10 @@ const _VARIANT_SCHEMA = {
|
|
|
141
177
|
required: ['message'],
|
|
142
178
|
allowed: new Set(['ok', 'kind', 'message', 'cause']),
|
|
143
179
|
},
|
|
180
|
+
[ERROR_KINDS.VerificationStatusInvalid]: {
|
|
181
|
+
required: ['message', 'reason', 'file'],
|
|
182
|
+
allowed: new Set(['ok', 'kind', 'message', 'reason', 'file']),
|
|
183
|
+
},
|
|
144
184
|
};
|
|
145
185
|
/**
|
|
146
186
|
* Validates a handler-returned { ok: false, ... } result against the typed schema.
|
|
@@ -262,7 +302,14 @@ function createHub({ cjsRegistry, manifest, logger } = {}) {
|
|
|
262
302
|
if (err instanceof ExitError) {
|
|
263
303
|
throw err;
|
|
264
304
|
}
|
|
265
|
-
|
|
305
|
+
// #5118: an out-of-set verification report status is a pure Result
|
|
306
|
+
// carrying the error's own reason — never a reason-less HandlerFailure,
|
|
307
|
+
// never a rethrow.
|
|
308
|
+
const statusError = asVerificationStatusError(err);
|
|
309
|
+
if (statusError) {
|
|
310
|
+
result = makeVerificationStatusInvalid(statusError.message, statusError.reason, statusError.file);
|
|
311
|
+
}
|
|
312
|
+
else if (err instanceof Error) {
|
|
266
313
|
result = makeHandlerFailure(err.message, err);
|
|
267
314
|
}
|
|
268
315
|
else {
|