feat: uis-exec shim, port-forward verifier, quickstart parser, portsAttributes — v1.7.37 - #93
Merged
Conversation
…ttributes — v1.7.37
Five user-visible changes shipped together because they all surfaced
during the v1.7.36 E2E test of python-basic-webserver-database against
real UIS, and they're all about closing the "from clean clone to
working app" gap.
1. uis-exec multi-call shim
New script .devcontainer/manage/uis-exec.sh + Dockerfile symlinks
for kubectl, helm, k9s. Same busybox-style multi-call pattern as
the existing `uis` shim. From DCT, `kubectl get pods` Just Works
(proxied through docker exec into uis-provision-host). Zero install
in DCT, zero version drift between DCT's kubectl and the cluster's,
no kubeconfig copying. Add new shims by adding one symlink line.
2. Port-forward dual-check verifier in dev-template-configure
The old code printed "Port forward (created by UIS)" based on UIS's
JSON response without verifying. Two failure modes hit during E2E:
(a) UIS auto-expose silently failed (process never created), and
(b) Docker Desktop vpnkit returned false-positive TCP handshakes
even when the port-forward was dead. New code does TWO checks:
pgrep inside uis-provision-host (authoritative) AND TCP probe from
DCT (what users care about). Four-state output covers truly working
/ broken / vpnkit-false-positive / process-up-but-network-broken,
with actionable recovery commands in each warning.
3. quickstart parser in dev-template
New parse_quickstart_block() reads an optional `quickstart:` block
from template-info.yaml and prints it as the new "Run your app"
step in the "Next steps" output. Schema: title, commands list,
multi-line note. Templates without `quickstart` get the existing
"Start building your project" fallback — zero breakage. Tracks
INVESTIGATE-template-quickstart-block.md.
4. portsAttributes 30000-39999 in user template
Excludes the entire UIS exposed-port range from VS Code auto-forward.
UIS uses a "3 + internal port" convention for every service
(35432 postgres, 36379 redis, 33306 mysql, 39200 elasticsearch,
etc.) so one rule covers every current and future UIS service.
Fixes the bug where VS Code Code Helper intercepted port 35432,
accepted the TCP handshake, but couldn't speak postgres protocol,
causing psycopg2 to hang forever.
5. Three INVESTIGATE files updated/added
- INVESTIGATE-host-identity-and-template-defaults.md gets a "Bug C
surfaces in two places" rewrite plus a real-world reproduction
section captured during the v1.7.36 E2E (vscode@localhost shown).
- INVESTIGATE-kubeconfig-in-devcontainer.md gets a new Option F
section: the uis-exec passthrough approach this PR ships, with
pros/cons vs the existing host-kubeconfig-copy options.
- INVESTIGATE-template-quickstart-block.md (new) captures the
design + Q1-Q6 decisions for the quickstart schema.
Tested in delete-test against real UIS:
- dev-template-configure verbose output renders correctly (v1.7.36)
- Port-forward verifier shows "verified reachable from DCT" when
the kubectl port-forward exists, "MISSING (Docker proxy false
positive)" when it doesn't (verified against port 35499)
- kubectl get secret delete-test-db -n delete-test works via the shim
- Flask app at /tasks returns 3 seeded rows end-to-end via
host.docker.internal:35432 → kubectl port-forward → postgres pod
- portsAttributes rule prevents VS Code from intercepting 35432
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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.
Summary
Five user-visible changes shipped together because they all surfaced during the v1.7.36 E2E test of
python-basic-webserver-databaseagainst real UIS, and they're all about closing the "from clean clone to working app" gap.1.
uis-execmulti-call shim — kubectl/helm/k9s without installing anything in DCTNew
manage/uis-exec.sh+ Dockerfile symlinks forkubectl,helm,k9s. Same busybox-style multi-call pattern as the existinguisshim. From DCT,kubectl get podsJust Works (proxied throughdocker execinto uis-provision-host). Zero install in DCT, zero version drift between DCT's kubectl and the cluster's, no kubeconfig copying, no platform shenanigans. Add new shims by adding one symlink line.2. Port-forward dual-check verifier in
dev-template configureThe old code printed "Port forward (created by UIS)" based purely on UIS's JSON response without verifying. Two failure modes hit during E2E:
Status: okNew code does two checks:
pgrepinside uis-provision-host (authoritative — process actually exists)host.docker.internal:port(what users care about)Four-state output covers truly working / broken / vpnkit-false-positive / process-up-but-network-broken, with actionable recovery commands in each warning.
3.
quickstartparser indev-templateNew
parse_quickstart_block()reads an optionalquickstart:block fromtemplate-info.yamland prints it as the new "Run your app" step in the "Next steps" output. Schema:Templates without
quickstartget the existing "Start building your project" fallback — zero breakage. TracksINVESTIGATE-template-quickstart-block.md(also in this PR).4.
portsAttributes 30000-39999in user templateExcludes the entire UIS exposed-port range from VS Code auto-forward.
UIS uses a
3 + internal portconvention for every service:So one rule covers every current and future UIS service. Fixes the bug where VS Code Code Helper intercepted port 35432, accepted the TCP handshake, but couldn't speak postgres protocol — causing psycopg2 to hang forever.
5. Three INVESTIGATE files updated/added
INVESTIGATE-host-identity-and-template-defaults.md— adds "Bug C surfaces in TWO places" rewrite (welcome message + dev-check both warn) plus a real-world reproduction section captured during the v1.7.36 E2E run (vscode@localhostshown)INVESTIGATE-kubeconfig-in-devcontainer.md— new Option F section: the uis-exec passthrough approach this PR ships, with pros/cons vs the existing host-kubeconfig-copy options (A-E)INVESTIGATE-template-quickstart-block.md(new) — captures the design + Q1-Q6 decisions for the quickstart schemaTest plan
End-to-end validated in delete-test against real UIS (v1.7.36 + hot-patches):
dev-template-configureverbose output renders correctlykubectl get secret delete-test-db -n delete-testworks via the new shimpostgresql.default.svc.cluster.local:5432)/tasksreturns 3 seeded rows end-to-end viahost.docker.internal:35432→ kubectl port-forward → postgres pod:1.7.37and:latest🤖 Generated with Claude Code