Skip to content

feat(sql-server): add the setup skill and Azure SQL Database docs - #11994

Merged
kyle-sexton merged 6 commits into
mainfrom
fix/sql-server-setup-9898
Nov 1, 2026
Merged

kyle-sexton merged 6 commits into
mainfrom
fix/sql-server-setup-9898

Conversation

@kyle-sexton

@kyle-sexton kyle-sexton commented Nov 1, 2026 •

Copy link
Copy Markdown
Member

Closes #9898

Summary

Replaces #11953 (lanes App PR), which merges here unchanged, plus fixes for its two open review threads and the incremental review's eval finding. The pr-unblock lane stopped #11953 with feedback-untaken-threads, so no lane would take them.

The change adds documentation and a setup skill only. It provisions nothing and bills nothing: the Azure SQL Database doc describes the free tier with --free-limit-exhaustion-behavior AutoPause, and no workflow or infrastructure file changes.

Fix

  • Merges feat(sql-server): add the setup skill and Azure SQL Database docs #11953's head 280084a39fbb03eda32250e2cd2b8ae561bdc717: /sql-server:setup (check and apply), its scripts, tests and evals, reference/azure-sql-database.md, README Setup section, prerequisites, catalog line and changelog fragment.
  • skills/setup/scripts/install-server.mjs: builds the copy and runs npm ci in <data-dir>/server.next, then swaps it in with renameSync only once the manifest and dependencies check out, restoring the old copy if the swap fails. A failed npm ci now leaves the live copy that registrations use untouched.
  • test/setup.test.mjs: new test that a failing npm ci (a fake npm on PATH) exits 1 and leaves the live copy's manifest in place.
  • skills/setup/SKILL.md, README.md, check-setup.mjs comment: the register-by-reference and no-project-scope decisions in our own words; the claude mcp get readback and the grants call are what confirm a credential arrived. New Upstream record pointing at https://code.claude.com/docs/en/mcp#environment-variable-expansion-in-mcp-json with as-of date and recheck trigger.
  • Setup evals: cases 1 to 3 state that no config exists and expect the check's stop on the config FAIL; all four cases are converted by convert-evals-json from skills/setup/evals/evals.json into a plugin-level suite under plugins/sql-server/evals/, where the eval lane finds them.
  • skills/setup/SKILL.md: no restated plugin-data persistence or MCP load timing; Upstream record pointers to https://code.claude.com/docs/en/plugins/components#path-variables-and-persistent-data and https://code.claude.com/docs/en/mcp#managing-your-servers.

Verification

  • npm test in plugins/sql-server: 134 tests pass, including the new install-server test.
  • check-skill.sh plugins/sql-server/skills: PASS (1 warning: no Gotchas section).
  • validate-cases.py plugins/sql-server/evals: no FAIL (WARNs: judge-only graders and samples awaiting calibration, as for every converted suite).
  • The docs anchor was read from the live page this session.

Related

🤖 Generated with Claude Code

melodic-automation-lanes Bot and others added 4 commits November 1, 2026 15:18
Lane-Activity: work-resolve-issue/resolve-issue
…nt at the MCP docs

install-server.mjs now builds the copy and runs npm ci in server.next and
swaps it in only once complete, so a failed npm ci leaves the live copy that
registrations use untouched. A test covers the failure path.

SKILL.md and README state the register-by-reference decision in our own
words, with an upstream record pointing at the MCP docs section, and the
evals match the check's stop on a missing config.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-01T16:51:06.199014Z 6b94472 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions

github-actions Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

claude-security-review reviewed 532780fe6fecfbdc12baa99c8111fb8fbba28edd: read 15 of 15 changed file(s); 0 finding(s), 0 as inline comments.

Security review (incremental, dcab900..532780f)

No security issues found in this change.

What changed and what I checked

  • plugins/sql-server/skills/setup/SKILL.md: one sentence added. When the user asks for project scope, the skill now refuses in its first reply, before any step. This makes the existing --scope project refusal and the Boundaries rule ("Never write ... a project-scope registration") stronger. It removes or weakens no standing instruction, so the instruction-surface lens turns up nothing.
  • Three setup eval cases (setup-apply-refuses-project-scope-on-config-fail, setup-check-reports-every-row-and-modifies-nothing, setup-literal-password-is-a-config-fail-with-env-remediation): allowed_tools now includes Bash, so the eval run can actually execute check-setup.mjs. The prompts are written in the repository and name only made-up paths (for example ~/sql-server/config.json). They don't pull in any text from outside the repository, so this grant gives no untrusted input a way to reach Bash. The new deterministic tool_used graders don't loosen anything either: no-install and no-register use max: 0 with arm: 'both' to fail a run that calls install-server.mjs or claude mcp add after a config FAIL.
  • Grader sample JSON files (added, plus the renamed expectation-*.json): these are labelled data only. The sample commands are never executed.

