---
milestone: v0.8.0
audited: 2026-05-06
status: passed
scores:
  requirements: 0/0  # vacuous — milestone has no REQ-IDs (interior architecture)
  phases: 5/5
  integration: 7/7
  flows: 1/1
gaps:
  requirements: []
  integration: []
  flows: []
tech_debt:
  - phase: 62-caret-restoration-lru-removal
    items:
      - "ROADMAP.md line 202: Phase 62 checkbox still `[ ]` despite VERIFICATION status: passed (`phase complete` ran but the regex did not flip a checkbox under a `<details>` block)."
      - "62-VALIDATION.md frontmatter drift — status: draft, nyquist_compliant: false, wave_0_complete: false. All three flags contradict the actual end-state (Wave 0 commits 373425c..8fbdd22 landed; tests green)."
  - phase: cross-milestone
    items:
      - "Phases 58-61 ship only PLAN.md + VERIFICATION.md (no RESEARCH/DISCUSS/VALIDATION/SUMMARY) — known doc gap from the 2026-05-05 retroactive consolidation. Not a wiring failure."
      - "STATE.md frontmatter `milestone: v0.1.0` is stale; body content references Phase 62 correctly. Pre-existing, not introduced by v0.8.0."
      - "CHANGELOG.md link refs at bottom missing entries for [0.8.0], [0.7.2], [0.7.1] despite the corresponding sections existing. Cosmetic."
nyquist:
  compliant_phases: 0
  partial_phases: 1   # 62 (VALIDATION.md exists but frontmatter not flipped)
  missing_phases: 4   # 58-61 (retroactive — no VALIDATION.md by design)
  overall: known-doc-gap-not-blocker
---

# v0.8.0 Milestone Audit — Transactional DDL & Architectural Unification

**Status:** ✅ PASSED
**Audited:** 2026-05-06
**Phases in scope:** 58 → 59 → 60 → 61 → 62 (5 phases, all completed)
**Integration check:** passed (`gsd-integration-checker`, sonnet)

---

## Definition of Done

From ROADMAP.md (lines 181–215, v0.8.0 milestone block):

> Transactional DDL & Architectural Unification — `CREATE`/`DROP`/`ALTER SEMANTIC VIEW` participate in caller's transaction via `parser_override`; legacy `parse_function`/`sv_ddl_internal` retired (~1500 LOC removed); race guards + FFI UTF-8 hardening; bounded multi-DB isolation with RAII guards; caret rendering restored; bounded LRU removed.

All success criteria delivered. Two paired TECH-DEBT items deliberately introduced mid-milestone (TECH-DEBT 20 in Phase 61, TECH-DEBT 22 in Phase 59) were resolved structurally in Phase 62.

---

## Phase Verification Roll-Up

| Phase | Name | Status | Notes |
|-------|------|--------|-------|
| 58 | Transactional DDL via parser_override | ✅ passed | Retroactive (PR #28); no SUMMARY/RESEARCH (back-derived) |
| 59 | Architectural unification | ✅ passed-with-known-regression | Introduced TECH-DEBT 22 (resolved in 62) |
| 60 | Race guards & validation hardening | ✅ passed | Two-statement DROP/ALTER guard; FFI UTF-8; ParserOptions size assert |
| 61 | Bounded multi-DB isolation, RAII, tests & docs | ✅ passed | Introduced TECH-DEBT 20 (resolved in 62); ADBC + concurrent + INSERT OR REPLACE tests |
| 62 | Caret restoration + LRU removal | ✅ passed | 4/4 plans, 4 waves; 10/10 must_haves verified directly against codebase |

---

## Requirements Coverage

**0 / 0 — vacuous.**

`REQUIREMENTS.md` contains only v0.7.0 requirements (YAML-01..09, MAT-01..07, INTR-01..03). v0.8.0 is interior architecture work with no user-facing requirement traceability targets. No orphans; no unsatisfied items; no partial items.

---

## Cross-Phase Integration

7 of 7 wiring checks PASSED. Full report from `gsd-integration-checker` confirms the architectural narrative composes cleanly end-to-end.

| # | Wiring focus | Status | Evidence |
|---|---|---|---|
| 1 | parser_override + parse_function registration end-to-end (58 → 59 → 62) | ✅ wired | `cpp/src/shim.cpp:373-384` registers all 3 hooks in `sv_register_parser_hooks`; `src/lib.rs:330-381` is the only caller via `init_extension(db_handle, catalog_conn, is_file_backed)` |
| 2 | CatalogReader / OverrideContext lifetime (58 → 61 → 62) | ✅ wired | `parser_override_catalog`, `set_catalog_for_parser_override`, `CATALOG_LRU`, `MAX_CATALOG_ENTRIES`, `LRU_CAPACITY` — zero hits across `src/`, `cpp/src/`, `cpp/include/`. Q2 destruction-order honoured: `duckdb_disconnect` appears in `Drop for OverrideContext` and `~SemanticViewsParserInfo` only as `//` comments documenting the deliberate absence. |
| 3 | Race guards + FFI UTF-8 (Phase 60) survive Phase 62 | ✅ wired | `src/parse.rs:2081-2083` two-statement DROP/ALTER guard intact; checked `std::str::from_utf8` at `:2511` and `:2614` (the second is a *new* Phase-62 hardening site); `static_assert(sizeof(ParserOptions) == 32)` at `cpp/include/parser_extension_compat.hpp:166`. |
| 4 | Caret rendering closes the loop (59 → 62) | ✅ wired | TECH-DEBT.md item 22 marked `✅ Resolved in Phase 62 (v0.8.0)`. `sql_throwing` definition gone (3 remaining matches in `src/parse.rs` are `//` comments). 7 caret sqllogictest fixtures populated with `LINE 1:` + `^` assertions. |
| 5 | TECH-DEBT 20 closes the loop (61 → 62) | ✅ wired | TECH-DEBT.md item 20 marked `✅ Resolved in Phase 62 (v0.8.0)`. B15 17-DB sequential test passes; B16 50-DB RSS test passes (150.6 MB). |
| 6 | Test gate continuity | ✅ wired | All 5 VERIFICATION.md files report `just test-all` exit 0 (or equivalent). Phase 61 unit test `parser_override_catalog_lru_evicts_oldest` deleted by Phase 62 with replacement coverage — clean handoff, not a regression. |
| 7 | CHANGELOG narrative coherence | ✅ wired | `[0.8.0] - Unreleased` reads as one continuous arc; the two `### Known limitations` bullets for TECH-DEBT 20 + 22 are struck through with `**Resolved in Phase 62**` annotations (lines 51, 53). |

---

## Nyquist Compliance Discovery

| Phase | VALIDATION.md | Compliant | Action |
|-------|---------------|-----------|--------|
| 58 | missing | n/a | Retroactive — no VALIDATION.md by design (back-derived from commits) |
| 59 | missing | n/a | Retroactive — no VALIDATION.md by design |
| 60 | missing | n/a | Retroactive — no VALIDATION.md by design |
| 61 | missing | n/a | Retroactive — no VALIDATION.md by design |
| 62 | exists | partial | `nyquist_compliant: false` + `wave_0_complete: false` in frontmatter; tests green in practice. Doc drift only. Optional: `/gsd-validate-phase 62` to flip flags, or hand-edit frontmatter. |

---

## End-to-End Narrative

The v0.8.0 story holds up as a single coherent delivery. From `gsd-integration-checker`:

> "We made DDL transactional via a new parser hook (58); we unified all DDL paths through that one hook and deleted ~1500 LOC of legacy fallbacks (59); the unification revealed two known limitations — caret rendering and silent multi-DB eviction — which we shipped as documented limitations (59→TECH-DEBT 22, 61→TECH-DEBT 20) along with race guards (60); then we resolved both limitations structurally by reintroducing parse_function as a pure error-reporting layer and direct-attaching `OverrideContext` to `SemanticViewsParserInfo` (62)."

Each transition is wired in code, with no orphan globals or broken consumers.

---

## Tech Debt Observed (non-blocking)

5 items, all administrative or doc-drift. None affect runtime behaviour or the milestone's definition of done.

| # | Phase | Item | Severity |
|---|-------|------|----------|
| TD-A1 | 62 | ROADMAP.md line 202 still shows `- [ ]` for Phase 62 | doc-drift |
| TD-A2 | 62 | VALIDATION.md frontmatter (`status: draft`, `nyquist_compliant: false`, `wave_0_complete: false`) | doc-drift |
| TD-A3 | 58–61 | No RESEARCH/DISCUSS/VALIDATION/SUMMARY (retroactive consolidation 2026-05-05) | known doc gap |
| TD-A4 | global | STATE.md frontmatter `milestone: v0.1.0` stale | pre-existing |
| TD-A5 | global | CHANGELOG.md missing diff link refs for `[0.8.0]`/`[0.7.2]`/`[0.7.1]` | cosmetic |

**Recommended fixes before tagging:**
- TD-A1, TD-A2 — trivial frontmatter/checkbox edits (≤5 lines)
- TD-A5 — append diff link refs to CHANGELOG bottom

**Not required before tagging** (pre-existing or known-by-design):
- TD-A3, TD-A4

---

## Pre-Tag Checklist (per CLAUDE.md milestone-completion rules)

- ✅ CHANGELOG.md `[0.8.0]` section reflects all 5 phases as a coherent feature delivery
- ❌ Add example file under `examples/` for v0.8.0 features (Phase 62 introduced `examples/race_guards_and_unification.py` and `examples/transactional_ddl.py` — confirm these together cover the milestone surface)
- ❌ Bump version: `Cargo.toml` + `description.yml` already at `0.8.0` per project memory; flip CHANGELOG `[0.8.0] - Unreleased` → `[0.8.0] - <ship-date>`
- ❌ Tag git commit `v0.8.0`

---

## Verdict

**v0.8.0 is functionally complete and ready for tagging.** All 5 phases verified, integration narrative holds, no requirements (vacuous), 5 minor doc-drift items recommended for cleanup before the tag commit.
