8000 test(scaffold): cover .mcp.json and guard the packaged payload by bjoaquinc · Pull Request #29 · dlt-hub/dlthub-init · GitHub
[go: up one dir, main page]

Skip to content

test(scaffold): cover .mcp.json and guard the packaged payload - #29

Merged
bjoaquinc merged 2 commits into
develfrom
chore/mcp-scaffold-coverage
Sep 9, 2026
Merged

bjoaquinc merged 2 commits into
develfrom
chore/mcp-scaffold-coverage

Conversation

@bjoaquinc
Copy link
Copy Markdown
Contributor

Follow-up to #28. make test-integration gains a wheel-build guard, and the
.mcp.json that PR shipped gets content coverage instead of existence coverage.

Packaging guard

tests_integration/test_packaging.py builds a real wheel and asserts every
enumerate_payload path is present under
dlthub_init/scaffolds/minimal_workspace/.

enumerate_payload walks the source tree, so nothing in the suite looked at the
distributed artifact: a build that dropped a payload file still passed every
test. Most of the payload is dotfiles, which build backends are prone to exclude
silently. The guard covers .gitignore, .python-version and .dlt/* as well
as .mcp.json.

.mcp.json coverage

README

.mcp.json added to the intro file list and named in Collision behavior as never
overwritten. #28 touched neither.

Verification

make lint clean (ruff + mypy, 30 files), make test 126 passed,
make test-integration 2 passed with neither skipped. The guard was checked for
sensitivity: with exclude = ["**/.mcp.json"] injected into the wheel target it
fails and names the dropped path.

Worth a second look: --no-mcp does not exist while --no-pyproject and
--no-gitignore do, so there is no opt-out from registering the server. Left
alone here as a product call rather than a test gap.

