Skip to content

M1: repo skeleton, CI, and verification-split ADR#1

Merged
lgamorim merged 6 commits into
masterfrom
feature/M1-skeleton-ci
Jul 11, 2026
Merged

M1: repo skeleton, CI, and verification-split ADR#1
lgamorim merged 6 commits into
masterfrom
feature/M1-skeleton-ci

Conversation

@lgamorim

Copy link
Copy Markdown
Owner

What

Milestone 1 (Phase 1 — Bedrock) of the SqlBound roadmap: the repository skeleton everything else builds on.

  • Governance: CLAUDE.md and the .claude/rules/ set (coding standards, architecture, design principles, TDD testing, workflow) that govern all future work; LICENSE copyright filled in; Rider .idea/ ignored.
  • Solution skeleton: sqlbound.slnx with src/SqlBound (class library, net8.0;net10.0, intentionally empty — production code starts test-first in M2) and test/SqlBound.UnitTests (xUnit, one smoke test proving build→test wiring). Directory.Build.props centralizes nullable, TreatWarningsAsErrors, EnforceCodeStyleInBuild, and NuGet metadata (0.1.0-preview.1); .editorconfig tool-enforces the naming conventions; global.json pins SDK 10.0.301.
  • CI: single ubuntu-latest job on pushes to master/feature/** and PRs into master — restore → format check → build → test → pack, with .nupkg/.snupkg uploaded as artifacts.
  • ADR 0001: database round-trips confined to the CLI/MSBuild prepare step; the in-IDE analyzer verifies only against committed .sqlbound/ snapshots via AdditionalFiles (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

  • GenerateDocumentationFile stays true for test projects: Roslyn requires it to run the IDE0005 unused-usings check at build time; only CS1591 is suppressed there.
  • The CI YAML is locally unverified (no runner locally) — this PR's checks are its first real execution. All underlying dotnet commands were verified locally with the same flags (build: 0 warnings, test: 1/1, format: clean, pack: succeeds).
  • Version tag v0.1.0 is deliberately absent — per the workflow rules it lands when Phase 1 (M1–M3) completes, not per milestone.

🤖 Generated with Claude Code

lgamorim added 6 commits July 11, 2026 00:21
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.
@lgamorim lgamorim added this to the M1 — Skeleton & CI milestone Jul 11, 2026
@lgamorim lgamorim merged commit 9af1838 into master Jul 11, 2026
2 checks passed
@lgamorim lgamorim deleted the feature/M1-skeleton-ci branch July 11, 2026 00:19
@lgamorim lgamorim modified the milestones: M1 — Skeleton & CI, Phase 1 — Bedrock (0.1.x) Jul 11, 2026
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