Add python development workspace support - #20
Merged
Merged
Conversation
Separate runtime configuration from developer identity and application initialization. Add explicit preparation/startup, shared dependency storage, contract labeling and CI coverage.
Run a real uv and Gunicorn smoke test during development-image CI. Verify that an edit from another container appears in HTTP responses and preparation preserves the lockfile.
Resolve fixture ownership through the wodby account so the same reload test works for development images using UID 1000 and macOS variants using UID 501. Verified the real reload test with both IDs.
csandanov
marked this pull request as ready for review
September 23, 2026 16:26
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.
Development workspaces need runtime tools and dependency preparation without normal startup overwriting developer configuration. This adds workspace contract version 1, configuration-only startup, explicit development commands, and login-shell tool paths that survive a mounted home.
Python uses locked uv synchronization or requirements in shared virtualenv storage. uv is installed outside the developer home so home mounts do not hide it. Gunicorn uses polling; Uvicorn commands receive watchfiles polling defaults.
Shared dependency/build files use a reserved checkout directory excluded through local Git metadata. Tracked paths and symlinks at that directory are refused. Ordinary startup keeps its existing behavior.
Validation
Local helper tests with package-manager stubs passed; shell syntax checked; common contract, configuration/state preservation, and runtime tests added to image CI.
Local candidate container checks passed for configuration-only startup, developer-state preservation, reserved storage, and workspace startup. Full image matrix CI and live-cluster acceptance remain pending.
Real locked uv preparation preserved the lockfile; Gunicorn observed a second-container edit over a shared volume. This smoke test is included in CI. uv and Git remained available with an empty home mount.
Release
Publish a new revision after CI passes, then advance consuming ordinary/development tag pairs. Existing releases are not relabeled.