@bjoaquinc
bjoaquinc merged commit c81d84e into devel Sep 9, 2026
5 checks passed
@bjoaquinc
bjoaquinc deleted the chore/mcp-scaffold-coverage branch September 9, 2026 14:38
bjoaquinc added a commit that referenced this pull request Sep 16, 2026
* Refresh uv.lock files (#17)

* Refresh uv.lock files

Ran uv lock --upgrade on the root project and the minimal_workspace scaffold.
Notable scaffold bumps: dlt 1.29.0 -> 1.29.1, duckdb 1.5.4 -> 1.5.5, sqlglot
30.13 -> 30.14, cryptography 49.0 -> 50.0, marimo 0.23.14 -> 0.23.16. Root bumps:
posthog, ruff, certifi. Added an [Unreleased] CHANGELOG entry for the scaffold
refresh.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Cap ruff below 0.16 to hold the lint ruleset

ruff 0.16 turns on new default lint rules that flag pre-existing code; adopting
them is a separate migration. Pin ruff <0.16 so the lock refresh does not drag
in a new ruleset. Re-locked the root (scaffold lock unaffected).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* Release v0.2.6 (#18)

Refreshed the bundled minimal workspace uv.lock (dlt 1.29.0 -> 1.29.1, duckdb
1.5.4 -> 1.5.5, sqlglot 30.13 -> 30.14, cryptography 49.0 -> 50.0, marimo
0.23.14 -> 0.23.16). Capped ruff below 0.16 to hold the lint ruleset.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* Refresh uv.lock files (#20)

Ran uv lock --upgrade on the root project and the minimal_workspace scaffold.
Notable scaffold bumps: dlt 1.29.1 -> 1.30.0, dlthub 0.29.0 -> 0.30.0, starlette
1.3.1 -> 1.6.0, sqlglot 30.14 -> 30.17, setuptools 83.0 -> 84.0. Root bumps:
ast-serialize, librt, mypy, posthog, charset-normalizer, packaging. ruff stays
capped below 0.16. Added an [Unreleased] CHANGELOG entry for the scaffold refresh.

* Release v0.2.7 (#21)

Refreshed the bundled minimal workspace uv.lock (dlt 1.29.1 -> 1.30.0, dlthub
0.29.0 -> 0.30.0, starlette 1.3.1 -> 1.6.0, sqlglot 30.14 -> 30.17, setuptools
83.0 -> 84.0) plus the root dev toolchain lock.

* Refresh uv.lock files (#22)

Ran uv lock --upgrade on the root project and the minimal_workspace scaffold.
Scaffold bumps: marimo 0.23.16 -> 0.24.0, dlthub-client 0.28.2 -> 0.28.3,
authlib 1.7.2 -> 1.8.0, cyclopts 4.22.5 -> 4.23.3, cryptography 50.0.0 ->
50.0.1, pydantic 2.13.4 -> 2.13.5, plus transitives; colorama dropped. Root
bumps: posthog 7.39.1 -> 7.45.1, pygments 2.20.0 -> 2.21.0, idna 3.18 -> 3.19.
dlt and dlthub had no in-constraint bump available.

This scaffold ships no marimo notebook, so the 0.24 bump needs no session
snapshot lockstep here. Added an [Unreleased] CHANGELOG entry. make ci is green.

* Release v0.2.8 (#23)

Bump 0.2.7 -> 0.2.8 (pyproject.toml + uv.lock) and promote the [Unreleased]
CHANGELOG section to 0.2.8.

Ships the lockfile refresh from #22: bundled minimal workspace scaffold picks up
marimo 0.23.16 -> 0.24.0, dlthub-client 0.28.2 -> 0.28.3, authlib 1.7.2 -> 1.8.0,
cyclopts 4.22.5 -> 4.23.3, cryptography 50.0.0 -> 50.0.1, pydantic 2.13.4 ->
2.13.5, plus transitives. Root dev toolchain picks up posthog 7.39.1 -> 7.45.1,
pygments and idna.

Patch level: dependency refresh only, no CLI behavior or API change. make ci and
dlthub-init --help are green.

* Run check-skills in CI (#26)

'make check-skills' was only reachable via 'make ci' locally, so skills/
drifting from the pinned workbench ref would not fail a pull request. Adds a
skills-check job mirroring lock-check.

Placed above lock-check rather than as another step in it, so this does not
collide with the workspace deps drift check landing in a separate PR.

* chore(scaffold): sync workspace deps with dlt WORKSPACE_DEPS and check for drift (#25)

* Add workspace deps sync and drift check

The bundled scaffold's dependency list is a copy of dlt's WORKSPACE_DEPS,
which upstream documents as kept in sync but nothing enforced. The copy sat
frozen at dlt's 2026-05-10 state and drifted.

scripts/sync_workspace_deps.py reads WORKSPACE_DEPS from the dlt wheel the
scaffold's uv.lock resolves, so the lock stays the only pin. It parses the
wheel rather than importing dlt, since dlthub-init deliberately does not
depend on dlt. 'make scaffold-deps-sync' rewrites the list, and
'make scaffold-deps-check' fails on drift in CI and 'make ci'.

BASE_SPECS (dlt[hub], dlthub, dlthub-client) is this repo's own prefix and is
never rewritten by a sync; trimming those is a separate decision.

* Sync scaffold deps with dlt 1.30.0 WORKSPACE_DEPS

Applies the first sync: adds s3fs>=2022.4.0 (dlt-hub/dlt#4044) and drops the
python_version >= '3.10' markers on ibis-framework and fastmcp, which upstream
removed with Python 3.9 support (dlt-hub/dlt#4074). Re-resolves the bundled
uv.lock.

s3fs pulls aiobotocore/aiohttp/botocore, taking a synced workspace from 415 MB
/ 120 packages to 444 MB / 133. Upstream carries it so the job and module
launchers can prune it from their runtime requirements and get it pinned from
the workspace lock instead of installing it unpinned at deploy time.

* Document local platform stack testing workflow (#27)

* feat(minimal-workspace): ship a .mcp.json registering the dlt workspace MCP server (#28)

* feat(minimal-workspace): ship a .mcp.json registering the dlt workspace MCP server

* docs(changelog): note the scaffolded .mcp.json

* test(scaffold): cover .mcp.json and guard the packaged payload (#29)

* Cover scaffold .mcp.json and guard the packaged payload

* Document .mcp.json in the README

* Release v0.2.9 (#30)

* chore(scaffold): bump dlthub-client 0.28.3 to 0.28.4

* Release v0.2.10 (#32)

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Hiba Jamal <35984866+hibajamal@users.noreply.github.com>
Co-authored-by: Anton Burnashev <anton.burnashev@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

0