The authoritative interface baseline and command-compatibility gates rejected every flag type change on a historical command, with no review channel — even when the new type only moves the same validation from RunE to flag parsing. Both now consult a precise allowlist. An entry must match command path, flag name and both type names exactly, so it is direction-sensitive by construction, and it applies only when nothing else about the flag moved (shorthand, required, hidden, no-opt, scope). A bundled regression re-reports the type change. The first and only entry is "dws minutes permission apply --policy" moving from string to int (for #912): the old RunE parsed with strconv.ParseInt(v, 10, 64) and enforced [2,4], the new one lets pflag parse with base 0 and still enforces [2,4], so the historical set of successful invocations is a subset of the new one. Base 0 additionally accepts spellings like "0x3", which widens rather than narrows. Defaults are excluded from the guard because the migration necessarily changes one. In the snapshot gate the exemption resolves against the canonical Command.Path, never the alias-expanded accepted path: an aliased command is compared once per accepted spelling, so keying on that would let every alias bypass the table. The table is duplicated because check-authoritative-interface-baselines.sh copies the whole scripts/policy/interface-baseline directory into a worktree checked out at a historical revision and builds it there, so that copy cannot import a package this branch adds. A guard test fails if the two copies drift.
Go Bootstrap Scripts
These repo-local entrypoints are the supported shell entrypoints for building, testing, packaging, and policy checks.
make build: build thedwsCLI fromcmdmake test: run every default package returned bygo list ./...make test-plan: verify every default Go package belongs to exactly one CI test shardmake lint: run the repository-wide format check,go vet, and requiredstaticcheckmake format-check: check every tracked or non-ignored untracked repository Go source file withgofmtmake fmt: format every tracked or non-ignored untracked repository Go source filemake policy: reuse the currentdwsbinary and run the complete policy suite (make buildfirst)make package: build all release artifacts locallymake release-pre VERSION=vX.Y.Z-beta.N: validate a prerelease (PUBLISH=1pushes its tag)make release-stable VERSION=vX.Y.Z FROM_BETA=vX.Y.Z-beta.N: validate a stable promotion (PUBLISH=1pushes its tag)
Script groups:
- Root installers:
./scripts/install.sh,./scripts/install.ps1,./scripts/install-skills.sh - Product convenience installers:
./scripts/install-devapp.sh,./scripts/install-devapp.ps1,./scripts/install-event.sh - CI package plan:
./scripts/ci/test-packages.sh - Dev helpers:
./scripts/dev/build.sh,./scripts/dev/lint.sh,./scripts/dev/ci-local.sh,./scripts/dev/run-mock-e2e.sh,./scripts/dev/coverage.sh - Policy checks:
./scripts/policy/check-generated-drift.sh,./scripts/policy/check-command-surface.sh,./scripts/policy/check-command-compatibility.sh --base-ref <main-ref> --stable-ref <latest-GA-tag>,./scripts/policy/check-schema-catalog.sh,./scripts/policy/check-schema-binary.sh,./scripts/policy/check-open-source-assets.sh - Policy runtime files: set
DWS_POLICY_TMPDIRto override the default.worktrees/policy-tmpworkspace - Release entrypoint and contract:
./scripts/release/release.sh,./scripts/release/release-contract.sh; operator guide:docs/releasing.md - Release packaging helpers:
./scripts/release/post-goreleaser.sh,./scripts/release/stage-npm-package.sh,./scripts/release/pack-npm-package.sh,./scripts/release/verify-delivered-stable.sh,./scripts/release/verify-release-artifacts.sh,./scripts/release/verify-github-release-assets.sh,./scripts/release/verify-github-tag-authority.sh,./scripts/release/verify-package-managers.sh,./scripts/release/publish-homebrew-formula.sh