Table of Contents

Project status

Inquiry is a compile-time-SQL micro-ORM — a Roslyn incremental source generator that bakes every SQL statement as a const string at build time. The runtime ships zero SQL.

1.0.0 is not release-ready yet. Live status, priority, open/closed counts, and delivery history live in GitHub — the single source of truth. See the 1.0.0 milestone, the open milestone issues, and CHANGELOG.md for shipped work. The Roadmap holds the durable product contract, the 1.0 release gates, and what is out of scope. This page describes the durable shape of the project — supported engines, target frameworks, and test layout.

Supported database engines (6, all live-tested)

Dialect ([assembly: InquiryDialect("…")]) Runtime package Analyzer (source generator) Live test status
Sqlite Ignyte.Inquiry.Sqlite Inquiry.Sqlite.Analyzer in-process (no Docker)
SqlServer Ignyte.Inquiry.SqlServer Inquiry.SqlServer.Analyzer Testcontainers (CI integration matrix)
PostgreSql Ignyte.Inquiry.PostgreSql Inquiry.PostgreSql.Analyzer Testcontainers (CI integration matrix)
MySql Ignyte.Inquiry.MySql Inquiry.MySql.Analyzer Testcontainers (CI integration matrix)
MariaDb Ignyte.Inquiry.MariaDb Inquiry.MariaDb.Analyzer Testcontainers (CI integration matrix)
Oracle Ignyte.Inquiry.Oracle Inquiry.Oracle.Analyzer Testcontainers (CI integration matrix)

The shared generator framework lives in Inquiry.Generators.Shared and is bundled privately into each *.Analyzer (Roslyn loads each analyzer in its own AssemblyLoadContext, so the framework cannot be a shared analyzer dependency). See Design notes for the architecture.

Target frameworks

All shipped packages — the core Inquiry runtime, the provider runtime libraries, and the companion packages — target net8.0; net9.0; net10.0, as do the test projects; the floor is .NET 8. (EOL net6.0/net7.0 were dropped.)

Feature completeness

The original 13-workstream implementation roadmap — MySQL & Oracle providers, cloud-compat modes, richer WHERE predicates, ORDER BY + offset/keyset pagination, batch & bulk operations, automatic prepared-statement reuse, projections + aggregations, optimistic concurrency, schema-DDL generation, soft deletes, full-text search, and JSON/array/value-converter columns — has an initial implementation merged to main. That does not mean the library is 1.0-complete: live integration coverage has exposed correctness and performance follow-ups, and the first-release gates are tracked on the Roadmap. The per-workstream design record is in Design notes; user-facing docs for each feature are under Features.

Beyond that roadmap, the runtime also ships an opt-in observability layer (OpenTelemetry tracing + metrics + ILogger logging via AddInquiryTelemetry(); see Observability) and open-time resiliency (cloud transient-fault retry and per-provider backup-server failover; see Resiliency & failover).

Remaining follow-ups (and explicitly out-of-scope items) are tracked on the Roadmap.

Release engineering

Packages are versioned by MinVer from git tags. Preview releases (v1.0.0-preview.N) are published on nuget.org; the first stable release will use the v1.0.0 tag and package version 1.0.0. Every package embeds SourceLink metadata (Microsoft.SourceLink.GitHub) and ships a .snupkg symbol package, including the provider analyzer PDBs. The verifier binds each PDB to its DLL CodeView identity and checks complete SourceLink document coverage at the exact commit. The previous tag-triggered rebuild-and-wildcard-push workflow was removed because it did not prove the complete provider or package-consumer gates and could not safely recover from partial publication. eng/release-manifest.json now defines the exact eleven-package 1.0 bundle, and the cross-platform verifier rejects inventory, version, dependency, repository-commit, metadata, symbol, and SourceLink drift. eng/pack-release.ps1 packs from an exact commit in a detached worktree, and CI separates the package producer from an independent verifier before the versioned ci-required-v1 aggregate gate can pass. Publishing is live: release tags publish to nuget.org via Trusted Publishing (see Contributing — Releasing). #87 (benchmark truth and regression gates) is closed: corrected baselines committed, weekly regression budgets enforced, and EF Core coverage gaps closed. #89 closed 2026-07-25 across all nine acceptance criteria: package identity, an immutable CI artifact, clean consumer installs on net8/net9/net10 and NativeAOT from the produced nupkgs, an API-compatibility baseline, CycloneDX SBOM plus SLSA build provenance and dependency auditing, release/support/security policies, hosted versioned documentation, CODEOWNERS and branch protection, and CodeQL plus dependency scanning. See Contributing — Releasing.

