Skip to content

chore: add three development skills (add-sql-dialect, add-cel-feature, release-cel2sql)#119

Merged
richardwooding merged 1 commit intofeat/add-skill-authoring-skillfrom
feat/add-development-skills
Apr 27, 2026
Merged

chore: add three development skills (add-sql-dialect, add-cel-feature, release-cel2sql)#119
richardwooding merged 1 commit intofeat/add-skill-authoring-skillfrom
feat/add-development-skills

Conversation

@richardwooding
Copy link
Copy Markdown
Contributor

Summary

Stacks on #118 (skill-authoring) and adds three further skills under .claude/skills/ that capture the most-recurring procedural work in this repo. Each skill follows the authoring discipline that skill-authoring codifies: progressive disclosure, ≤200-line SKILL.md, third-person specific descriptions, scripts for deterministic work.

Skill Scope Why it pays for itself
add-sql-dialect SKILL.md + 2 references + 1 script + 1 template Adding a dialect (#117 Spark, #104 multi-dialect) is ~1000-line PRs and ~25 file touches. The skill captures the matrix of method divergences across the 6 existing dialects so the engineer copies the closest analogue rather than reverse-engineering it. The check_testcase_coverage.py script catches silently-skipped tests; the gen_expected_sql.go.tmpl template avoids hand-typing 64 expected SQL outputs.
add-cel-feature SKILL.md + 2 references 5+ feature PRs in recent history (string extensions, comprehensions, multi-dim arrays, regex, getDayOfWeek). The converter-file-map and dialect-method-checklist eliminate the "where does this go?" hunt and the "which dialects am I missing?" oversight. Reuses check_testcase_coverage.py.
release-cel2sql SKILL.md + 1 reference + 1 script Did this twice this month (v3.7.0, v3.7.1) and forgot to backfill v3.6.0 the first time. prepare_release.py errors out when [Unreleased] is empty, splits it into a dated versioned section, and prints the exact branch/commit/PR/tag commands.

Verification

  • python .claude/skills/skill-authoring/scripts/lint_skill.py .claude/skills/add-sql-dialect → 0 errors, 0 warnings.
  • ... .claude/skills/add-cel-feature → 0/0.
  • ... .claude/skills/release-cel2sql → 0/0.
  • python .claude/skills/add-sql-dialect/scripts/check_testcase_coverage.py sparkOK: dialect.spark has coverage in all 64 shared test case(s).
  • Same for duckdb, postgresql, bigquery. mysql and sqlite correctly report real coverage gaps in array/comprehension/parameterized tests.
  • prepare_release.py self-tested against a synthetic CHANGELOG.md — correctly errors on empty [Unreleased], correctly rewrites populated [Unreleased] to a dated versioned section.

Out of scope (deliberate)

  • backport-from-fork — exercised once (feat: backport features and fix from observeinc/cel2sql fork #113); pattern is fork-specific. Wait for a second backport before generalizing.
  • bump-dep-with-vuln-fix — Dependabot already handles routine bumps; the interesting cases (transitive docker/docker, Go stdlib vuln chasing) are infrequent.
  • bench-compare-locally — already a single Makefile target; ceremony around one command.

Stacking note

Branched off feat/add-skill-authoring-skill (#118) so the linter is locally available for verification. Once #118 merges, this PR can rebase against main cleanly — the skill-authoring/ files are unchanged here.

🤖 Generated with Claude Code

…, release-cel2sql)

The Spark dialect work (#117), the v3.7.0/v3.7.1 release flow, and the 5+
CEL feature PRs in the recent history are all heavily procedural,
multi-file, and easy to mess up in subtle ways. Captures each pattern
as a Claude Code skill following the discipline established by
skill-authoring (#118):

- add-sql-dialect (~25 file touches in lockstep): SKILL.md +
  dialect-method matrix across the 6 existing dialects, exhaustive
  touchpoints checklist, check_testcase_coverage.py script (verifies
  every WantSQL has the new dialect or a SkipDialect reason), and a
  gen_expected_sql.go.tmpl build-tagged template that prints actual
  SQL for every shared test case.

- add-cel-feature (5+ recent PRs): SKILL.md + converter-file-map
  (which file owns which CEL surface area) + dialect-method-checklist
  (steps when adding a method to dialect.Dialect, with a worked
  WriteEpochExtract example). Reuses check_testcase_coverage.py.

- release-cel2sql (every release): SKILL.md + semver-decision tree
  with the SIV /v4 caveat + prepare_release.py script that splits
  [Unreleased] into a versioned section dated today and prints the
  branch/commit/tag commands. Errors out cleanly when [Unreleased]
  is empty (the v3.6.0 → v3.7.0 backfill footgun is now caught).

All three pass `python .claude/skills/skill-authoring/scripts/lint_skill.py`
with 0 errors / 0 warnings. check_testcase_coverage.py self-tests
correctly across all six existing dialects (spark, duckdb, postgresql,
bigquery: full coverage; mysql, sqlite: real gaps in array/comprehension
tests). prepare_release.py self-tests against a synthetic CHANGELOG.md.

Branched off feat/add-skill-authoring-skill (#118) so the linter is
locally available; the skill-authoring content is unchanged from #118
so this branch needs no rebase touch-ups beyond the standard merge
once #118 lands.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@richardwooding richardwooding merged commit e97201e into feat/add-skill-authoring-skill Apr 27, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant