Skip to content

Releases: faustbrian/glippy

Glippy v1.0.0

Choose a tag to compare

@github-actions github-actions released this 27 Aug 09:50

Glippy v1.0.0

Status: stable release contract

Glippy v1 is one opinionated Go CLI for deterministic width-aware formatting,
correctness-focused linting, transactional fixes, repository checks, machine
diagnostics, and editor integration through stdin/stdout and LSP. These notes
define the first stable Glippy release.

Changes From Gox v0.1.0

Gox v0.1.0 is the previous tagged, published stable version; its
GitHub release is
not a draft or prerelease. This section is the complete public contract delta
from that tag. The frozen v1 manifests under
testdata/contracts/v1 are the exact
current-state authority; the linked Gox v0.1.0 references identify the old
surface.

Surface Gox v0.1.0 Glippy v1.0.0 Required adoption action
Identity gox, github.com/faustbrian/gox, .gox.toml, //gox:, and GOX_CACHE_DIR glippy, github.com/faustbrian/glippy, .glippy.toml, //glippy:, and GLIPPY_CACHE_DIR Rename invocations, imports, configuration, suppressions, and cache overrides as described below.
Formatter The current width-aware dialect, but five comment/directive ownership areas contained valid-source refusals or unnecessary verbatim fallback The same layout policy with those source-fidelity defects corrected Run glippy fmt --check or --diff; no deliberate layout-policy migration is required.
Rules 7 IDs 129 stable IDs: the 7 retained IDs plus 122 additions Audit the 59 newly default-enabled correctness rules or generate a reviewed baseline.
Fixes 2 fix-bearing rules: one safe and one suggestion 20 fix-bearing rules: 3 safe, 16 suggestion, and 1 unsafe Ordinary --fix still selects safe fixes only; opt into other classes explicitly.
Configuration Version 1 with one lint.preset and no profiles, matrices, path overrides, baselines, or contracts Version 1 plus the additive fields and defaults listed below Rename the file; existing fields remain accepted. Choose a profile only when its broader policy is intended.
CLI fmt, lint, check, explain, version, and completion Those commands plus lsp, init, config, rules, and help, with the additive modes listed below Replace the binary name; existing command meanings are retained.
Machine output Formatter, lint, and combined-check JSON schema version 1 Formatter, lint, rule, and statistics schema version 1; combined-check schema version 2; GitHub, short, and SARIF reporters Combined-check consumers must accept schema version 2 and the new per-file states.
Source versions Go 1.25 and Go 1.26 Go 1.25 through Go 1.27 No action for existing source; Go 1.27 syntax is now accepted.
Native targets macOS/Linux on amd64/arm64 The same four targets, now bound to native runtime and release-budget evidence No platform migration. Windows remains unsupported.
Release support Current supported stable release Superseded and unsupported when v1 is published Upgrade to v1 before reporting defects; no v0.1 or long-term-support line is retained.

There are no removed or renamed lint rule IDs, no reclassified existing fixes,
no removed configuration fields or commands, no reassigned exit codes, and no
supported operating-system or architecture removal in this delta.

Product Identity Migration

This release changes the product identity from Gox to Glippy:

  • install github.com/faustbrian/glippy/cmd/glippy and invoke glippy;
  • rename .gox.toml to .glippy.toml;
  • replace //gox: suppressions with //glippy: suppressions;
  • replace GOX_CACHE_DIR and Gox cache paths with GLIPPY_CACHE_DIR and the
    Glippy cache namespace; and
  • update CI, hooks, editor commands, archive names, and version assertions.

Automatic configuration discovery accepts .gox.toml only when
.glippy.toml is absent. Finding both names fails instead of selecting one.
Legacy //gox: suppressions remain effective through this release but produce
an actionable legacy-directive migration finding. Gox cache entries are not
reused as Glippy entries.

Formatter Output Changes

Glippy v1 makes no deliberate formatter policy change relative to Gox v0.1.0.
The canonical width, indentation, block, list, binary-expression, selector,
literal, parenthesis, import-order, and blank-line policies remain the same.
Five correction areas resolve valid-source refusals or unnecessary verbatim
fallback caused by incomplete comment or directive ownership proof:

Corrected construct Gox v0.1.0 result Glippy v1 result Classification
Comments and suppressions between a label and its statement, including closing labels Refused with no output owner Preserves label, comment, directive line, and required blank gap Source-fidelity defect correction
Declaration documentation and grouped value specs ending in //nolint Refused equivalence validation Preserves documentation and the trailing suppression on its physical line Source-fidelity defect correction
External line-scoped suppressions on a composite opening nested in a call, an enclosing binary assignment/return or label, a field with a blank gap, or an inline field in plain/generic/grouped types Refused when width-aware layout moved the external anchor Preserves the affected declaration verbatim while formatting unaffected declarations Directive-ownership defect correction
Blank lines between trailing top-level directive groups Refused equivalence validation Preserves each directive group and the separating blank line Directive-gap defect correction
Comments immediately before or after else, including else if Refused with no output owner Preserves the comment at the else boundary Comment-ownership defect correction

Label comments

Gox v0.1.0 produced no source for this valid input and reported
comment 0 has no proven output owner:

package labels
func run(){goto target;target:
// explain target
work()}

Glippy v1 produces:

package labels