Not touched by this increment: no trust controls, workflows, token or kill-switch paths, merge holds, or plugin manifests (.claude-plugin/*.json), so there are no manifest <field> lines.

Settled threads: none of them was re-raised. The two SKILL.md threads marked lines changed since resolution: yes were about restated upstream behaviour. The new line doesn't bring that back.

Spend: giving Bash to three eval cases lets eval runs execute a local read-only script. This uses only prepaid eval or subscription usage and is not a hold.

critical-findings: 0

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6b94472509

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

claude-review: 1 inline finding(s) on 6b94472509eb65d6d43dfe5889588325fc439032; the summary is in this lane's pull request comment.

claude-lane: claude-review

@github-actions

github-actions Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

claude-review reviewed 532780fe6fecfbdc12baa99c8111fb8fbba28edd: read 15 of 15 changed file(s); 0 finding(s), 0 as inline comments.

Incremental review, dcab900..532780f: no findings.

I read all 15 files in scope. The incremental diff had no patch for the three renamed expectation-*.json samples, so I read their head contents in the full diff.

What changed

  • Deterministic runs-check-script grader. The three setup cases that run check-setup.mjs now have a tool_used grader for it (min: 1, arm: with-only), and Bash is added to their allowed_tools. In setup-check-reports-every-row-and-modifies-nothing, this grader replaces the old LLM expectation-1.
    • The input_match pattern "command":"(?:[^"\\]|\\.)*?check-setup\.mjs is the same form other suites in the repo use (for example plugins/plugin-quality/evals/re-pressed-for-second-parser/case.yaml).
    • Checked against the samples: both pass samples match, the ${CLAUDE_SKILL_DIR} form with its escaped quotes and the expanded form. The cat ~/sql-server/config.json fail sample does not match.
  • Renamed case. setup-apply-refuses-project-scope-and-confirms-each-registration is now setup-apply-refuses-project-scope-on-config-fail. It gains deterministic no-install and no-register graders (max: 0, arm: both). Both fit what the case expects: a config FAIL stops apply at step 1, so no registration happens and none needs confirming. Each sample set separates the behaviour correctly: the check-only call passes, and install-server.mjs / claude mcp add fail.
  • SKILL.md. The skill now refuses project scope in its first reply, before any step, so a run that stops early on a check FAIL still answers the request. This matches what the renamed case expects (expectation-3). It also stays inside .claude/rules/skill-bodies-state-current-rules.md: it gives our own decision and points to step 3's reason, without restating any upstream product behaviour.

Rules and context

  • .claude/rules/eval-case-transcripts.md applies to the eval files. The samples use synthetic paths (/opt/plugins/..., /srv/sql-server/...) and contain no transcript material.
  • Settled threads: the three threads on evals.json and SKILL.md stay settled. Nothing in this increment reopens their points: the new SKILL.md lines add no restated upstream behaviour.
  • Closing issue feat: add the SQL Server MCP setup skill and Azure SQL Database docs #9898: this increment changes no acceptance criterion's evidence. The check-skill.sh and validate-cases.py results in the PR body are claimed by the author; I did not run them.
  • No manifest changes in this increment.

Spend: the three cases now allow Bash, so eval runs can execute check-setup.mjs. That draws only on prepaid API credit or subscription usage; it is not a hold.

…oint at upstream

The setup cases move from skills/setup/evals/evals.json to plugin-level
case directories under plugins/sql-server/evals, written by the evals
plugin's convert-evals-json, so the eval lane discovers them.

SKILL.md drops two restated Claude Code behaviors (plugin data persistence,
when an added server loads) and records pointers to their docs sections.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

claude-review: 2 inline finding(s) on dcab900ceb5eed9f114a8b019cf6593038964762; the summary is in this lane's pull request comment.

claude-lane: claude-review

…ipt run deterministically

The three cases that run check-setup.mjs listed no Bash, so their run
graders could never pass. They now list Bash and grade the check, install
and register calls with tool_used graders and samples. The apply case is
renamed for what it tests, and SKILL.md refuses project scope in the first
reply so a run that stops on a config FAIL still answers it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kyle-sexton
kyle-sexton added this pull request to the merge queue Nov 1, 2026
Merged via the queue into main with commit 2e5f1d6 Nov 1, 2026
46 checks passed
@kyle-sexton
kyle-sexton deleted the fix/sql-server-setup-9898 branch November 1, 2026 19:03
@github-actions

github-actions Bot commented Nov 1, 2026

Copy link
Copy Markdown
Contributor

Post-merge mutation testing

Killed 3, survived 4, timeout 0, no coverage 0, invalid 0, not run 0.
Covered-code score 43%; mutation score 43%.

File Killed Survived Timeout No coverage Invalid Not run
plugins/sql-server/skills/setup/scripts/check-setup.mjs 3 2 0 0 0 0
plugins/sql-server/skills/setup/scripts/install-server.mjs 0 2 0 0 0 0

Surviving mutants

Location Operator Disposition Cause
plugins/sql-server/skills/setup/scripts/check-setup.mjs:72 ROR productive input-gap
plugins/sql-server/skills/setup/scripts/check-setup.mjs:112 ROR productive no-assertion
plugins/sql-server/skills/setup/scripts/install-server.mjs:37 LCR productive input-gap
plugins/sql-server/skills/setup/scripts/install-server.mjs:56 ROR productive no-assertion

The run's summary has the full report.

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.

feat: add the SQL Server MCP setup skill and Azure SQL Database docs

1 participant