Skip to content
Spice Framework on GitHub

Engineering quality

frameworkMaturity: previewSource: spice@c0641b3Exact reviewed source

Spice treats verification as part of each repository’s public contract. This core module requires Go 1.26.5 and a Go-owned verifier that behaves the same from PowerShell, Linux, and macOS.

Core commands

make fmt # apply goimports and gofumpt
make fast # changed packages and their in-module reverse dependency closure
make check # boundaries, docs, formatting, modules/vendor, and vet
make coverage # shuffled race-enabled public tests and the 85% floor
make lint # allowlisted golangci-lint plus NilAway
make security # gosec plus govulncheck
make test # same single race/coverage pass as make coverage
make fuzz # bounded SDK/config/expression/web fuzz smoke
make offline # -mod=vendor public tests with network resolution disabled
make verify # complete core gate

make fast is the portable default for focused feedback. The Go orchestrator derives changed package ownership from Git and go list, includes reverse ordinary and test-import consumers, and widens to all packages when ownership is uncertain. It runs the selected tests once with network access disabled; there is no Bash or PowerShell selection script. Explicit focused go test commands remain useful while working within one known package.

The complete gate does not run separate broad ordinary, race, and coverage suites: one shuffled race-enabled invocation proves all three outcomes and computes aggregate coverage across exactly 51 public packages.

Pinned tools

Quality tools live in the isolated tools module so they cannot enter the standard-library-only public module:

Tool Pin Purpose
golangci-lint v2.12.2 allowlisted static-analysis policy
gofumpt v0.10.0 canonical formatting
goimports / x-tools v0.48.0 deterministic import organization
gosec v2.28.0 source security analysis
govulncheck v1.1.4 reachable vulnerability analysis
NilAway f4f8ac24c032dec36186896ecca26c1f232ef777 nil-flow analysis

The root go.mod intentionally has no third-party requirement or tool directive. Applications authorize the separately versioned Spice CLI and annotation tool in their own module.

Linter policy

.golangci.yml starts from default: none and allowlists correctness, error handling, nil flow, contexts, security, documentation, maintainability, architecture, and suppression-discipline rules. Broadly noisy style policies such as lll, varnamelen, mnd, funlen, paralleltest, wrapcheck, and err113 are deliberately excluded.

Public packages may not import core internals, compiler/CLI paths, or optional starter implementations. Forbid rules reject debug printing, fatal logging, and process exit outside the verifier entrypoint. Tests have only narrow, documented exceptions.

Ownership of specialized quality gates

Compiler and generator latency/allocation budgets live in spice-framework/toolchain. Installed-IDE screenshots and interaction tests live in spice-framework/goland. Real external-system matrices live with each starter. Spring feedback comparison and end-to-end generated application acceptance live in spice-framework/petclinic.

The development repository coordinates those independently green artifacts by exact revision. Core does not clone them or duplicate their implementation tests.