---
phase: 63
plan: 04
subsystem: release prep — version artefacts + final pre-tag CI gate
tags: [release, version-bump, milestone-close, v0.9.0]
dependency-graph:
  requires:
    - "63-01 (read-only LOAD core: src/lib.rs + src/catalog.rs)"
    - "63-02 (test infrastructure: integration test + sqllogictest fixture + test-readonly recipe)"
    - "63-03 (user-facing docs + example: CHANGELOG, explanation page, ref notes, README, examples/readonly_load.py)"
  provides:
    - "Cargo.toml version = 0.9.0 (matches CHANGELOG ## [0.9.0] section)"
    - "description.yml extension.version: 0.9.0 (mirrors crate version; consumed verbatim by 'just release')"
    - "Cargo.lock and fuzz/Cargo.lock regenerated to point at semantic_views 0.9.0"
    - "Final pre-tag green build: just test-all and just ci both exit 0"
    - "Working tree clean on milestone/v0.9.0 — ready for human-driven squash-merge + tag"
  affects:
    - "Maintainer hand-off: squash-merge milestone/v0.9.0 to main, tag v0.9.0, push tag, run 'just release' (which sed-edits description.yml repo.ref to the post-tag commit SHA and opens the CE registry PR)"
tech-stack:
  added: []
  patterns: ["version-bump-as-three-commits (Cargo.toml then description.yml then propagated lockfiles)", "out-of-scope tag/merge documented as maintainer hand-off in SUMMARY"]
key-files:
  created:
    - ".planning/phases/63-readonly-database-load-support/63-04-SUMMARY.md"
  modified:
    - "Cargo.toml (version 0.8.0 -> 0.9.0)"
    - "Cargo.lock (semantic_views package version line only)"
    - "description.yml (extension.version 0.8.0 -> 0.9.0; repo.ref UNCHANGED — owned by 'just release')"
    - "fuzz/Cargo.lock (semantic_views package version line only; regenerated by 'cargo +nightly check' inside 'just ci')"
decisions:
  - "Cargo.lock and fuzz/Cargo.lock changes were committed alongside the version bumps — they are the natural propagation of a single source-of-truth version change and the plan's Task 3 acceptance explicitly listed Cargo.lock as acceptable."
  - "description.yml repo.ref intentionally NOT bumped — 'just release' (run on main after the tag) owns it (justfile:220-232). Honours plan §Task 2 explicit constraint and threat T-63-R2."
  - "Used 'cargo build' (default features) for the Task 1 sanity check after the plan's specified 'cargo build --no-default-features --features bundled' rejected ('bundled' is not a top-level feature; it lives inside default = [\"duckdb/bundled\"]). The default-features build exercises the same DuckDB amalgamation linkage; outcome is equivalent."
  - "Tag creation, squash-merge, push, and 'just release' are explicitly out of scope per plan §objective and §<output> — flagged in this SUMMARY's Maintainer Actions section."
metrics:
  duration: "~16 min"
  completed: 2026-05-15
---

# Phase 63 Plan 04: Release Prep — Version Bump Summary

Both version artefacts (`Cargo.toml` and `description.yml`) bumped from `0.8.0` to `0.9.0` ahead of the `v0.9.0` tag, lockfiles propagated, and the full pre-tag quality gate (`just test-all` + `just ci`) green on the post-bump build. `description.yml repo.ref:` left intentionally unchanged — `just release` on main owns it after the tag is cut. Working tree clean on `milestone/v0.9.0` and ready for the human-driven squash-merge + tag steps.

## What Shipped

**Files modified (4):**

- `Cargo.toml` — line 3 `version = "0.8.0"` -> `version = "0.9.0"`. No other lines touched.
- `Cargo.lock` — single-line propagation (the `[[package]] name = "semantic_views" version = ...` block), regenerated by the Task 1 `cargo build`.
- `description.yml` — line 4 `  version: 0.8.0` -> `  version: 0.9.0`. `repo.ref:` (line 15), `docs.hello_world:`, and `docs.extended_description:` UNCHANGED. YAML still parses (`extension.version == 0.9.0`).
- `fuzz/Cargo.lock` — single-line propagation, regenerated by `cargo +nightly check` inside the Task 3 `just ci` run.

## Verification

