Skip to content

Commit 204caeb

Browse files
chore(v0.1.11): bump version, add CHANGELOG entry and release notes
- pyproject + __init__ to 0.1.11, lockfile refreshed - CHANGELOG [0.1.11] entry: M2 schema work (#83/PR #190), ruff pin + format gate (PR #174), release-time dependency review (PR #180), and the four T2-4 review follow-ups closed on this branch (#185-#188) - docs/releases/v0.1.11.md + mkdocs nav entry Release date matches the planned 2026-08-07; adjust before tagging if the train slips. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent bfe71ad commit 204caeb

6 files changed

Lines changed: 111 additions & 3 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,44 @@
11
All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
22

3+
## [0.1.11] - 2026-08-07
4+
5+
_Headline: `tycoon.yml` learns its own schema version. The ingestion rewrite's M2 lands ([#83][], PR [#190][]) — `runtimes:` and `metadata:` blocks on the project model, an integer `schema_version` with comment-preserving in-place migration via `tycoon init --upgrade`, and the config singleton replaced across the ingestion commands. Plus a pinned, fully-formatted codebase (PR [#174][]) and the first release-time dependency review (PR [#180][], replacing the Dependabot PR pile)._
6+
7+
### Added
8+
9+
- **`runtimes:` and `metadata:` blocks in `tycoon.yml`** ([#90][], PR [#190][]). New `RuntimeEntry` and `MetadataConfig` models on `TycoonProject`, both defaulted — every existing `tycoon.yml` loads unchanged. This is the schema surface the rest of the ingestion rewrite ([#81][]) configures runtimes and metadata backends through.
10+
- **`schema_version` + `migrate_project()`** ([#92][], PR [#190][]). `tycoon.yml` now carries an integer `schema_version` (currently `2`), stamped on new projects and advanced by an in-place, idempotent migration that also writes `metadata:` defaults. The migration uses ruamel.yaml so comments and blank lines survive the round-trip; `ruamel-yaml` joins the runtime dependencies. Integer rather than semver-string because string comparison ordered `"0.10.0" < "0.2.0"`.
11+
- **`tycoon init --upgrade`** ([#96][], PR [#190][]). Runs the migration and reports whether the file changed. Loading a project with a stale `schema_version` warns and names this command as the remedy; a future `schema_version` makes gated data commands exit 1 cleanly instead of tracebacking. Enforcement is staged — it lives in `load_config()` and currently covers the ingestion commands; full-surface coverage is tracked in [#189][].
12+
- **Docs for the schema surface** ([#188][]). `schema_version` in the `tycoon.yml` reference — including the `version` (yours) vs `schema_version` (tycoon's) split — and an "Upgrading an existing project" section on the init page.
13+
- **Subprocess import-safety guard** ([#187][]). A `tests/test_cli_surface.py` regression test runs the real `tycoon` binary against a hostile `schema_version: 99` project: `--help`/`--version` must exit 0 and `init --upgrade` must fail cleanly. In-process `CliRunner` tests cannot observe import-time breakage by construction.
14+
15+
### Changed
16+
17+
- **Ingestion commands construct config locally** ([#94][], PR [#190][]). `sources`, `run-all`, `sync`, and `explore` build `TycoonConfig` at invocation through a new `load_config()` factory instead of importing the module-level singleton, keeping `--help` and `tycoon init --upgrade` import-safe no matter what a project's `tycoon.yml` says. Remaining singleton users (`transform`, `db`, `status`) are tracked in [#175][].
18+
- **ruff pinned, formatting enforced in CI** (PR [#174][]). CI previously ran `uvx ruff` (always latest) against an unpinned project, so new ruff releases broke CI without a code change. ruff is now pinned in the dev group, `ruff format --check` joins the lint job, and the one-time repo-wide format pass (~75 files) clears all pre-existing violations.
19+
- **Dependencies reviewed at release time** (PR [#180][], replacing Dependabot PRs #161–#168). `dbt-core` 1.11.8 → 1.12.0, `typer` 0.25.0 → 0.27.0; SHA-pinned actions `actions/checkout` → v7.0.1 and `astral-sh/setup-uv` → v9.0.0. dbt-core 1.12 reshapes the dependency tree (adds metricflow, drops dbt-semantic-interfaces; lockfile 109 → 113 packages).
20+
21+
### Fixed
22+
23+
- **Template scaffolding no longer flattens `tycoon.yml`** ([#185][]). `tycoon init --template` stamped `schema_version` through a `yaml.safe_load`/`dump` round-trip that stripped the template's blank-line separators — the first file a new user opens. Stamping now goes through `migrate_project()` (ruamel-based), which also writes the `metadata:` defaults in the same pass.
24+
- **Dead code from the T2-4 review dropped** ([#186][]). `save_project` carried a two-line conditional that duplicated what `model_dump` already does.
25+
26+
[#81]: https://github.com/Database-Tycoon/tycoon-cli/issues/81
27+
[#83]: https://github.com/Database-Tycoon/tycoon-cli/issues/83
28+
[#90]: https://github.com/Database-Tycoon/tycoon-cli/issues/90
29+
[#92]: https://github.com/Database-Tycoon/tycoon-cli/issues/92
30+
[#94]: https://github.com/Database-Tycoon/tycoon-cli/issues/94
31+
[#96]: https://github.com/Database-Tycoon/tycoon-cli/issues/96
32+
[#174]: https://github.com/Database-Tycoon/tycoon-cli/pull/174
33+
[#175]: https://github.com/Database-Tycoon/tycoon-cli/issues/175
34+
[#180]: https://github.com/Database-Tycoon/tycoon-cli/pull/180
35+
[#185]: https://github.com/Database-Tycoon/tycoon-cli/issues/185
36+
[#186]: https://github.com/Database-Tycoon/tycoon-cli/issues/186
37+
[#187]: https://github.com/Database-Tycoon/tycoon-cli/issues/187
38+
[#188]: https://github.com/Database-Tycoon/tycoon-cli/issues/188
39+
[#189]: https://github.com/Database-Tycoon/tycoon-cli/issues/189
40+
[#190]: https://github.com/Database-Tycoon/tycoon-cli/pull/190
41+
342
## [0.1.10] - 2026-07-21
443

544
_Headline: the codebase gets dramatically smaller and more focused. The ingestion rewrite's M1 metadata backend lands ([#82][], PRs [#136][]/[#137][]), and the FastAPI server, Dagster orchestration, and Nao/ask AI-agent extras are removed outright ([#139][], PR [#147][]) — the lockfile drops from 174 to 109 packages. Cycle plan in [`docs/proposals/v0.1.10-scope.md`](docs/proposals/v0.1.10-scope.md)._

‎docs/releases/v0.1.11.md‎

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# v0.1.11
2+
3+
_Released: 2026-08-07_
4+
5+
Headline: `tycoon.yml` learns its **own schema version**. The ingestion
6+
rewrite's second milestone lands — `runtimes:` and `metadata:` blocks on
7+
the project model, an integer `schema_version` with comment-preserving
8+
in-place migration via the new **`tycoon init --upgrade`**, and the
9+
config singleton replaced across the ingestion commands. Alongside it:
10+
a pinned, fully-formatted codebase and the first release-time
11+
dependency review.
12+
13+
## Landed
14+
15+
- **A versioned, migratable `tycoon.yml`** (#83, PR #190) — the project
16+
file now carries `schema_version` (an integer, currently `2`) plus
17+
`runtimes:` and `metadata:` blocks, both defaulted so existing files
18+
load unchanged. `tycoon init --upgrade` migrates older files in
19+
place — idempotent, and your comments, blank lines, and own
20+
`version:` field survive untouched (ruamel.yaml under the hood). A
21+
stale file warns and names the remedy; a *future* `schema_version`
22+
exits cleanly with "upgrade tycoon-cli" instead of tracebacking. See
23+
the [`schema_version` reference](../reference/tycoon-yml.md#schema_version).
24+
- **Config singleton on its way out** (#94, PR #190) — the ingestion
25+
commands (`sources`, `run-all`, `sync`, `explore`) construct their
26+
config at invocation through a `load_config()` factory rather than an
27+
import-time singleton, which is what keeps `--help` and
28+
`init --upgrade` safe in front of any project file. The remaining
29+
singleton users are tracked in #175, broader enforcement coverage
30+
in #189.
31+
- **CI that can't drift** (PR #174) — ruff pinned (CI previously ran
32+
whatever `uvx ruff` resolved to, so upstream releases broke builds),
33+
`ruff format --check` gating every PR, and a one-time repo-wide
34+
format pass.
35+
36+
## Upgrading from 0.1.10
37+
38+
- **Existing projects keep working.** The first data command prints a
39+
one-time-per-invocation warning that `tycoon.yml` is at an older
40+
schema version; run `tycoon init --upgrade` in the project directory
41+
to migrate. The migration adds a `metadata:` block with defaults and
42+
stamps `schema_version: 2` — nothing else in your file is touched.
43+
- **No command or flag was removed.** New runtime dependency
44+
`ruamel-yaml` installs automatically with the package.
45+
- **Dependency floors moved** (PR #180): `dbt-core` 1.12.0 and `typer`
46+
0.27.0. dbt-core 1.12 pulls metricflow into the tree; if you pin
47+
tycoon's dependencies downstream, re-lock.
48+
49+
## Behind the scenes
50+
51+
- The T2-4 review round produced four follow-ups (#185–#188), all
52+
closed in this release: template scaffolding no longer flattens
53+
`tycoon.yml` formatting, a dead conditional in `save_project` is
54+
gone, the schema surface is documented, and a subprocess-layer test
55+
now guards the "hostile tycoon.yml bricks the CLI at import time"
56+
regression class that in-process tests can't see.
57+
- Dependabot's per-bump PRs are replaced by a release-time dependency
58+
review (PR #180 is the first) — runtime pins and SHA-pinned actions
59+
reviewed in one pass, dev-only noise dropped.
60+
61+
## What's next
62+
63+
Milestone 3 of the ingestion rewrite — the verified-source catalog
64+
(manifest, `SourceSpec` models, spec-driven config collection) — is
65+
already in flight on the `v0.1.12` branch. Remaining schema-enforcement
66+
coverage (#189) and the rest of the singleton removal (#175) ride with
67+
it. See the [ingestion architecture doc](../ingestion-architecture.md)
68+
and #81 for the sequence.

‎mkdocs.yml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ nav:
120120
- recipes/fivetran-metadata.md
121121
- recipes/layered-architecture.md
122122
- Releases:
123+
- "v0.1.11": releases/v0.1.11.md
123124
- "v0.1.10": releases/v0.1.10.md
124125
- "v0.1.9": releases/v0.1.9.md
125126
- "v0.1.8": releases/v0.1.8.md

‎pyproject.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
44

55
[project]
66
name = "database-tycoon"
7-
version = "0.1.10"
7+
version = "0.1.11"
88
description = "Tycoon CLI — local-first analytics CLI that adapts to your existing data stack"
99
readme = "README.md"
1010
license = {text = "MIT"}

‎src/tycoon/__init__.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
"""Database Tycoon — local-first analytics CLI for exploring any dataset."""
22

3-
__version__ = "0.1.10"
3+
__version__ = "0.1.11"

‎uv.lock‎

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)