func run() {
	goto target
target:
	// explain target
	work()
}

Declaration documentation and trailing suppressions

Gox v0.1.0 refused this declaration because comment identity or ordering
changed:

package comments
// errUnavailable documents the declaration.
var errUnavailable = errors.New("unavailable") //nolint:unused

Glippy v1 preserves both owners while applying declaration spacing:

package comments

// errUnavailable documents the declaration.
var errUnavailable = errors.New("unavailable") //nolint:unused

Nested external suppression anchors

Gox v0.1.0 refused this already canonical declaration because the external
directive source anchor changed:

package comments

func run() {
	http.SetCookie(w, &http.Cookie{ //nolint:gosec
		Name: "sort",
	})
}

Glippy v1 emits the declaration unchanged. If another declaration in the same
file needs ordinary canonical formatting, Glippy formats that declaration
without moving the protected suppression anchor.

Trailing directive groups

Gox v0.1.0 refused these trailing groups because a directive source anchor
changed:

package internal

//go:generate first
//go:generate second

//go:generate third
//go:generate fourth

Glippy v1 emits the source unchanged, including the blank line separating the
two directive groups.

Comments around else

Gox v0.1.0 produced no source for this input and reported that the comment had
no proven output owner:

package control
func run(value int){if value==0{work()}else /* value != 0 */{retry()}}

Glippy v1 produces:

package control

func run(value int) {
	if value == 0 {
		work()
	} else /* value != 0 */ {
		retry()
	}
}

The exact regression fixtures are in
internal/format/format_test.go. The
complete construct-by-construct input, prior result, v1 output, and
classification inventory is the
v1 formatter delta. The
current formatter specification and canonical examples are in the
formatter rules. The pinned 17-repository source-
fidelity and idempotency evidence is recorded by the
v1 corpus adjudication
and v0.9 exit audit. Publication
requires every correction to pass parse, normalized equivalence, comment and
directive identity, idempotency, width, golden, fuzz, and corpus gates.

Glippy deliberately is not a product-wide gofmt fixed point. Width-aware
layouts, retained import order, preserved literal and parenthesis spelling,
structural indentation, and explicit empty-statement spelling can differ from
gofmt. Repositories must remove competing gofmt, gofumpt, or golines authority
when adopting Glippy. See the
formatter migration guide.

Lint Rule Delta

The seven Gox v0.1.0 rule IDs are retained with the same group membership,
default severity, analysis tier, and fix classification:

context-key
defer-in-infinite-loop
duplicate-condition
errors-is-arguments
ineffective-break
nilness
redundant-bool-comparison

Four retained rules change only by exposing the new requires_effect_facts
metadata field as false. Three retained rules also establish broader v1
reporting or fix-reporting boundaries:

Rule v0.1 boundary v1 boundary Classification and adoption impact
defer-in-infinite-loop Treated only built-in panic and runtime.Goexit as terminal helpers Reuses bounded no-return facts from selected local-source modules and exact standard-library terminal APIs Precision correction; removes findings on paths proven to terminate. Re-run recommended or strict policy before adopting.
nilness Used the s...
Read more

Gox v0.1.0

Choose a tag to compare

@github-actions github-actions released this 13 Aug 12:26

Gox v0.1.0 is the first supported release of the Go-native formatter, linter,
and safe fixer.

Highlights

  • Deterministic, width-aware formatting for complete files and standard-input
    fragments, including compressed blocks, semicolon-separated statements,
    boolean chains, calls, literals, signatures, and function literals.
  • Comment, directive, literal, build-constraint, and source-trivia preservation
    backed by reparsing, normalized equivalence, idempotency, corpus, and fuzz
    gates.
  • Correctness-focused linting with demand-driven syntax, types, CFG, and SSA
    analysis tiers and deterministic text or versioned JSON diagnostics.
  • Safe, suggestion, and unsafe fix classes with stale-source and overlap
    rejection, full-file validation, formatter normalization, and atomic local
    replacement.
  • Cohesive fmt, lint, check, explain, version, and shell-completion
    command surfaces for editors, CI, and pre-commit workflows.

Installation

Download the archive for macOS or Linux on amd64 or arm64, verify it with the
published checksum file, and place gox on PATH. Source installation is also
available:

go install github.com/faustbrian/gox/cmd/gox@v0.1.0

Verify GitHub-hosted build provenance with:

gh attestation verify <downloaded-artifact> --repo faustbrian/gox

Compatibility And Scope

  • Supported source languages: Go 1.25 and Go 1.26.
  • Supported runtimes: macOS and Linux on amd64 and arm64.
  • Windows is unsupported.
  • Network, distributed, and userspace filesystems and forced-power-loss
    durability are outside write and fix guarantees.
  • Gox intentionally has documented formatting divergences from gofmt, gofumpt,
    and golines. Use one formatter authority per selected file and review the
    migration guide before repository-wide adoption.
  • The maintainer accepted the documented ecosystem-collision and
    trademark-risk boundary for the Gox name. This is not legal trademark
    clearance.

Every archive contains the 0BSD project license and deterministic third-party
notices. The release manifest binds all four archives to source commit
c0435d6fd70918bcdc0b1acbc9c107f9af1424fa and Go 1.26.5.

Full changelog: https://github.com/faustbrian/gox/commits/v0.1.0