M1: repo skeleton, CI, and verification-split ADR#1
Merged
Conversation
Establishes CLAUDE.md and the .claude/rules/ set (coding standards, architecture, design principles, TDD testing, and workflow) that govern how SqlBound is built milestone by milestone. Also fills in the LICENSE copyright holder and ignores JetBrains Rider's .idea/ directory.
Establishes the SqlBound class library (net8.0;net10.0, no production code yet — execution logic starts in M2) and its xUnit test project, wired together via sqlbound.slnx. Directory.Build.props centralizes nullable/warnings-as-errors/style enforcement and NuGet package metadata per architecture.md; .editorconfig tool-enforces the naming conventions from coding-standards.md. A single smoke test proves the build-to-test wiring works ahead of any real behavior.
Runs on pushes to master/feature branches and PRs into master: restore, dotnet format --verify-no-changes, build, test, and a solution-level pack (the non-packable test project is skipped automatically), with the resulting .nupkg/.snupkg uploaded as a build artifact. Single ubuntu-latest job for now — no DB dependency exists until the SQL Server introspection work in Phase 3.
Documents the decision that live database round-trips (prepare/describe) are confined to the CLI prepare step and an opt-in MSBuild task, while the in-IDE Roslyn analyzer validates only against committed .sqlbound/ snapshots. Analyzers must stay fast and side-effect-free; this keeps database I/O out of the hot path entirely.
Name AdditionalFiles/AdditionalTexts (via buildTransitive .props) as the mechanism the analyzer uses to read .sqlbound/ snapshots — Roslyn prohibits arbitrary analyzer file I/O (RS1035), so this is the enabling constraint of the verification split, not an implementation detail. Defer the open question of whether the source generator also consumes snapshots (signature-driven vs snapshot-driven codegen) to ADR 0002, recorded as Proposed and due before M4 starts.
Correct the overstated claim that analyzers fail to load without DB connectivity (analysis fails or hangs; the analyzer loads fine), and fix two imprecise phrasings: the stages communicate *through* a process boundary rather than "never sharing" one, and the analyzer checks the user-declared partial method signature, not a "generated" shape. Record three previously unstated consequences: per-query snapshot files (SQLx's single-file format caused chronic merge conflicts), the undefined missing-snapshot analyzer behavior (scoped to M8, interacts with ADR 0002), and the MSBuild task's build-ordering question that the CLI path avoids.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Milestone 1 (Phase 1 — Bedrock) of the SqlBound roadmap: the repository skeleton everything else builds on.
.claude/rules/set (coding standards, architecture, design principles, TDD testing, workflow) that govern all future work; LICENSE copyright filled in; Rider.idea/ignored.sqlbound.slnxwithsrc/SqlBound(class library,net8.0;net10.0, intentionally empty — production code starts test-first in M2) andtest/SqlBound.UnitTests(xUnit, one smoke test proving build→test wiring).Directory.Build.propscentralizes nullable,TreatWarningsAsErrors,EnforceCodeStyleInBuild, and NuGet metadata (0.1.0-preview.1);.editorconfigtool-enforces the naming conventions;global.jsonpins SDK 10.0.301.master/feature/**and PRs intomaster— restore → format check → build → test → pack, with.nupkg/.snupkguploaded as artifacts.preparestep; the in-IDE analyzer verifies only against committed.sqlbound/snapshots viaAdditionalFiles(RS1035 makes this the enabling mechanism, not a detail). Reviewed and amended; the generator-consumption question is deferred to ADR 0002 (stub committed, decision due before M4).Why
Establishes the tool-enforced conventions, CI safety net, and the load-bearing verification-architecture decision before any production code exists, so every later milestone lands against a working build/test/pack pipeline.
Reviewer notes
GenerateDocumentationFilestaystruefor test projects: Roslyn requires it to run the IDE0005 unused-usings check at build time; only CS1591 is suppressed there.dotnetcommands were verified locally with the same flags (build: 0 warnings, test: 1/1, format: clean, pack: succeeds).v0.1.0is deliberately absent — per the workflow rules it lands when Phase 1 (M1–M3) completes, not per milestone.🤖 Generated with Claude Code