Security status

The early repository scan findings fixed in 318ee5f remain covered. A fresh #220 security diff scan and threat-model review then found a custom-shell CI bypass; #220 fixed it and added regression coverage. The post-fix review reported no remaining reportable findings. Security evidence, policies, and release governance shipped with #89 (closed 2026-07-25): SECURITY.md, a CycloneDX SBOM and SLSA build provenance on every packed artifact, NuGetAudit over direct and transitive dependencies, and a CodeQL + dependency-scanning workflow. CodeQL is active now that the repository is public.

Test status

Tests are organized per concern; the non-Docker suites always run, and the provider suites use Testcontainers. Local provider runs skip gracefully when Docker is unavailable; CI sets INQUIRY_REQUIRE_DOCKER=1, so a missing or failed provider container fails the integration job.

Suite Scope Needs Docker?
Inquiry.Generators.Tests source-generator emission + per-dialect SQL assertions no
Inquiry.Tests runtime pipeline, parameter binding, transactions no
Inquiry.Sqlite.Tests in-process end-to-end CRUD/eager + schema fidelity no
Inquiry.PostgreSql.Tests live Northwind + generated-DDL + feature-matrix yes
Inquiry.SqlServer.Tests live Northwind + generated-DDL + feature-matrix yes
Inquiry.MySql.Tests live Northwind + generated-DDL + feature-matrix yes
Inquiry.MariaDb.Tests live Northwind + generated-DDL + feature-matrix yes
Inquiry.Oracle.Tests live Northwind + generated-DDL + feature-matrix yes
Inquiry.IntegrationTesting shared schema-fidelity comparator + introspection support n/a (library)
Inquiry.FeatureCatalog shared feature-catalog entities, stores, and helpers linked into each provider suite n/a (library)

Every live dialect exercises the full supported feature set via a shared, linked feature catalog (versioned/soft-delete/JSON/full-text entities) plus aggregate/projection and batch methods on the Northwind stores.

For current test counts, run the whole suite (dotnet test) or a single project (e.g. dotnet test tests/Inquiry.MySql.Tests -f net8.0). The provider-restoration gate in #171 is closed. Two consecutive full CI runs are green at 20/20 required checks each, including every one of the 15 PostgreSQL, MySQL, MariaDB, SQL Server, and Oracle × net8.0/net9.0/net10.0 integration legs. Docker-gated suites skip locally (not in CI) when Docker is unavailable.

The normal CI workflow runs on pull requests targeting main, and on merge-queue events: build-and-unit (generator, runtime, and SQLite suites — no Docker), aot-smoke (publishes and runs the NativeAOT smoke app), an integration matrix (PostgreSQL, MySQL, MariaDB, SQL Server, Oracle × net8.0/net9.0/net10.0 via Testcontainers — exactly 15 required legs), package-producer, and the independent package-verifier. The ci-required-v1 aggregator runs even after failures and fails unless all required jobs and matrix legs succeed. Direct merging has been retired; repository rulesets protect main with this context and the review requirements documented under #89. A separate scheduled weekly workflow (scheduled.yml) repeats the full provider × net8.0/net9.0/net10.0 matrix every Monday.