feat: stabilize v0.3.0 public API bundle#77
Merged
StefanSteiner merged 2 commits intoMay 28, 2026
Conversation
This commit aggregates the breaking and additive API changes that ship together as v0.3.0. The individual PRs landed under chore: prefixes to defer release-please from cutting an early version; this single feat: commit with a BREAKING CHANGE: footer is the trigger for the v0.3.0 release PR. Bundle contents (all merged to main): - tableau#70 (PR tableau#71) — Flat public Error enum + ergonomic constructors workspace-wide - tableau#69 (PR tableau#73) — Transaction API consolidation (RAII guard recommended; raw trio deprecated and #[doc(hidden)]) - tableau#61 + tableau#62 (PR tableau#74) — FromRow modernization: #[derive(FromRow)] in new hyperdb-api-derive crate, RowAccessor with cached name->index lookup, breaking trait signature change, blanket tuple impls deleted, #[hyperdb(rename)] and #[hyperdb(index)] attributes - tableau#76 — Follow-ups A/B/C: typed io::Error sources in process.rs, Error::InvalidOperation variant for caller misuse, structured SQLSTATE on Cancelled/Closed/Connection Follow-up D (flatten internal client::Error) deferred to v0.3.x as issue tableau#75 — internal-only, zero external consumers, larger than originally scoped. The code change in this commit is a small documentation refresh on the crate-level rustdoc to (a) include hyperdb-api-derive in the companion crates list and (b) fix a stale crate name (sea-query-hyper -> sea-query-hyperdb). The body of the commit is the BREAKING CHANGE: footer below; release-please uses it to generate the v0.3.0 entry in CHANGELOG.md. See MIGRATING-0.3.md for full migration recipes covering every breaking change in the bundle. BREAKING CHANGE: v0.3.0 reshapes the public hyperdb_api::Error enum into a flat canonical structure (no Box<dyn StdError> cause channel, no kind() method, no Other catch-all variant), and its constructor surface (Error::new and Error::with_cause are deleted in favor of domain-specific snake_case constructors). It also changes the FromRow trait signature from fn from_row(row: &Row) to fn from_row(row: RowAccessor<'_>), deletes the blanket 1/2/3/4-tuple FromRow impls, deprecates Connection::begin_transaction/commit/rollback (use the RAII guard at Connection::transaction() instead), introduces a new Error::InvalidOperation variant, and changes Error::Cancelled and Error::Closed from tuple to struct variants carrying structured sqlstate. Every variant has a snake_case constructor; the FromRow derive lives in a re-exported hyperdb-api-derive crate. See MIGRATING-0.3.md for migration recipes.
Pre-release adversarial review of the v0.3.0 rollup CI/CD config caught that hyperdb-api-derive (added in PR tableau#74) was missing from release.yml's publish-in-dependency-order step. hyperdb-api/Cargo.toml strictly pins hyperdb-api-derive = "=0.X.Y", so cargo publish -p hyperdb-api would fail at release time when crates.io can't resolve the strict version of derive (because release.yml never published it). Verified topologically: - hyperdb-api-derive has zero workspace deps (only syn/quote/proc-macro2 from the registry), so it can publish before any workspace crate. - It's a runtime dep of hyperdb-api only. - Inserted right after hyperdb-api-salesforce; existing order otherwise unchanged. Added a dependency-order comment to the publish step explaining the topology so future contributors don't break it. Also adds hyperdb-api-derive to ci.yml's publish dry-run job. The dry-run job exists exactly to catch this class of bug before release time. Without this addition, the same blocker could re-emerge after a future major-version refactor of derive. Updates the stale "7 workspace-member version rows" comment in release-please.yml to reflect the current 8-member workspace (hyperdb-api-derive added in tableau#74). The lockfile-sync sentinel enumerates members at runtime via cargo metadata, so the count is informational; correctness is unchanged. Verified locally: - cargo publish -p hyperdb-api-derive --dry-run: succeeds - cargo publish -p sea-query-hyperdb --dry-run: succeeds - cargo publish -p hyperdb-bootstrap --dry-run: succeeds - cargo metadata workspace topology check: order in release.yml is consistent with non-dev deps across all 7 publishable crates.
This was referenced May 28, 2026
Closed
StefanSteiner
added a commit
that referenced
this pull request
May 29, 2026
Configures release-please to bump 0.x.y → 0.(x+1).0 on a BREAKING CHANGE: footer instead of bumping straight to 1.0.0. The default release-please behavior for any 0.x.y release-type:simple package is that BREAKING CHANGE triggers a 1.0.0 bump; bump-minor-pre-major:true overrides that to "BREAKING CHANGE while < 1.0.0 only bumps minor". Why now: PR #77 (the v0.3.0 rollup) carries a BREAKING CHANGE: footer. release-please opened release PR #78 proposing 1.0.0. We closed #78 without merging — the manifest is still 0.2.3, no tag was cut. With this config change, the next release-please run will recompute against main and propose 0.3.0 instead of 1.0.0. Schema verification: bump-minor-pre-major is a documented field on the release-please config schema at both the top level (acts as default for all packages) and the per-package level. Verified against https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json and the implementation in release-please src/manifest.ts:1746-1747 which reads pathConfig.bumpMinorPreMajor ?? defaultConfig.bumpMinorPreMajor. Setting both explicitly for defense-in-depth. This config is evaluated against current commits at run time, so it applies retroactively to the BREAKING CHANGE: footer already on main. No need to amend the rollup commit or cherry-pick history. Note: the closed PR #78 still has the autorelease: pending label. That label only matters on OPEN PRs; release-please's matcher (findOpenReleasePullRequests) ignores closed ones unless they carry autorelease: snooze. PR #78 is therefore invisible to the next run, which will open a fresh release PR with the corrected 0.3.0 proposal.
Merged
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.
Summary
The v0.3.0 release rollup. This is the commit release-please will see and use to cut v0.3.0.
The four bundle PRs all landed under
chore:prefixes to defer release-please from cutting an early version. This singlefeat:commit with aBREAKING CHANGE:footer aggregates the bundle and triggers the v0.3.0 release PR.What's in v0.3.0
Errorenum + ergonomic constructors workspace-wide#[doc(hidden)]deprecatedFromRowmodernization —#[derive(FromRow)],RowAccessor, breaking trait signature, tuple impls deletedio::Errorsources inprocess.rs,Error::InvalidOperationvariant, structured SQLSTATE onCancelled/Closed/ConnectionDeferred to v0.3.x
#75 — flatten internal
client::Error. Internal-only, zero external consumers, scope grew on second look (51 producers + 15 kinds vs. originally estimated ~6). v0.3.0 has all user-facing improvements without it.The changes in this PR
Commit 1 (
feat:): Two-line documentation refresh inhyperdb-api/src/lib.rsto (a) addhyperdb-api-deriveto the companion-crates list (it was added in #74 but not mentioned at the crate level), and (b) fix a stale crate name (sea-query-hyper→sea-query-hyperdb). This is the minimum-viable code change to carry afeat:commit. The semantic content of the release is in the commit body'sBREAKING CHANGE:footer, which release-please uses to generate the v0.3.0 entry inCHANGELOG.md.Commit 2 (
chore(ci):): Pre-release CI/CD audit found thathyperdb-api-derive(added in #74) was missing fromrelease.yml's publish-in-dependency-order step. Without this fix,cargo publish -p hyperdb-apiwould fail at release time becausehyperdb-api/Cargo.tomlpinshyperdb-api-derive = "=0.X.Y"(strict equality) and the registry wouldn't havehyperdb-api-derive 0.3.0yet. Also adds the derive crate to thepublish dry-runjob inci.ymlso the same class of bug is caught in CI next time, and refreshes a stale "7 workspace-member version rows" comment inrelease-please.yml.CI/CD readiness audit (pre-merge)
Both adversarial reviewers (line-level + architect) ran against the v0.3.0 CI/CD config. Findings reconciled:
hyperdb-api-derivemissing fromrelease.ymlpublish listci.ymlpublish-dry-runrelease-please.ymlrelease-please-config.jsonextra-filesdoesn't list every workspace crateversion.workspace = trueso the workspace-root bump cascades automatically; theextra-fileslist only matters for crates withx-release-please-start-versionmarkers (currently 3 crates, all listed). Filing follow-up.already exists onguard for crates.io, will require similar for npm). Filing follow-up.branches/main/protectionAPI. Real but lower-stakes for the immediate v0.3.0 cycle. Filing follow-up.=X.Y.Zpinning + 45s settle window — could time out in registry-lag scenarioscargo-semver-checksguard against accidental#[non_exhaustive]removalVerification
cargo build --workspace --all-targets✅cargo clippy --workspace --all-targets -- -D warnings✅cargo test --workspace✅ — 81 test groups passcargo fmt --check✅cargo doc --workspace --no-deps✅ — 6 warnings (= post-Flatten Error type to canonical M-ERRORS shape (drop Client wrapper, Box<dyn> source, Option<ErrorKind>) #70 baseline)What happens after merge
chore: release mainPR. The CHANGELOG.md entry on that PR will list:feat:from this commit (subject + BREAKING CHANGE footer)chore:commits from chore(api): flatten Error enum and add ergonomic constructors workspace-wide (#70) #71, chore(api): deprecate raw transaction trio; migrate MCP async paths to RAII (#69) #73, chore(api): modernize FromRow with #[derive] + RowAccessor (#61, #62) #74, chore(api): v0.3.0 follow-ups (A: typed I/O sources, B: InvalidOperation, C: structured SQLSTATE) #76 (release-please reclassifies them under the major-bump section because of the BREAKING CHANGE footer here)MIGRATING-0.3.mdsections are already comprehensive.v0.3.0, publishes crates (per the existing release.yml), and cuts a GitHub Release.MIGRATING-0.3.mdif any post-merge corrections are needed (likely none — it's been polished across 4 PRs).Test plan
.release-please-manifest.jsonstill at0.2.3pre-merge (verifyingchore:strategy held — confirmed)chore: release mainbumping to0.3.0