Repository navigation
fix: single-source core lint rules, derive CLI version, fix README dialect note - #853
Conversation
…alect note - Add rules.CoreRules(CoreConfig) and rules.DefaultCoreConfig() in pkg/linter/rules as the one definition of the L001-L010 rule set. The gosqlx lint CLI, gosqlx action, MCP lint_sql, the C binding's gosqlx_lint and gosqlx.Lint's first ten rules now build from it. Each call site keeps its configuration and violation order (action keeps its lenient L003/L004/L005 settings and ID order). - cmd.Version now defaults to gosqlx.Version (still overridable with -ldflags -X); remove the dead Version literal in rootCmd; the version test runs `--version`. The release workflow fails when the tag does not match the Version const in pkg/gosqlx. - README: bigquery and redshift use the generic keyword set and only capability-gated grammar, not "keyword recognition and basic parsing". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
|
Claude finished @ajitpratap0's task in 33s —— View job Review of PR #853I read the diff but did not run the tests (no run tooling was available). I found no blocking issues, and the refactor looks behaviour-preserving. Lint rule consolidation
CLI version
Release guard (
Tests
README: the corrected bigquery and redshift wording matches the Overall this looks good to merge. Resolve the #845 conflict as you described. |
|
Claude finished @ajitpratap0's task in 20s —— View job Review of PR #853I read the diff against Lint rule consolidation
CLI version
Release guard (
Tests
README: the corrected bigquery and redshift wording matches the Overall this looks good to merge. Resolve the #845 conflict in |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9
* chore(parser): remove stray parser.go-e backup with conflict markers [vercel skip] The sed backup file was committed by accident in #791. It is not compiled but ships in the module zip. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9 * chore(release): bump version to 1.16.0 [vercel skip] gosqlx.Version and the CLI version were still 1.14.0 (v1.15.0 shipped with them), so gosqlx --version, the MCP server info and /health reported 1.14.0. Also bumps the VS Code extension, Claude Code plugin and marketplace, glama, performance baseline label, llms.txt and the site's release badge. pygosqlx __version__ now matches pyproject (0.2.0). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9 * docs(changelog): finalize 1.16.0 release notes [vercel skip] Turns [Unreleased] into [1.16.0] - 2026-10-21, adds the missing entries for #734, #735, #780, #786, #789, #790, #791, #826, #835, #836, #837, #840, #841, #843 and #844, updates the MCP and composite-field entries amended by #841 and #843, adds PR refs, and adds the compare links. The VS Code extension gets a 1.16.0 entry, and split-changelog.js generates the /changelog page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9 * docs: v1.15 to v1.16 migration guide and release doc fixes [vercel skip] MIGRATION gains a v1.15.0 -> v1.16.0 section with a behaviour-change checklist. ERROR_CODES documents E4001 dialect gating and the 11 dialect names. CLI_GUIDE lists --dialect on format, parse, analyze and lint and all 11 dialects. SQL_COMPATIBILITY marks Oracle CONNECT BY/PRIOR and SQL Server PIVOT as parsed. api/mcp.md matches the current Config and middleware API, api/models.md drops the nonexistent Location.Offset and documents byte columns, and HIGHLIGHTING notes ANSI control-character neutralization. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9 * chore(website): regenerate sample AST and changelog pages The website build rewrote both files on main: sample-ast.json gains the WithOrdinality and ColumnAliases fields from #843, and v1-9-1.md drops the emoji the changelog splitter strips. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9 * docs(release): correct allocation claim, plugin history, E4001 and LoadConfig errors Address review notes on #845: the lead paragraph understated the perf audit's allocation cuts, the MIGRATION table listed a v1.15.0 plugin that never shipped, E4001 also covers LIMIT under SQL Server, and LoadConfig rejects more trusted-proxy misconfigurations than the API doc listed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9 * docs(release): make glama.json match the MCP server List all 11 validate_sql dialects, describe lint_sql as the 10 rules it runs (L001-L010; the CLI and SDK have 30), sync tool descriptions with pkg/mcp/server.go, and drop the unsourced 1.38M ops/sec claim in favour of a link to the benchmarks page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9 * docs(release): add #846-#851 to the v1.16.0 CHANGELOG and migration guide Record the pygosqlx 0.3.0 API and wheels, the gosqlx_version double free, LSP serverInfo/CLI version reporting, the Python CI and release workflows and the #848 docs. MIGRATION companion table lists pygosqlx 0.3.0, libgosqlx exports and the LSP serverInfo version, with matching behaviour-change notes. Regenerate the v1.16.0 blog page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9 * docs(release): address v1.16.0 release review; add #852 - Release date 2026-10-22 in CHANGELOG, MIGRATION, the extension changelog and the generated blog post (re-stamp at tag time if it slips). - vscode-extension CHANGELOG: Fixed entry for the #846 version reporting. - CHANGELOG: keep the Behavior changes list tight; name TranspileError and the LintResult/SecurityScanResult types in the pygosqlx 0.3.0 entry. - MIGRATION: PyPI wheels row is conditional on the pygosqlx-v0.3.0 tag. - Add #852 (sdist builds fail without libgosqlx; release tag lookup skips v1). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9 * build(release): replace deprecated goreleaser keys (formats, version_template) goreleaser check (v2.12.7) flagged archives.format, format_overrides.format and snapshot.name_template as deprecated; release.yml runs goreleaser 'latest'. Snapshot release dry-run builds all six archives. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9 * docs(release): add #853 to the v1.16.0 CHANGELOG Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9 * feat(python): version pygosqlx in lockstep with GoSQLX (1.16.0) pygosqlx wheels bundle libgosqlx built from the same commit, so its version now matches the GoSQLX release. The first PyPI release is 1.16.0 (it was 0.2.0, never published); no older versions are backfilled. - pygosqlx-release.yml also publishes on GoSQLX 'vX.Y.Z' tags (the floating 'v1' tag does not match); 'pygosqlx-v*' stays for Python-only .postN releases. Both must match pyproject.toml and be on main. - pyproject.toml / __version__ 1.16.0; the version test now asserts __version__ equals the bundled library's version(). - CHANGELOG, MIGRATION and python/README describe the lockstep scheme. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9 --------- Co-authored-by: Ajit Pratap Singh <ajitpratapsingh@Ajits-Mac-mini-2655.local> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ks, Glama sync) (#855) * docs: v1.16.0 post-tag updates; re-measure parse benchmarks [vercel skip] - doc.go Version History gains v1.16.0. - gen-readme-metrics: README metrics block and docs/COMPARISON.md banner now track the v1.16.0 tag. - integrations/gorm and integrations/opentelemetry require v1.16.0. - lint-sql-in-ci guide and article pin @v1.16.0. - Parse-stage benchmarks re-measured on Apple M4 (median of 20 runs, 2026-10-22): SELECT 349 ns, INSERT 406, CTE 644, window 631, complex 1234. Same machine and load: v1.16.0 SimpleSelect is 26% faster than v1.15.0 (345 vs 469 ns, benchstat p=0.000 n=10); the absolute figure is above the 2026-10-13 318 ns because the machine was under ambient load (~2.8). Updated metrics.json, README, llms.txt, website metrics.ts and performance_baselines.json current_performance (CI baselines unchanged). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9 * ci(release): dispatch glama-sync after GoReleaser; clarify dialect count [vercel skip] - GoReleaser publishes the release with GITHUB_TOKEN, so glama-sync.yml's `release: published` trigger never fired (it did not run for v1.16.0). glama-sync gains a workflow_dispatch `tag` input and release.yml dispatches it after GoReleaser (actions: write). The build is pinned to the tag's commit; the Glama build image's Go goes from 1.26.1 to 1.26.10. - llms.txt and CLAUDE.md: 8 dialects with dedicated grammar; --dialect also accepts generic, bigquery and redshift (matches README since #853). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9 * chore(bench): publish v1.16.0 competitor benchmark results From the v1.16.0 tag's Competitor Benchmarks run (39771034670, commit e9c5db9, generatedAt 2026-10-22T11:43:59Z, GitHub ubuntu-latest, go1.26.9). results/latest.{json,txt} and website/src/data/competitor-benchmarks.json (exact copy). gen-readme-metrics --claims (incl. About text) and the website metrics drift check pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9 * fix(ci): define VERSION in the glama-sync commit step Each step runs in its own shell, so VERSION from the bump step was empty in the commit message. Found by claude-review on #855. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9 --------- Co-authored-by: Ajit Pratap Singh <ajitpratapsingh@Ajits-Mac-mini-2655.local> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Summary
Three low-severity review notes ahead of v1.16.0.
rules.CoreRules(cfg rules.CoreConfig) []linter.Ruleandrules.DefaultCoreConfig()inpkg/linter/rules(abovepkg/linter, so no import cycle with the rule sub-packages). These now build from it:gosqlx lint(createLinter),gosqlx action(builtinRules), the MCPlint_sqltool (newFullLinter), the C binding'sgosqlx_lint(newLinter), and the first ten rules ofgosqlx.Lint(allRules). The "keep the three in sync" comments are gone.CoreConfigcovers the settings that differ between call sites: the L003 blank-line limit, the L004 depth and indent size, and the L005 line length. lint, MCP and cbinding use the CLI defaults (1, 4/4, 100, or the caller's max length).gosqlx.Lintuses L005=120.actionkeeps its own lenient settings (2, 10/4, 120).CoreRuleskeeps the existing grouped order (L001-L005, L010, L006, L008, L009, L007).actionused numeric order, so it sorts by ID to keep that order.cmd.Versionnow defaults togosqlx.Version, and-ldflags -X .../cmd.Version=<tag>can still override it (checked: a plain build prints1.14.0, and-X ...=9.9.9-testprints9.9.9-test). The unusedVersion: "1.14.0"literal inrootCmdis removed. The near-tautological version test is replaced with one that runs--versionand checks the output containsgosqlx.Version.release.ymlgains a step, right after checkout, that fails when the tag without its leadingvdiffers fromconst Versioninpkg/gosqlx/gosqlx.go.bigqueryandredshiftwere described as having "keyword recognition and basic parsing only". In factDialectKeywordsreturns nil for both, so they use the generic keyword set, and they only have capability-gated grammar (for example BigQuery's QUALIFY, UNNEST in FROM and(struct).field; each was checked withgosqlx validate --dialect bigquery). No other docs or website pages repeated the sentence.Test Plan
task check(fmt, vet, golangci-lint, race tests)task test:cbindinggo test ./pkg/mcp/... ./cmd/...pkg/linter/rules/core_test.go: exactly L001..L010 once each in the documented order, L005 config applied,DefaultCoreConfigvalues pinned, fresh instances per call-ldflags -Xand ran--versionBreaking Changes
None. One new exported API: package
github.com/ajitpratap0/GoSQLX/pkg/linter/rules(CoreRules,CoreConfig,DefaultCoreConfig). Unstamped CLI builds now reportgosqlx.Version. On main both values are1.14.0, so nothing visible changes.Note: this conflicts with #845 in
cmd/gosqlx/cmd/root.go. To resolve, keepvar Version = gosqlx.Version, drop therootCmdVersion:literal, and bump onlygosqlx.Version.🤖 Generated with Claude Code
https://claude.ai/code/session_01RkzVu3JY9Y6BRWfjesWts9