| Step | Command | Result |
|------|---------|--------|
| 1 | `git branch --show-current` | `milestone/v0.9.0` |
| 2 | `grep -nE '^version = "0\.9\.0"$' Cargo.toml` | exactly 1 match (line 3) |
| 3 | `grep -nE '^version = "0\.8\.0"$' Cargo.toml` | 0 matches |
| 4 | `grep -nE '^  version: 0\.9\.0$' description.yml` | exactly 1 match (line 4) |
| 5 | `grep -nE '^  version: 0\.8\.0$' description.yml` | 0 matches |
| 6 | `git diff` (post-Tasks 1+2, pre-commit) | exactly 2 file changes; only the version lines + lockfile propagation; **no `repo.ref` change** |
| 7 | `cargo build` (default features) | `Compiling semantic_views v0.9.0 ... Finished` — sanity check after Task 1 |
| 8 | `python -c "import yaml; yaml.safe_load(...)"` (via uv) | `YAML OK; version = 0.9.0` after Task 2 |
| 9 | `just test-all` | EXIT 0 — full chain green: 851/851 cargo tests, 46/46 sqllogictest (incl. `readonly_load.test`), DuckLake CI, vtab-crash, caret, ADBC, large-view, multi-DB, **`test-readonly` 3/3 PASS**, concurrent |
| 10 | `just ci` | EXIT 0 — lint (clippy + fmt) + test-all + check-fuzz (`cargo +nightly check` on fuzz workspace) + docs-check (Sphinx `-W`) all green |
| 11 | `git status --short` (post all commits) | clean of any tracked file changes; only pre-existing untracked entries (`.DS_Store`, `.cache/`, `_notes/error_with_adbc.md`) — none version-bump-related |

## Deviations from Plan

### Auto-fixed Issues

**1. [Rule 3 — Blocking] Plan's specified `cargo build --no-default-features --features bundled` errored with `the package 'semantic_views' does not contain this feature: bundled`**

- **Found during:** Task 1 sanity check.
- **Issue:** `bundled` is enabled via `default = ["duckdb/bundled"]` in `Cargo.toml` (line 27) — it is the duckdb crate's feature, not a top-level `semantic_views` feature. The plan body's literal command form was inaccurate.
- **Fix:** Ran `cargo build` (default features) instead. This compiles `semantic_views` linked against the bundled DuckDB amalgamation — equivalent intent and equivalent coverage.
- **Files modified:** none (build invocation only).
- **Commit:** N/A (verification command, not a source change).

### Documented Out-of-Scope (per plan)

- **`fuzz/Cargo.lock` propagation surfaced AFTER `just ci` ran.** Task 3 said the diff should be exactly `Cargo.toml + description.yml` (with `Cargo.lock` acceptable). The fuzz workspace lockfile was regenerated by the `check-fuzz` step inside `just ci`, which the plan did not anticipate as a write. It is a single-line change (semantic_views version) — same shape as `Cargo.lock` — so committed as a third Phase 63-04 commit (`a4fd2bc`) for cleanliness. Working tree is clean afterwards.

## Authentication Gates

None.

## Branch + Hand-off

- **Branch:** `milestone/v0.9.0` (verified before each commit AND before the test gates)
- **Commits added by this plan (3):**
  - `18f3486` — `chore(63-04): bump Cargo.toml version to 0.9.0` (Cargo.toml + Cargo.lock)
  - `34edd37` — `chore(63-04): bump description.yml version to 0.9.0`
  - `a4fd2bc` — `chore(63-04): regenerate fuzz/Cargo.lock for 0.9.0`

## MAINTAINER ACTIONS REQUIRED (out of scope for execute-phase)

The following steps are **explicitly out of scope** for Plan 04 per the plan's `<objective>` block and the v0.5.4 release recipe pattern (`justfile:220+` runs on `main` only, after merge). They MUST be performed by a human maintainer:

1. **Run phase verification:** `/gsd-verify-work 63` — confirms Plan 01-04 SUMMARY artefacts against ROADMAP success criteria for Phase 63 (the only phase in v0.9.0).
2. **Re-confirm CHANGELOG date:** Plan 03 set the heading to `## [0.9.0] - 2026-05-15`. If the human maintainer ships on a different date, update the heading line in `CHANGELOG.md` (and only the heading — the bottom-of-file `[0.9.0]: ...compare/v0.8.0...v0.9.0` link target depends only on the tag string, not the date).
3. **Squash-merge `milestone/v0.9.0` -> `main`** (preserve commit-message context in the squash body — feature-level summary mirroring CHANGELOG `### Added` bullets).
4. **Tag the merge commit on `main`:** `git tag -a v0.9.0 -m "v0.9.0 — Read-Only Database LOAD Support"`.
5. **Push the tag:** `git push origin v0.9.0`.
6. **Run `just release` on `main`** — sed-edits `description.yml` `repo.ref:` to the post-tag commit SHA, commits the descriptor change, and opens the CE registry PR.
7. **Update STATE.md / MEMORY.md** to mark v0.9.0 shipped (analogous to the v0.8.0 entry).

## Self-Check: PASSED

Verified files exist:
- FOUND: `Cargo.toml` (modified, 0.9.0)
- FOUND: `Cargo.lock` (modified, semantic_views 0.9.0)
- FOUND: `description.yml` (modified, extension.version: 0.9.0; repo.ref UNCHANGED)
- FOUND: `fuzz/Cargo.lock` (modified, semantic_views 0.9.0)
- FOUND: `.planning/phases/63-readonly-database-load-support/63-04-SUMMARY.md` (this file)

Verified commits:
- FOUND: `18f3486` — Task 1 Cargo.toml bump
- FOUND: `34edd37` — Task 2 description.yml bump
- FOUND: `a4fd2bc` — Task 3 fuzz/Cargo.lock propagation
